使用pylast和last.fm检索场地信息

时间:2013-11-04 22:00:18

标签: python last.fm

我一直在使用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获取位置数据?

2 个答案:

答案 0 :(得分:1)

这似乎是pylast中的限制。如果您查看the sourcepylast始终假定它只能存储任何子对象的ID,然后使用getInfo服务调用检索其余信息。所以,当你致电event.get_venue()时,就是这样......

但在这种情况下,它不起作用。从API文档中可以看出,没有venue.getInfo。因此,pylast代码中的此评论:

# TODO: waiting for a venue.getInfo web service to use.

因此,您需要做以下三件事之一:

  • Bug last.fm添加此缺失方法。
  • 基本上重写所有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'