2016-01-30 5 views
1

Comment puis-je obtenir le nom de la chanson à partir du flux de radio Internet?Python 3 obtenir le nom de la chanson du flux de radio Internet

Python: Get name of shoutcast/internet radio station from url J'ai regardé ici, mais il n'y a que le nom de la station de radio. Mais comment obtenir le nom de la chanson en cours de lecture? Voici le lien de flux d'où je veux obtenir le nom de la chanson. http://pool.cdn.lagardere.cz/fm-evropa2-128

Comment dois-je faire? Pouvez-vous m'aider s'il vous plaît?

+1

Vous ne voyez pas? http://anton.logvinenko.name/en/blog/how-to-get-title-from-audio-stream-with-python.html –

+0

related: [Développement du client pour le serveur icecast] (http: // stackoverflow.com/q/6061057/4279) – jfs

Répondre

2

Pour obtenir le titre du flux, vous devez demander des métadonnées. Voir shoutcast/icecast protocol description:

#!/usr/bin/env python 
from __future__ import print_function 
import re 
import struct 
import sys 
try: 
    import urllib2 
except ImportError: # Python 3 
    import urllib.request as urllib2 

url = 'http://pool.cdn.lagardere.cz/fm-evropa2-128' # radio stream 
encoding = 'latin1' # default: iso-8859-1 for mp3 and utf-8 for ogg streams 
request = urllib2.Request(url, headers={'Icy-MetaData': 1}) # request metadata 
response = urllib2.urlopen(request) 
print(response.headers, file=sys.stderr) 
metaint = int(response.headers['icy-metaint']) 
for _ in range(10): # # title may be empty initially, try several times 
    response.read(metaint) # skip to metadata 
    metadata_length = struct.unpack('B', response.read(1))[0] * 16 # length byte 
    metadata = response.read(metadata_length).rstrip(b'\0') 
    print(metadata, file=sys.stderr) 
    # extract title from the metadata 
    m = re.search(br"StreamTitle='([^']*)';", metadata) 
    if m: 
     title = m.group(1) 
     if title: 
      break 
else: 
    sys.exit('no title found') 
print(title.decode(encoding, errors='replace')) 

Le titre de flux est vide dans ce cas.

+0

Merci beaucoup très bien !!! –