首页 > Web开发 > 详细

<raspberry pi > 用树莓派来听落网电台

时间:2014-04-14 12:11:05      阅读:616      评论:0      收藏:0      [点我收藏+]

       树莓派放在抽屉里吃灰有半年多了,去年玩了1个月后就没怎么开整了,上个月没工作,刚好有点闲暇,就把树莓派翻出来折腾,刚好碰到落网改版了,想起以前在树莓派论坛看到有网友拿树莓派来听豆瓣电台,代码那时我都下过,而且用树莓派试过,我喜欢上落网听歌,于是就想写一个 类似的python脚本....

首先 发现落网改版后 那些 mp3的信息就存在试听的html页面上的一个叫volPlaylist的js对象,比以前去相应的xml里找简单多了。
bubuko.com,布布扣

正则拿到这个 json就可以播放了,不过这里没有mp3文件的播放时长,刚开始的时候不能自动播放下一曲,后来google了 一下 发现

mp3文件大小 码率  时长有对应的关系:  【码率(kbps)=【文件大小】(字节)X8/【时间】(秒)/1000    

无法获得码率但发现落网的mp3 都是 128kbps 根据header里得到的Content-Length 获得mp3大小  于是就可以获得 mp3的时长了。。。

首先是 安装 mpg123 

apt-get  install mpg123

下面是相应的python 代码  部分代码来自    在Pi上听豆瓣电台之Python(有更新)

bubuko.com,布布扣
#!/usr/bin/python
# coding: utf-8
# Filename: luoFm.py

import httplib
import json
import re
import sys
import subprocess
import urllib2
import time
from select import select

reload(sys)
sys.setdefaultencoding(utf-8)


class LuoFM_CLI:
    def __init__(self, channel):
        self.user = None
        self.username = ‘‘
        self.ch = channel
        self.kbps = 128

    def get_songlist(self):
        httpConnection = httplib.HTTPConnection(www.luoo.net)
        httpConnection.request(GET, /music/ + self.ch)
        luoHtml = httpConnection.getresponse().read()
        playPattern = "volPlaylist\s*=\s*(\[\s*\{[\s\S]+?\}\s*\]);"
        playUrl = re.compile(playPattern).findall(luoHtml)
        self.songlist = json.loads(playUrl[0])

    def control(self, r):
        rlist, _, _ = select([sys.stdin], [], [], 1)
        if rlist:
            s = sys.stdin.readline()
            if s[0] == n:
                return next
            elif s[0] == p:
                return prev

    def start(self):
        self.get_songlist()
        n = 0
        while n < len(self.songlist):
            r = self.songlist[n]
            song_uri = r[mp3]
            self.playmode = True
            request = urllib2.Request(song_uri)
            response = urllib2.urlopen(request)
            headers = response.info()
            #获取播放时长,这里选用128kbps 的码率 时长 = mp3的大小(kb) * 8 / 128
            durations = int(headers[Content-Length]) * 8 / 1000 / self.kbps
            starttime = time.time()
            print(u正在播放:  + r[title] + u     歌手:  + r[artist])
            self.player = subprocess.Popen([mpg123, -v, song_uri], shell=False, universal_newlines=True, stdin=None,
                                           stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
            while self.playmode:
                c = self.control(r)
                endtime = time.time()
                usetime = endtime - starttime - durations
                if c == next or usetime > 4:
                    self.player.kill()
                    n = n + 1
                    break
                elif c == prev:
                    self.player.kill()
                    n = n - 1
                    break

        self.start


c = raw_input(请输入您想听的专辑数字:)
luoFm = LuoFM_CLI(c)
use_info = u‘‘‘
    下一曲输入n
    上一曲输入p
‘‘‘
print(use_info)
while 1:
    luoFm.start()
bubuko.com,布布扣

执行$python luoFm.py

界面 专辑号要手动输入  

bubuko.com,布布扣

 

 

参考文章  

在Pi上听豆瓣电台之Python(有更新)

比特率

 

<raspberry pi > 用树莓派来听落网电台,布布扣,bubuko.com

<raspberry pi > 用树莓派来听落网电台

原文:http://www.cnblogs.com/keygle/p/3662440.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!