如何为连续的webAPI调用更改一个XML标签的内容?

时间:2019-07-15 21:53:08

标签: python xml asp.net-web-api beautifulsoup ebay-api

我目前正在使用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值的最有效方法/最佳做法是什么?

我遇到的一些问题:

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

  2. 在Python请求模块文档中,他们说您可以直接提交dict,这将使值的更改更容易。但是我不确定如何将XML转换为dict,例如 <GetItemRequest xmlns="urn:ebay:apis:eBLBaseComponents">标签。另外,我不确定eBay API是否会接受。

  3. 我也尝试使用xmltodict,但是我没有成功,这使我认为eBay API也将不接受这种格式的有序字典。

  4. 使用ElementTree(尚未尝试过此操作,但这是我的下一步)或BeautifulSoup然后再尝试转换回XML到树的总体问题是,这似乎效率很低。 / p>

我感谢您的任何帮助或建议!谢谢!

1 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,那么您会看到一个商品ID列表,例如:

item_ids = [254140401476,111140406666] #etc.

,并且您希望依次使用每个元素依次填充xml中的元素<ItemID>,这可以通过f字符串完成:

 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。