taizilongxu / douban.fm

:radio: douban.fm based on Python
MIT License
786 stars 190 forks source link

KeyError: 'song' #77

Closed wgjak47 closed 9 years ago

wgjak47 commented 9 years ago

运行报错,无法播放。但主程序正常。 Exception in thread Thread-1: Traceback (most recent call last): File "/usr/lib/python2.7/threading.py", line 810, in bootstrap_inner self.run() File "/usr/lib/python2.7/threading.py", line 763, in run self.__target(_self.args, *_self.__kwargs) File "/usr/local/lib/python2.7/dist-packages/douban/douban.py", line 251, in play self.playingsong = self.get_song() File "/usr/local/lib/python2.7/dist-packages/douban/douban.py", line 242, in get_song self.get_playlist() File "/usr/local/lib/python2.7/dist-packages/douban/douban.py", line 238, in get_playlist self.playlist = self.douban.get_playlist(self._channel) File "/usr/local/lib/python2.7/dist-packages/douban/douban_token.py", line 276, in get_playlist return eval(s)['song'] KeyError: 'song'

taizilongxu commented 9 years ago

mplayer 是不是没有安装啊

wgjak47 commented 9 years ago

mplayer正常

MPlayer2 2.0-701-gd4c5b7f-2ubuntu2 (C) 2000-2012 MPlayer Team
Usage:   mplayer [options] [url|path/]filename

Basic options: (complete list in the man page)
 -vo <drv>        select video output driver ('-vo help' for a list)
 -ao <drv>        select audio output driver ('-ao help' for a list)
 vcd://<trackno>  play (S)VCD (Super Video CD) track (raw device, no mount)
 dvd://<titleno>  play DVD title from device instead of plain file
 -alang/-slang    select DVD audio/subtitle language (by 2-char country code)
 -ss <position>   seek to given (seconds or hh:mm:ss) position
 -nosound         do not play sound
 -fs              fullscreen playback (or -vm, -zoom, details in the man page)
 -x <x> -y <y>    set display resolution (for use with -vm or -zoom)
 -sub <file>      specify subtitle file to use (also see -subfps, -subdelay)
 -playlist <file> specify playlist file
 -vid x -aid y    select video (x) and audio (y) stream to play
 -fps x -srate y  change video (x fps) and audio (y Hz) rate
 -pp <quality>    enable postprocessing filter (details in the man page)
 -framedrop       enable frame dropping (for slow machines)

Basic keys: (complete list in the man page, also check input.conf)
 <-  or  ->       seek backward/forward 10 seconds
 down or up       seek backward/forward  1 minute
 pgdown or pgup   seek backward/forward 10 minutes
 < or >           step backward/forward in playlist
 p or SPACE       pause movie (press any key to continue)
 q or ESC         stop playing and quit program
 + or -           adjust audio delay by +/- 0.1 second
 o                cycle OSD mode:  none / seekbar / seekbar + timer
 * or /           increase or decrease PCM volume
 x or z           adjust subtitle delay by +/- 0.1 second
 r or t           adjust subtitle position up/down, also see -vf expand
 double click     toggle fullscreen
 right click      pause (press again to continue)

 * * * SEE THE MAN PAGE FOR DETAILS, FURTHER (ADVANCED) OPTIONS AND KEYS * * *
taizilongxu commented 9 years ago

看样子好像是没法获取频道, 豆瓣FM网站能上吗?

wgjak47 commented 9 years ago

豆瓣网页正常。

taizilongxu commented 9 years ago

额, 主程序正常是指的界面正常吗?

wgjak47 commented 9 years ago

对,好像就是那一个线程挂掉了。

taizilongxu commented 9 years ago

你的环境是什么啊 是ubuntu吗, 我找个机器试试

wgjak47 commented 9 years ago

恩,ubuntu linux 14.04

wgjak47 commented 9 years ago

另外如果异常退出,似乎通过subprocess启动相关进程还在后台? 似乎通过pip安装的和git 的master版本不一样? git master:douban_token.py

    def get_playlist(self):
        """获取播放列表,返回一个list"""
        s = self.requests_url('n')
        return json.loads(s, object_hook=_decode_dict)['song']

pip : douban_token.py

    def get_playlist(self, channel):
        '''获取播放列表,返回一个list'''
        if self.default_channel != channel:
            self.set_channel(channel)
        s = self.requests_url('n')
        return eval(s)['song']
taizilongxu commented 9 years ago

恩 对的,异常后后台进程关不掉了

git master 是开发中的版本, 不一样

ieiayaobb commented 9 years ago

同样的问题,是不是pip装的不是最新的?

wgjak47 commented 9 years ago

master的也不能用,放不了几首主界面就跪了。

sallyblockchain commented 9 years ago

同问题

Exception in thread Thread-1: Traceback (most recent call last): File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 810, in bootstrap_inner self.run() File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 763, in run self.__target(_self.args, *_self.__kwargs) File "/Library/Python/2.7/site-packages/douban/douban.py", line 251, in play self.playingsong = self.get_song() File "/Library/Python/2.7/site-packages/douban/douban.py", line 242, in get_song self.get_playlist() File "/Library/Python/2.7/site-packages/douban/douban.py", line 238, in get_playlist self.playlist = self.douban.get_playlist(self._channel) File "/Library/Python/2.7/site-packages/douban/douban_token.py", line 276, in get_playlist return eval(s)['song'] File "", line 1, in NameError: name 'false' is not defined

wgjak47 commented 9 years ago

print eval(s)得到的结果 {'r': 1, 'err': 'expired'}, 是不是豆瓣改API了

voostar commented 9 years ago

同@Xiaodan问题

HogwartsRico commented 9 years ago

我也遇到这样的问题了,树莓派和ubuntu都是,mplayer也更新到最新了,网络良好

HogwartsRico commented 9 years ago

我也遇到这样的问题了,树莓派和ubuntu都是,mplayer也更新到最新了,网络良好

taizilongxu commented 9 years ago

sorry,最近有点忙, 等抽空看一下, 我在archlinux上还是可以运行的

spin6lock commented 9 years ago

豆瓣返回的json,似乎直接eval不行,用json.loads返回一个dict就可以了,但是这样会有编码问题,我试试发个PR修复下

spin6lock commented 9 years ago

@taizilongxu 额,可以贴一下你用的是那个version吗?

taizilongxu commented 9 years ago

@spin6lock https://github.com/taizilongxu/douban.fm/blob/master/douban/douban_token.py#L35-L60 这里写了修复json编码的方法, 最近实在有点忙, 等有空我会修复一下的

spin6lock commented 9 years ago

@taizilongxu 非常感谢!那应该是我用pip装,没有用上master的问题了,可以close这个issue啦23333