0

API 呼び出しから「タイトル」の値を返すように既存のコードを変更しようとしています。それが可能かどうか疑問に思っていましたか?

API URL の例: 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を使用して「タイトル」値を取得する方法はありますか?

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 に答える