Giter Club home page Giter Club logo

pyfm's Introduction

豆瓣FM命令行播放器

2015-11-16 更新:豆瓣客户端接口被封锁,本项目处于不可用状态。

可用的类似项目(目前使用网易云音乐): https://github.com/taizilongxu/douban.fm

https://badge.fury.io/py/pyfm.png

使用Python编写的豆瓣FM命令行播放器

Screenshot

特性

  • 依赖较少,易于安装和运行
  • 支持私人兆赫,红心兆赫
  • 支持豆瓣歌曲加心
  • 支持Last.fm Scrobble

运行环境

  • Linux/Mac OS X
  • Python 2.7+ , 3.3+

依赖

安装

请首先安装支持的后端播放器中的某一个,然后使用pip安装本软件:

(sudo)pip install pyfm

如果选择直接git clone整个仓库的方法安装,请先安装相关依赖,然后把pyfm目录下的fm.py移动到上层目录,最后执行 python fm.py

使用

在终端中输入

$ pyfm

配置

$ pyfm config

根据提示输入账户,密码等,豆瓣账户密码不会保存在本地,豆瓣Token,Cookie,Last.fm账户名,Last.fm密码的md5值等保存在$HOME/.pyfm/中。

快捷键

[n]  ->  跳过当前歌曲
[l]  ->  给当前歌曲添加红心或删除红心
[t]  ->  不再播放当前歌曲
[q]  ->  退出播放器

出现问题?

请尝试清空$HOME/.pyfm/目录下的所有内容,重新安装等,如还不能解决,欢迎向我提issue。

致谢

本项目主要参考了以下几个项目

感谢以上项目的作者,开源**!

Changelog

  • 0.2.4 修复若干问题,支持关闭通知
  • 0.2.3 修复若干Bug,加入红心兆赫,支持使用mpv和mplayer作为播放后端(felixonmars)
  • 0.2.2 修复登陆失败时登陆状态不能正确显示的Bug
  • 0.2.1 修复Last.fm密码为空时报错的Bug
  • 0.2 代码大规模重构
  • 0.1 第一个正式版本

协议

The MIT License

其中scrobbler.py遵循GPLv3协议

pyfm's People

Contributors

fansion avatar felixonmars avatar skyline75489 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pyfm's Issues

last.fm

fm.py 中的Scrobbler(self.last_fm_username, self.last_fm_password)

这个 password 是原始密码还是 md5 后的密码?

我调用了一下都没登陆上,求解!

不能播放?

sudo apt-get install mpg123 安装了mpg123,
sudo pip install pyfm 安装了pyfm,
/$ pyfm config 配置账号密码也问题
/$ pyfm
能够正常出现电台选择的页面,可以上下移动光标,但按回车选中播放的时候就弹出下面的信息:

Traceback (most recent call last):
File "/usr/local/bin/pyfm", line 11, in
sys.exit(main())
File "/usr/local/lib/python2.7/dist-packages/pyfm/fm.py", line 357, in main
fm.start()
File "/usr/local/lib/python2.7/dist-packages/pyfm/fm.py", line 352, in start
self.main_loop.run()
File "/usr/local/lib/python2.7/dist-packages/urwid/main_loop.py", line 278, in run
self._run()
File "/usr/local/lib/python2.7/dist-packages/urwid/main_loop.py", line 376, in _run
self.event_loop.run()
File "/usr/local/lib/python2.7/dist-packages/urwid/main_loop.py", line 682, in run
self._loop()
File "/usr/local/lib/python2.7/dist-packages/urwid/main_loop.py", line 719, in _loop
self._watch_filesfd
File "/usr/local/lib/python2.7/dist-packages/urwid/raw_display.py", line 393, in
event_loop, callback, self.get_available_raw_input())
File "/usr/local/lib/python2.7/dist-packages/urwid/raw_display.py", line 493, in parse_input
callback(processed, processed_codes)
File "/usr/local/lib/python2.7/dist-packages/urwid/main_loop.py", line 403, in _update
self.process_input(keys)
File "/usr/local/lib/python2.7/dist-packages/urwid/main_loop.py", line 503, in process_input
k = self._topmost_widget.keypress(self.screen_size, k)
File "/usr/local/lib/python2.7/dist-packages/urwid/container.py", line 1128, in keypress
return self.body.keypress( (maxcol, remaining), key )
File "/usr/local/lib/python2.7/dist-packages/urwid/decoration.py", line 621, in keypress
return self._original_widget.keypress(maxvals, key)
File "/usr/local/lib/python2.7/dist-packages/pyfm/ui.py", line 38, in keypress
return super(ChannelListBox, self).keypress(size, key)
File "/usr/local/lib/python2.7/dist-packages/urwid/listbox.py", line 987, in keypress
key = focus_widget.keypress((maxcol,),key)
File "/usr/local/lib/python2.7/dist-packages/urwid/wimp.py", line 535, in keypress
self._emit('click')
File "/usr/local/lib/python2.7/dist-packages/urwid/widget.py", line 464, in _emit
signals.emit_signal(self, name, self, _args)
File "/usr/local/lib/python2.7/dist-packages/urwid/signals.py", line 264, in emit
result |= self._call_callback(callback, user_arg, user_args, args)
File "/usr/local/lib/python2.7/dist-packages/urwid/signals.py", line 294, in _call_callback
return bool(callback(_args_to_pass))
File "/usr/local/lib/python2.7/dist-packages/pyfm/fm.py", line 329, in on_channel_chosen
self._play_track()
File "/usr/local/lib/python2.7/dist-packages/pyfm/fm.py", line 189, in _play_track
self.current_song.album_title, appIcon=self.current_song.picture, open_URL=self.current_song.album)
File "/usr/local/lib/python2.7/dist-packages/pyfm/notifier.py", line 112, in _notify_send_notify
stderr=subprocess.STDOUT
File "/usr/lib/python2.7/subprocess.py", line 710, in init
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1335, in _execute_child
raise child_exception
OSError: [Errno 2] 没有那个文件或目录

unable to play, pop out display message

self._run()

File "/usr/local/lib/python2.7/dist-packages/urwid/main_loop.py", line 375, in _run
self.event_loop.run()
File "/usr/local/lib/python2.7/dist-packages/urwid/main_loop.py", line 678, in run
self._loop()
File "/usr/local/lib/python2.7/dist-packages/urwid/main_loop.py", line 715, in _loop
self._watch_filesfd
File "/usr/local/lib/python2.7/dist-packages/urwid/raw_display.py", line 392, in
event_loop, callback, self.get_available_raw_input())
File "/usr/local/lib/python2.7/dist-packages/urwid/raw_display.py", line 492, in parse_input
callback(processed, processed_codes)
File "/usr/local/lib/python2.7/dist-packages/urwid/main_loop.py", line 399, in _update
self.process_input(keys)
File "/usr/local/lib/python2.7/dist-packages/urwid/main_loop.py", line 499, in process_input
k = self._topmost_widget.keypress(self.screen_size, k)
File "/usr/local/lib/python2.7/dist-packages/urwid/container.py", line 1128, in keypress
return self.body.keypress( (maxcol, remaining), key )
File "/usr/local/lib/python2.7/dist-packages/urwid/decoration.py", line 621, in keypress
return self._original_widget.keypress(maxvals, key)
File "/usr/local/lib/python2.7/dist-packages/pyfm/ui.py", line 38, in keypress
return super(ChannelListBox, self).keypress(size, key)
File "/usr/local/lib/python2.7/dist-packages/urwid/listbox.py", line 987, in keypress
key = focus_widget.keypress((maxcol,),key)
File "/usr/local/lib/python2.7/dist-packages/urwid/wimp.py", line 535, in keypress
self._emit('click')
File "/usr/local/lib/python2.7/dist-packages/urwid/widget.py", line 464, in _emit
signals.emit_signal(self, name, self, _args)
File "/usr/local/lib/python2.7/dist-packages/urwid/signals.py", line 264, in emit
result |= self._call_callback(callback, user_arg, user_args, args)
File "/usr/local/lib/python2.7/dist-packages/urwid/signals.py", line 294, in _call_callback
return bool(callback(_args_to_pass))
File "/usr/local/lib/python2.7/dist-packages/pyfm/fm.py", line 303, in on_channel_chosen
self._play_track()
File "/usr/local/lib/python2.7/dist-packages/pyfm/fm.py", line 163, in _play_track
self.current_song.album_title, appIcon=self.current_song.picture, open_URL=self.current_song.album)
TypeError: _notify_not_available() takes exactly 1 argument (6 given)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.