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


           树莓派放在抽屉里吃灰有半年多了,去年玩了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(有更新)

     1 #!/usr/bin/python
     2 # coding: utf-8
     3 # Filename: luoFm.py
     4 
     5 import httplib
     6 import json
     7 import re
     8 import sys
     9 import subprocess
    10 import urllib2
    11 import time
    12 from select import select
    13 
    14 reload(sys)
    15 sys.setdefaultencoding('utf-8')
    16 
    17 
    18 class LuoFM_CLI:
    19     def __init__(self, channel):
    20         self.user = None
    21         self.username = ''
    22         self.ch = channel
    23         self.kbps = 128
    24 
    25     def get_songlist(self):
    26         httpConnection = httplib.HTTPConnection('www.luoo.net')
    27         httpConnection.request('GET', '/music/' + self.ch)
    28         luoHtml = httpConnection.getresponse().read()
    29         playPattern = "volPlaylists*=s*([s*{[sS]+?}s*]);"
    30         playUrl = re.compile(playPattern).findall(luoHtml)
    31         self.songlist = json.loads(playUrl[0])
    32 
    33     def control(self, r):
    34         rlist, _, _ = select([sys.stdin], [], [], 1)
    35         if rlist:
    36             s = sys.stdin.readline()
    37             if s[0] == 'n':
    38                 return 'next'
    39             elif s[0] == 'p':
    40                 return 'prev'
    41 
    42     def start(self):
    43         self.get_songlist()
    44         n = 0
    45         while n < len(self.songlist):
    46             r = self.songlist[n]
    47             song_uri = r['mp3']
    48             self.playmode = True
    49             request = urllib2.Request(song_uri)
    50             response = urllib2.urlopen(request)
    51             headers = response.info()
    52             #获取播放时长,这里选用128kbps 的码率 时长 = mp3的大小(kb) * 8 / 128
    53             durations = int(headers['Content-Length']) * 8 / 1000 / self.kbps
    54             starttime = time.time()
    55             print(u'正在播放: ' + r['title'] + u'     歌手: ' + r['artist'])
    56             self.player = subprocess.Popen(['mpg123', '-v', song_uri], shell=False, universal_newlines=True, stdin=None,
    57                                            stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    58             while self.playmode:
    59                 c = self.control(r)
    60                 endtime = time.time()
    61                 usetime = endtime - starttime - durations
    62                 if c == 'next' or usetime > 2:
    63                     self.player.kill()
    64                     n = n + 1
    65                     break
    66                 elif c == 'prev':
    67                     self.player.kill()
    68                     n = n - 1
    69                     break
    70 
    71         self.start
    72 
    73 
    74 c = raw_input('请输入您想听的专辑数字:')
    75 luoFm = LuoFM_CLI(c)
    76 use_info = u'''
    77     下一曲输入n
    78     上一曲输入p
    79 '''
    80 print(use_info)
    81 while 1:
    82     luoFm.start()

    界面 专辑号要手动输入  

    参考文章  

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

    比特率

  • 相关阅读:
    剑指offer 51.构建乘积数组
    剑指offer 50.数组中重复的数字
    股票价格涨跌预测—基于KNN分类器
    R语言-神经网络包RSNNS
    基于客户保持率的人口特性分析
    车辆碰撞位置间的关联性分析
    统计学的七大支柱[转载@谢益辉]
    AutoDesK演示项目部署
    自定义数字键盘组件化方案
    2020年大前端发展趋势
  • 原文地址:https://www.cnblogs.com/keygle/p/3662440.html
Copyright © 2020-2023  润新知