0

我正在尝试修改一些现有代码以从 API 调用的“标题”返回值。想知道它是否可能?

示例 API 网址:http ://domain.com/rest/getSong.view?u=username&p=password&v=1.8.0&id=11452

上面的 URL 返回:

<domain-response xmlns="http://domain.org/restapi" status="ok" version="1.8.0">
<song id="11452" parent="11044" title="The Title" album="The Album"/>
</domain-response>

如果我知道 id,现在有没有办法使用 python 来获取 'title' 值?

在名为 domain.py 的文件中使用 REST API 的当前代码示例

def get_playlist(self, playlist_id):
    Addon.log('get_playlist: ' + playlist_id)
    payload = self.__get_json('getPlaylist.view', {'id': playlist_id})
    if payload:
        songs = self.listify(payload['playlist']['entry'])
        self.display_music_directory(songs)

来自另一个名为 default.py 的文件中的其余引用代码

elif Addon.plugin_queries['mode'] == 'playlist': 
    subsonic.get_playlist(Addon.plugin_queries['playlist_id'])
4

1 回答 1

1

由于您的响应采用 XML 格式,因此是使用 XML 解析器的直观方式。以下是如何使用它lxml来解析您的响应并获取 ID 为 11452 的歌曲的标题:

from lxml import etree

s = """<domain-response xmlns="http://domain.org/restapi" status="ok" version="1.8.0">
<song id="11452" parent="11044" title="The Title" album="The Album"/>
</domain-response>"""

tree = etree.fromstring(s)
song = tree.xpath("//ns:song[@id=\'11452\']",namespaces={'ns':'http://domain.org/restapi'})
print song[0].get('title')

值得一提的是,如果你不关心其余内容,使用正则表达式还有一种肮脏的方式来获取标题:

import re
print re.compile("song id=\"11452\".*?title=\"(.*?)\"").search(s).group(1)
于 2012-11-15T05:57:00.607 回答