Python 3 从互联网广播流中获取歌曲名称

Posted

技术标签:

【中文标题】Python 3 从互联网广播流中获取歌曲名称【英文标题】:Python 3 get song name from internet radio stream 【发布时间】:2016-05-08 05:40:26 【问题描述】:

如何从网络电台流中获取歌曲名称?

Python: Get name of shoutcast/internet radio station from url我看了这里,但只有广播电台的名称。但是如何获得播放歌曲的名称?这是我想从中获取歌曲名称的流链接。 http://pool.cdn.lagardere.cz/fm-evropa2-128

我该怎么做?你能帮帮我吗?

【问题讨论】:

你看到了吗? anton.logvinenko.name/en/blog/… 相关:Developing the client for the icecast server 【参考方案1】:

要获取流标题,您需要请求元数据。见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'))

在这种情况下,流标题为空。

【讨论】:

开箱即用。希望我能给超过+1!

以上是关于Python 3 从互联网广播流中获取歌曲名称的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Windowsphone 的广播电台频道获取元数据?

从在线广播/电视获取当前歌曲信息

如何在 Python 3.5.3 上播放来自互联网广播的流式音频

通过 Python 从 iTunes 前 100 名中获取歌曲名称和艺术家

Python 检查互联网广播流是不是可用/直播的方法

在android中获取互联网广播应用程序的电台播放列表