<raspberry pi > 用树莓派来听落网电台
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了<raspberry pi > 用树莓派来听落网电台,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2497字,纯文字阅读大概需要4分钟。
内容图文
树莓派放在抽屉里吃灰有半年多了,去年玩了1个月后就没怎么开整了,上个月没工作,刚好有点闲暇,就把树莓派翻出来折腾,刚好碰到落网改版了,想起以前在树莓派论坛看到有网友拿树莓派来听豆瓣电台,代码那时我都下过,而且用树莓派试过,我喜欢上落网听歌,于是就想写一个 类似的python脚本....
首先 发现落网改版后 那些
mp3的信息就存在试听的html页面上的一个叫volPlaylist的js对象,比以前去相应的xml里找简单多了。
正则拿到这个 json就可以播放了,不过这里没有mp3文件的播放时长,刚开始的时候不能自动播放下一曲,后来google了 一下 发现
mp3文件大小 码率 时长有对应的关系: 【码率】(kbps)=【文件大小】(字节)X8/【时间】(秒)/1000
无法获得码率但发现落网的mp3 都是 128kbps 根据header里得到的Content-Length 获得mp3大小 于是就可以获得 mp3的时长了。。。
首先是 安装 mpg123
apt-get install mpg123
下面是相应的python 代码 部分代码来自 在Pi上听豆瓣电台之Python(有更新)
# !/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 breakelif 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()
执行$python luoFm.py
界面 专辑号要手动输入
参考文章
用树莓派来听落网电台,布布扣,bubuko.com' ref='nofollow'>
用树莓派来听落网电台' ref='nofollow'>
原文:http://www.cnblogs.com/keygle/p/3662440.html
内容总结
以上是互联网集市为您收集整理的<raspberry pi > 用树莓派来听落网电台全部内容,希望文章能够帮你解决<raspberry pi > 用树莓派来听落网电台所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。