豆瓣电台,支持私人兆赫,豆瓣电台私人,#!/usr/bin/e


#!/usr/bin/env python# -*- coding: utf-8 -*-import json, requests, os.path, subprocessclass DoubanFM():    def __init__(self):        self.logined = False        self.history = []        self.song_list = []        self.channel = 1        self.cur_song = {'sid':''}#        self.proxy = {'http':'http://127.0.0.1:9341'}        self.proxy = None    def login(self,email,passwd):        payload={'email':email,'password':passwd,'app_name':'radio_desktop_win','version':100}        url = 'http://www.douban.com/j/app/login'        r = requests.post(url, data=payload,proxies=self.proxy)        data = r.json()        if data['err']!='ok':            print('login failed')            return False        self.user_id = data['user_id']        self.expire = data['expire']        self.token = data['token']        self.logined = True        return True    def changeChannel(self,channel):        self.channel = channel    def playSong(self):        if len(self.song_list) < 2:            self.song_list.extend(self.getSongList(self.channel))        song = self.song_list.pop(0)        self.history.append(song)        if len(self.history) > 15:            self.history.pop(0)        self.cur_song = song        print('%s %s'%(song['artist'],song['title']))        return song    def getParams(self,channel):        type = 'n'        h = ''        if len(self.history)>0:            type = 'p'            h = '|'+':p|'.join([x['sid'] for x in self.history])+':p'            self.history = []        if self.logined:            params = {'app_name':'radio_desktop_win','version':100,'user_id':self.user_id,                'expire':self.expire,'token':self.token,'type':type,'sid':self.cur_song['sid'],'h':h,'channel':channel}        else:            params = {'app_name':'radio_desktop_win','version':100,'type':type,'sid':self.cur_song['sid'],'h':h,'channel':channel}        return params    def getSongList(self,channel):        url = 'http://www.douban.com/j/app/radio/people'        payload = self.getParams(channel)        r = requests.get(url,params=payload,proxies=self.proxy)        return r.json()['song']    def getChannels(self):        url = 'http://www.douban.com/j/app/radio/channels'        r = requests.get(url,proxies=self.proxy)        return r.json()['channels']    def printChannels(self):        self.channels = ''        if not self.channels:            self.channels = self.getChannels()        for channel in self.channels:            print('%d\\t%s\\t%s'%(channel['channel_id'],channel['name'],channel['name_en']))class MusicPlayer():    def running(self):        doubanFM = DoubanFM()        channels = doubanFM.printChannels()        c = raw_input('channel:')        doubanFM.changeChannel(int(c))        if c=='0':            email = raw_input("email:")             import getpass            password = getpass.getpass("password:")             if not doubanFM.login(email,password):                doubanFM.changeChannel(1)        while True:            song = doubanFM.playSong()            self.playing(url=song['url'])    def playing(self,url):        cmd = ['ffplay',url,'-nodisp','-autoexit']        pro = subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE)        try:            pro.communicate()        except Exception,e:            pro.terminate()def main():    player = MusicPlayer()    player.running()if __name__=='__main__':    main()#该片段来自于http://byrx.net

评论关闭