用樹莓派來聽落網電台


       樹莓派放在抽屜里吃灰有半年多了,去年玩了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 = "volPlaylist\s*=\s*(\[\s*\{[\s\S]+?\}\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(有更新)

比特率


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM