Escuchar la radio online

supertorpe
#1 por supertorpe el 29/10/2012
Relacionado con este post, quería comentar que estoy comenzando a escuchar la radio online con Radio Tray. Antes (en Windows) utilizaba Screamer Radio que tiene una base de datos de radios mucho mayor.
Afortunadamente, ambas bases de datos son simples ficheros XML, así que migrarla debería consistir simplemente en escribir una hoja XSL.
Me bajé el Screamer, le extraje el fichero presets.xml que contiene la lista de emisoras clasificadas y la comparé con el bookmarks.xml de Radio Tray. Finalmente escribí la hoja XSL (ver adjunto) para transformar el presets.xml en un fichero con la misma estructura que el bookmarks.xml:

Alguien escribió:
xsltproc screamer2radiotray.xsl presets.xml > bookmarks.xml


El problema es que debe haber algún problema de encoding en algunas entradas, ya que el Radio Tray peta cuando intento arrancarlo con el bookmarks.xml generado a partir del presets.xml. Le hice una limpieza, dejando un subconjunto reducido de las entradas y conseguí que arrancara y reconociera correctamente las emisoras.
Otro problema que encontré es que la base de datos del Screamer está un tanto desactualizada y muchas URLs ya no funcionan. Las URLs que comienzan por "http://" podría chequearlas automáticamente con wget, pero las que comienzan por "mms://" u otras, no sabría cómo chequearlas automáticamente.

Entonces tengo tres cuestiones:

- ¿hay alguna herramienta para comprobar URLs de streaming de audio?
- ¿algún voluntario para testear el bookmarks.xml generado y localizar las entradas conflictivas que hacen petar al Radio Tray?
- ¿conocéis alguna otra base de datos de emisoras online?
Archivos adjuntos ( para descargar)
screamer2radiotray.xsl
Subir
Pablo_F
#2 por Pablo_F el 29/10/2012
Hola Supertorpe,


Alguien escribió:
- ¿algún voluntario para testear el bookmarks.xml generado y localizar las entradas conflictivas que hacen petar al Radio Tray?


(de las otras dos cuestiones, ni idea. Yo me he conformado con la que viene en radio tray y alguna otra que he conseguido. Si quieres echarle un vistazo está en http://ubuntuone.com/06D3mw6LlCS9Fb2dq34haQ )

He instalado el Screamer Radio y he seguido instrucciones. Me llama la atención que el bookmarks.xml resultante tiene sólo dos líneas, la cabecera con la versión xml y el encoding y la segunda con todo lo demás, que resulta en una línea con 476675 columnas. Ni siquiera lo he podido abrir con gedit. Pero sí con vim. Entre otras cosas, los acentos no salen bien.

Después he cambiado el encoding en tu script a UTF-8 (como también está el presets.xml). Así, al menos gedit lo ha podido abrir, pero todavía está el problema de la línea única (en realidad, no sé si es problema pero no me suena bien).

Con mi versión ( UTF-8 ) al intentar abrir radiotray me dice:

Alguien escribió:
Loading configuration...
/home/pablo/.local/share/radiotray/bookmarks.xml
/home/pablo/.local/share/radiotray/config.xml
PLS playlist decoder
M3U playlist decoder
ASX-familiy playlist decoder
XSPF playlist decoder
ASF playlist decoder
RAM playlist decoder
Using url timeout = 100
Traceback (most recent call last):
File "/usr/bin/radiotray", line 15, in <module>
radiotray.main(sys.argv[1:])
File "/usr/lib/pymodules/python2.7/radiotray/radiotray.py", line 33, in main
RadioTray()
File "/usr/lib/pymodules/python2.7/radiotray/RadioTray.py", line 61, in __init__
self.systray = SysTray(self.mediator, self.provider, self.log)
File "/usr/lib/pymodules/python2.7/radiotray/SysTray.py", line 83, in __init__
self.update_radios()
File "/usr/lib/pymodules/python2.7/radiotray/SysTray.py", line 230, in update_radios
self.provider.walk_bookmarks(self.group_callback, self.bookmark_callback, self.radioMenu)
File "/usr/lib/pymodules/python2.7/radiotray/XmlDataProvider.py", line 291, in walk_bookmarks
self.walk_bookmarks(group_func, bookmark_func, new_user_data, group + "/group[@name='"+ child_name +"']")
File "/usr/lib/pymodules/python2.7/radiotray/XmlDataProvider.py", line 291, in walk_bookmarks
self.walk_bookmarks(group_func, bookmark_func, new_user_data, group + "/group[@name='"+ child_name +"']")
File "/usr/lib/pymodules/python2.7/radiotray/XmlDataProvider.py", line 291, in walk_bookmarks
self.walk_bookmarks(group_func, bookmark_func, new_user_data, group + "/group[@name='"+ child_name +"']")
File "/usr/lib/pymodules/python2.7/radiotray/XmlDataProvider.py", line 284, in walk_bookmarks
children = self.root.xpath("/bookmarks" + group + "/group | " + "/bookmarks" + group + "/bookmark")
File "lxml.etree.pyx", line 1459, in lxml.etree._Element.xpath (src/lxml/lxml.etree.c:40530)
File "xpath.pxi", line 324, in lxml.etree.XPathElementEvaluator.__call__ (src/lxml/lxml.etree.c:113864)
File "xpath.pxi", line 242, in lxml.etree._XPathEvaluatorBase._handle_result (src/lxml/lxml.etree.c:113063)
File "xpath.pxi", line 227, in lxml.etree._XPathEvaluatorBase._raise_eval_error (src/lxml/lxml.etree.c:112894)
lxml.etree.XPathEvalError: Invalid predicate


Saludos, Pablo
Subir
supertorpe
#3 por supertorpe el 29/10/2012
Hola, gracias por contestar.
Al ser un documento XML, se parsea basándose en los tags que contiene: los saltos de línea y blancos entre los tags no deberían afectar. No obstante he formateado el bookmarks.xml para que sea humanamente legible (bookmarks.xml.gz).
El error es el mismo que me da a mi. Cuando sólo dejo el grupo "By Country" sí que lo carga bien (bookmarks.xml.ok.gz), así que tengo una firme sospecha de que algún tag en los otros grupos contiene algo extraño.
Archivos adjuntos ( para descargar)
bookmarks.xml.gz
bookmarks.xml.ok.gz
Subir
vagar
#4 por vagar el 31/10/2012
supertorpe escribió:

- ¿hay alguna herramienta para comprobar URLs de streaming de audio?


Puedes mirar vlc o mplayer, tienen un montón de opciones de línea de comandos que a lo mejor puedes usar. También si sólo quieres verificar respuesta igual te vale un port scanner como nmap o incluso telnet, aquí tienes los puertos:

http://en.wikipedia.org/wiki/Microsoft_Media_Server
Subir
supertorpe
#5 por supertorpe el 31/10/2012
#4 Gracias. Les echaré un vistazo. A ver si consigo confeccionar una lista de emisoras limpia de polvo y paja.
Subir
vagar
#6 por vagar el 31/10/2012
Añadí la línea

Alguien escribió:
print group


a la función que peta y así salió el culpable:

Alguien escribió:
/group[@name='root']/group[@name='By Genre']/group[@name='50's, 60's, 70's and 80's']


No sé si será por esas comillas simples o que python tiene un criterio musical muy estricto, a lo mejor cuando llegue a Reggaeton te formatea el disco duro.
Subir
supertorpe
#7 por supertorpe el 31/10/2012
#6 ¡Muy bien! :platano: es el ' el que lo hace petar. He eliminado todas las ocurrencias del documento y ya lo carga bien.

El próximo paso es validar las emisoras :teclear:
Subir
vagar
#8 por vagar el 31/10/2012
Confirmado, eran las comillas simples. Yo creo que el problema es más de radiotray que de la lista de presets, basta con poner comillas dobles en la expresión de XPath:

Alguien escribió:

--- XmlDataProvider.py.orig 2012-10-31 10:17:24.000000000 +0100
+++ XmlDataProvider.py 2012-10-31 10:17:53.000000000 +0100
@@ -295,7 +295,7 @@

if child.tag == 'group':
new_user_data = group_func(child_name, user_data)
- self.walk_bookmarks(group_func, bookmark_func, new_user_data, group + "/group[@name='"+ child_name +"']")
+ self.walk_bookmarks(group_func, bookmark_func, new_user_data, group + "/group[@name=\""+ child_name +"\"]")
else:
bookmark_func(child_name, user_data)
Subir
vagar
#9 por vagar el 31/10/2012
#8

Aunque repasando la documentación de XPath, las comillas dobles tampoco son una solución a prueba de bomba. Por lo que he rebuscado por ahí parece que radiotray tendría que usar la función 'concat()' de XPath para componer la expresión.
Subir
supertorpe
#10 por supertorpe el 31/10/2012
¡Ah, pillín! iba a notificar el bug en el issue tracker de RadioTray y veo que te me has adelantado por un minuto :D
Subir
vagar
#11 por vagar el 31/10/2012
Pues sí, ya que estaba, son cinco minutos...

Igual lo que puedes hacer es añadir tu xsl como adjunto, a lo mejor lo puede usar el desarrollador para importar los presets de Screamer automáticamente.
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo