如何为连续的 webAPI 调用更改一个 XML 标记的内容?
How do I change the content of one XML tag for successive webAPI calls?
我目前正在使用 eBay API 和 Python 的请求包。具体来说,我有一个从 eBay 的 Finding API 中获得的 ItemID 列表(大约 10,000 个左右),现在我想将这些 ID 与 TradingAPI 一起使用来获取项目图像。
例如,这将是我的请求的主体。
xml = """<?xml version="1.0" encoding="utf-8"?><GetItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<Version>1085</Version>
<RequesterCredentials>
<eBayAuthToken>YourTokenhere</eBayAuthToken>
</RequesterCredentials>
<MessageID>XML call: OAuth Token in trading</MessageID>
<DetailLevel>ItemReturnAttributes</DetailLevel>
<ItemID>254140401476</ItemID><OutputSelector>Item.PictureDetails.PictureURL</OutputSelector>
<IncludeItemSpecifics>false</IncludeItemSpecifics>
</GetItemRequest>"""
所以我的问题是:
在每次 API 调用中更改 ItemID 值的最有效 way/best 做法是什么?
我遇到的一些问题:
我可以使用 BeautifulSoup 轻松更改值,但是 xml 现在是一个 BeautifulSoup 对象。到目前为止,我还没有找到在 BeautifulSoup 中转换回 xml 的方法。我试过使用 encode("utf-8") 但这会将换行符放入 xml。
在Pythonrequests模块文档中说可以直接提交一个dict,这样可以更方便的修改值。但我不确定如何将 XML 转换为字典,例如
<GetItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">
标签。另外我不确定 eBay API 是否会接受。
我也尝试过使用 xmltodict,但我没有成功,这让我觉得 eBay API 不会接受这种订购格式字典也可以。
我使用 ElementTree 将 XML 转换为树的首要问题(尚未尝试过,但这将是我的下一步)或 BeautifulSoup 然后尝试再转换回来只是看起来效率很低
感谢任何帮助或建议!谢谢!
如果我没理解错的话,你有一个项目 ID 列表,例如:
item_ids = [254140401476,111140406666] #etc.
并且您希望 xml 中的元素 <ItemID>
依次填充每个元素,如果是这样,可以使用 f-strings:
来完成
for id in item_ids:
print(f"""<?xml version="1.0" encoding="utf-8"?><GetItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<Version>1085</Version>
<RequesterCredentials>
<eBayAuthToken>YourTokenhere</eBayAuthToken>
</RequesterCredentials>
<MessageID>XML call: OAuth Token in trading</MessageID>
<DetailLevel>ItemReturnAttributes</DetailLevel>
<ItemID>{id}</ItemID><OutputSelector>Item.PictureDetails.PictureURL</OutputSelector>
<IncludeItemSpecifics>false</IncludeItemSpecifics>
</GetItemRequest>""")
请注意,<ItemID>
元素现在包含变量 <ItemID>{id}</ItemID>
而不是固定的项目 ID。
我目前正在使用 eBay API 和 Python 的请求包。具体来说,我有一个从 eBay 的 Finding API 中获得的 ItemID 列表(大约 10,000 个左右),现在我想将这些 ID 与 TradingAPI 一起使用来获取项目图像。 例如,这将是我的请求的主体。
xml = """<?xml version="1.0" encoding="utf-8"?><GetItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<Version>1085</Version>
<RequesterCredentials>
<eBayAuthToken>YourTokenhere</eBayAuthToken>
</RequesterCredentials>
<MessageID>XML call: OAuth Token in trading</MessageID>
<DetailLevel>ItemReturnAttributes</DetailLevel>
<ItemID>254140401476</ItemID><OutputSelector>Item.PictureDetails.PictureURL</OutputSelector>
<IncludeItemSpecifics>false</IncludeItemSpecifics>
</GetItemRequest>"""
所以我的问题是: 在每次 API 调用中更改 ItemID 值的最有效 way/best 做法是什么?
我遇到的一些问题:
我可以使用 BeautifulSoup 轻松更改值,但是 xml 现在是一个 BeautifulSoup 对象。到目前为止,我还没有找到在 BeautifulSoup 中转换回 xml 的方法。我试过使用 encode("utf-8") 但这会将换行符放入 xml。
在Pythonrequests模块文档中说可以直接提交一个dict,这样可以更方便的修改值。但我不确定如何将 XML 转换为字典,例如
<GetItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">
标签。另外我不确定 eBay API 是否会接受。我也尝试过使用 xmltodict,但我没有成功,这让我觉得 eBay API 不会接受这种订购格式字典也可以。
我使用 ElementTree 将 XML 转换为树的首要问题(尚未尝试过,但这将是我的下一步)或 BeautifulSoup 然后尝试再转换回来只是看起来效率很低
感谢任何帮助或建议!谢谢!
如果我没理解错的话,你有一个项目 ID 列表,例如:
item_ids = [254140401476,111140406666] #etc.
并且您希望 xml 中的元素 <ItemID>
依次填充每个元素,如果是这样,可以使用 f-strings:
for id in item_ids:
print(f"""<?xml version="1.0" encoding="utf-8"?><GetItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">
<Version>1085</Version>
<RequesterCredentials>
<eBayAuthToken>YourTokenhere</eBayAuthToken>
</RequesterCredentials>
<MessageID>XML call: OAuth Token in trading</MessageID>
<DetailLevel>ItemReturnAttributes</DetailLevel>
<ItemID>{id}</ItemID><OutputSelector>Item.PictureDetails.PictureURL</OutputSelector>
<IncludeItemSpecifics>false</IncludeItemSpecifics>
</GetItemRequest>""")
请注意,<ItemID>
元素现在包含变量 <ItemID>{id}</ItemID>
而不是固定的项目 ID。