python - example - ElementTree findall() devolviendo la lista vacía
xml python 3 (1)
El problema es que findall
solo busca los descendientes inmediatos de un elemento si se le asigna un nombre de etiqueta . Debes asignarle una expresión XPath que encuentre la track
en cualquier parte del árbol debajo de él. Así que lo siguiente debería funcionar, por ejemplo:
api_results = ElementTree.parse(response).findall(''.//track'')
Estoy tratando de escribir un pequeño script para interactuar con la API de last.fm.
Tengo un poco de experiencia trabajando con ElementTree
, pero la forma en que lo usé anteriormente no parece funcionar, en cambio, devuelve una lista vacía.
Eliminé la clave de la API porque no sé exactamente qué tan privada debe ser, y di un ejemplo del XML que recibo en su lugar.
Clase para interactuar con la API:
from xml.etree import ElementTree
import urllib
import urllib2
class Last_fmWrapper(object):
def __init__(self):
self.last_fm_api_key = ''*****************************''
self.api_url = ''http://ws.audioscrobbler.com/2.0/''
def get_now_playing(self, last_fm_user, method):
self.last_fm_user = last_fm_user
self.method = method
parameters = {''user'':self.last_fm_user, ''api_key'':self.last_fm_api_key, ''method'':self.method}
encoded_parameters = urllib.urlencode(parameters)
request = urllib2.Request(self.api_url, encoded_parameters)
response = urllib2.urlopen(request)
api_results = ElementTree.parse(response).findall(''track'')
# why does api_results == []?
def compare_tasteometer(self):
pass
def register_user(self):
pass
Llame al método get_now_playing de Last_fmWrapper()
:
from last_fm_wrapper import Last_fmWrapper
last_fm = Last_fmWrapper()
now_playing = last_fm.get_now_playing(''BiriBiriRG'', ''user.getRecentTracks'')
if now_playing == None:
print ''You not currently playing anything.''
else:
print ''You are now playing {}''.format(now_playing)
Muestra de xml que recibo:
<?xml version="1.0" encoding="utf-8"?>
<lfm status="ok">
<recenttracks user="BiriBiriRG" page="1" perPage="10" totalPages="18406" total="184058" >
<track>
<artist mbid="01809552-4f87-45b0-afff-2c6f0730a3be">Elvis Presley</artist>
<name>Thrill Of Your Love</name>
<streamable>1</streamable>
<mbid></mbid>
<album mbid="c445fa3a-3b24-41d4-b955-b6ca560c6f7a">Love Songs</album>
<url>http://www.last.fm/music/Elvis+Presley/_/Thrill+Of+Your+Love</url>
<image size="small">http://userserve-ak.last.fm/serve/34s/69037914.png</image>
<image size="medium">http://userserve-ak.last.fm/serve/64s/69037914.png</image>
<image size="large">http://userserve-ak.last.fm/serve/126/69037914.png</image>
<image size="extralarge">http://userserve-ak.last.fm/serve/300x300/69037914.png</image>
<date uts="1328153196">2 Feb 2012, 03:26</date>
</track>
<track>
<artist mbid="efc8a006-d0c6-4a9b-8cb1-91ca770fa2b9">Colbie Caillat</artist>
<name>Oxygen</name>
<streamable>1</streamable>
<mbid></mbid>
<album mbid="2d297b29-a215-42fe-8a8c-dc8b502903b1">Coco</album>
<url>http://www.last.fm/music/Colbie+Caillat/_/Oxygen</url>
<image size="small">http://userserve-ak.last.fm/serve/34s/69229764.png</image>
<image size="medium">http://userserve-ak.last.fm/serve/64s/69229764.png</image>
<image size="large">http://userserve-ak.last.fm/serve/126/69229764.png</image>
<image size="extralarge">http://userserve-ak.last.fm/serve/300x300/69229764.png</image>
<date uts="1328152962">2 Feb 2012, 03:22</date>
</track>
<track>