2010-06-24 30 views
2

J'ai essayé d'obtenir le nom/titre des stations de radio Internet en fonction de l'URL en python, mais sans aucune chance jusqu'à présent. Il semble que les stations de radio Internet utilisent un autre protocole que HTTP, mais corrigez-moi si je me trompe.Python: Obtenir le nom de la station de radio shoutcast/internet depuis l'url

Par exemple: http://89.238.146.142:7030

a le titre: "Ibiza Global Radio"

Comment puis-je conserver ce titre dans une variable? Toute aide sera grandement appréciée :)

Cordialement, Frigg

Répondre

7

D'un peu curl, il semble utiliser le protocole shoutcast, vous êtes à la recherche d'une ligne rapide commençant par icy-name:

$ curl http://89.238.146.142:7030 | head -5 
    % Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
100 13191 0 13191 0  0 16013  0 --:--:-- --:--:-- --:--:-- 28516ICY 200 OK 
icy-notice1:<BR>This stream requires <a href="http://www.winamp.com/">Winamp</a><BR> 
icy-notice2:SHOUTcast Distributed Network Audio Server/Linux v1.9.8<BR> 
icy-name:Ibiza Global Radio 
icy-genre:Electronic 
100 33463 0 33463 0  0 30954  0 --:--:-- 0:00:01 --:--:-- 46579 
curl: (23) Failed writing body 
$ 

Par conséquent:

>>> import urllib2 
>>> f = urllib2.urlopen('http://89.238.146.142:7030') 
>>> for i, line in enumerate(f): 
... if line.startswith('icy-name') or i > 20: break 
... 
>>> if i > 20: print 'failed to find station name' 
... else: print 'station name is', line.replace('icy-name:', '') 
... 
station name is Ibiza Global Radio 

>>> 

Vous voudrez peut-être ajouter par exemple certains appels .lower() parce que je crois que ces noms d'en-tête sont censés être insensible à la casse, mais c'est l'idée générale.

+0

Merci pour une excellente solution et une explication complète! Sauvé ma journée :) – frigg

+0

Ceci est un peu vieux maintenant, mais ce ne sont que des en-têtes http. Vous devriez y accéder en tant qu'en-têtes normaux, et non en raclant le contenu de la réponse. f = urllib2.urlopen (someurl). print f.headers ['nom-de-glace']. –

+0

Après un peu plus de fouilles, il semble que certaines stations cérébrales n'utilisent pas les en-têtes et fourrent tout dans le contenu de la réponse. Malheureusement, c'est probablement la meilleure façon de les gérer. –