我一直在使用pylast.py从Last.fm中检索有关艺术家和事件的各种类型的信息。
然而,pylast没有任何功能来从事件中检索场地信息。特别是,如果你看一下XML for event.getInfo,我想退出场地的位置:
http://www.last.fm/api/show/event.getInfo
<venue>
<id>8783057</id>
<name>Ryman Auditorium</name>
<location>
<city>Nashville</city>
<country>United States</country>
<street>116 Fifth Avenue North</street>
<postalcode>37219</postalcode>
<geo:point>
<geo:lat>36.16148</geo:lat>
<geo:long>-86.777959</geo:long>
</geo:point>
</location>
<url>http://www.last.fm/venue/8783057</url>
</venue>
现在,pylast在事件对象下有一个名为get_venue的方法,但它不会重新显示上面显示的任何位置数据......
有没有办法通过pylast获取位置数据?
答案 0 :(得分:1)
这似乎是pylast
中的限制。如果您查看the source,pylast
始终假定它只能存储任何子对象的ID,然后使用getInfo
服务调用检索其余信息。所以,当你致电event.get_venue()
时,就是这样......
但在这种情况下,它不起作用。从API文档中可以看出,没有venue.getInfo
。因此,pylast
代码中的此评论:
# TODO: waiting for a venue.getInfo web service to use.
因此,您需要做以下三件事之一:
pylast
,以便它存储为对象而不仅仅是ID检索的原始XML,或至少在Venue
的情况下这样做。Event
课程,将location
视为活动的一部分而不是其中的一部分。最后一个似乎是最简单的。但是,您必须决定如何表示某个位置。
这是一个快速而又脏的黑客,它将位置表示为所有非空纯文本节点的字典,而猴子补丁代码将其提取到Event
对象中:
def get_location(self):
"""Returns the location of the venue where the event is held."""
doc = self._request("event.getInfo", True)
loc = doc.getElementsByTagName("location")[0]
return {node.nodeName: child.data
for node in loc.childNodes
for child in node.childNodes
if child.nodeType == child.TEXT_NODE and child.data.strip()}
pylast.Event.get_location = get_location
现在,代码如下:
artist = network.get_artist("Skinny Puppy")
event = artist.get_upcoming_events()[0]
print event.get_location()
...应该打印这样的东西:
{'city': 'Santa Ana, CA', 'postalcode': '92704',
'street': '3503 S. Harbor Blvd.', 'country': 'United States'}
不完全漂亮,但它应该是一个有用的黑客,直到真正的功能存在。
答案 1 :(得分:1)
Pylast未在几年内更新,但现在是possible in my fork:
artist = network.get_artist("Skinny Puppy")
event = artist.get_upcoming_events()[0]
venue = event.get_venue()
print venue.info
打印:
{u'website': u'http://www.clubmayan.com', u'name': u'Mayan Theatre', u'url': u'http://www.last.fm/venue/8901088+Mayan+Theatre', u'image': u'http://userserve-ak.last.fm/serve/500/14221419/Mayan+Theatre+outside.jpg', u'phonenumber': u'213-746-4287', u'location': {u'postalcode': u'CA 90015', u'city': u'Los Angeles', u'geo:point': {u'geo:long': u'-118.259068', u'geo:lat': u'34.040729'}, u'street': u'1038 S. Hill St', u'country': u'United States'}, u'id': u'8901088'}
和
print venue.location
打印:
{u'postalcode': u'CA 90015', u'city': u'Los Angeles', u'geo:point': {u'geo:long': u'-118.259068', u'geo:lat': u'34.040729'}, u'street': u'1038 S. Hill St', u'country': u'United States'}
和
print venue.id, venue.name
打印:
8901088, u'Mayan Theatre'