library example etree dict create python xml elementtree last.fm

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>