如何使用 python xml.etree.ElementTree 解析 eBay API 响应?

发布于 2024-09-30 12:40:58 字数 1606 浏览 4 评论 0原文

我正在尝试使用 xml.etree.ElementTree 解析来自 eBay 查找 API findItemsByProduct 的响应。经过长时间的试验和错误,我想出了这段打印一些数据的代码:

import urllib
from xml.etree import ElementTree as ET

appID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
isbn = '3868731342'

namespace = '{http://www.ebay.com/marketplace/search/v1/services}'

url = 'http://svcs.ebay.com/services/search/FindingService/v1?' \
    + 'OPERATION-NAME=findItemsByProduct' \
    + '&SERVICE-VERSION=1.0.0' \
    + '&GLOBAL-ID=EBAY-DE' \
    + '&SECURITY-APPNAME=' + appID \
    + '&RESPONSE-DATA-FORMAT=XML' \
    + '&REST-PAYLOAD' \
    + '&productId.@type=ISBN&productId=' + isbn

root = ET.parse(urllib.urlopen(url)).getroot()

for parts in root:
    if parts.tag == (namespace + 'searchResult'):
        for item in list(parts):
            for a in list(item):
                if a.tag == (namespace + 'itemId'):
                    print 'itemId: ' + a.text
                if a.tag == (namespace + 'title'):
                    print 'title: ' + a.text

但这看起来不太优雅,如何在不循环所有属性并检查它是否是我想要的属性的情况下获取“itemId”和“title” ?我尝试使用 .get(namespace + 'itemId').find(namespace + 'itemId').attrib.get(namespace + ' itemId') 但没有真正起作用。

有人可以告诉我如何使用这个 API 的 python 包装器来做到这一点吗? 我看到了 easyBayebay-sdk-pythonpyeBay< /a> 但我没能让他们做我想做的事。有没有值得使用的 eBay python API?

I am trying to use xml.etree.ElementTree to parse responses from eBay finding API, findItemsByProduct. After lengthy trial and error, I came up with this code which prints some data:

import urllib
from xml.etree import ElementTree as ET

appID = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
isbn = '3868731342'

namespace = '{http://www.ebay.com/marketplace/search/v1/services}'

url = 'http://svcs.ebay.com/services/search/FindingService/v1?' \
    + 'OPERATION-NAME=findItemsByProduct' \
    + '&SERVICE-VERSION=1.0.0' \
    + '&GLOBAL-ID=EBAY-DE' \
    + '&SECURITY-APPNAME=' + appID \
    + '&RESPONSE-DATA-FORMAT=XML' \
    + '&REST-PAYLOAD' \
    + '&productId.@type=ISBN&productId=' + isbn

root = ET.parse(urllib.urlopen(url)).getroot()

for parts in root:
    if parts.tag == (namespace + 'searchResult'):
        for item in list(parts):
            for a in list(item):
                if a.tag == (namespace + 'itemId'):
                    print 'itemId: ' + a.text
                if a.tag == (namespace + 'title'):
                    print 'title: ' + a.text

But that seems not very elegant, how can I get the 'itemId' and 'title' without looping over all attributes and checking if it is the one I want? I tried using things like .get(namespace + 'itemId') and .find(namespace + 'itemId') and .attrib.get(namespace + 'itemId') but nothing really worked.

Can someone maybe show me how to do this using some python wrapper for this API?
I saw easyBay, ebay-sdk-python and pyeBay but I didn't manage to get any of them to do what I want. Is there any eBay python API which is worthwhile to use for this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雪花飘飘的天空 2024-10-07 12:40:58

您可以使用ElementTree。如果您想获取项目,可以使用 findall 和项​​目的路径,然后迭代项目列表:

items = root.findall(namespace+'searchResult/'+namespace+'item')
for item in items: 
     item.find(namespace+'itemId').text
     item.find(namespace+'title').text

直接从根获取第一个 itemId:

root.find(namespace+'searchResult/'+namespace+'item/'+namespace+'itemId')

基本上,find 方法使用 XPath 检索多个元素级别低于子元素。另请参阅 Effbot 对 ElementTree 中 XPath 支持的说明

You can use ElementTree. If you want to get the items you can use findall and the path to the items, then iterate over the list of items:

items = root.findall(namespace+'searchResult/'+namespace+'item')
for item in items: 
     item.find(namespace+'itemId').text
     item.find(namespace+'title').text

To get directly to the first itemId from the root:

root.find(namespace+'searchResult/'+namespace+'item/'+namespace+'itemId')

Basically, the find method uses XPath to retrieve elements more than one level below the subelements. See also Effbot's explanation of XPath support in ElementTree

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文