如何为连续的 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 做法是什么?

我遇到的一些问题:

  1. 我可以使用 BeautifulSoup 轻松更改值,但是 xml 现在是一个 BeautifulSoup 对象。到目前为止,我还没有找到在 BeautifulSoup 中转换回 xml 的方法。我试过使用 encode("utf-8") 但这会将换行符放入 xml。

  2. 在Pythonrequests模块文档中说可以直接提交一个dict,这样可以更方便的修改值。但我不确定如何将 XML 转换为字典,例如 <GetItemRequest xmlns="urn:ebay:apis:eBLBaseComponents"> 标签。另外我不确定 eBay API 是否会接受。

  3. 我也尝试过使用 xmltodict,但我没有成功,这让我觉得 eBay API 不会接受这种订购格式字典也可以。

  4. 我使用 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。