Giter Club home page Giter Club logo

raswxneteasemusic's Introduction

树莓派版网易云音乐播放器

注意,该版本为树莓派版,如果需要使用电脑版(Windows/Linux/OSX),请点击这里

来源

之前毕业的时候实在闲的无聊,正好手头上有个树莓派,就写了个简单的网易云音乐播放器,代码很简单,写的也很乱,功能更简单--只能搜索歌曲,然后播放之,放在了github上,没想到竟然收到三十多颗星,实在惭愧,然后放年假,就想着把功能稍微完善一下,于是就有了WxNeteaseMusic,其实做的工作也不多,基于itchat网易云音乐的python API,废话不多说,容我简单介绍一下吧。

首先,我的场景是这样的,实验室是有一台电脑放音乐的,大家切歌就要跑到那里操作,比较麻烦,后来我就想做个后台,用微信来操作切歌这些,这样大家只要加了我的微信号,发相关指令就可以了,还是比较方便的。再后来,电脑换成了树莓派,我就又移植到了树莓派上。不过这里吐槽一下,树莓派的原生音质确实渣,我们后来买了个 DAC ,完美。😁

安装

项目源码都都在我的Github上,大家先下载下来,麻烦大家顺手点个star哟~,谢谢。 我们以树莓派环境为例,安装其实很简单,都是一些python的pip依赖包:

  • sudo apt-get install python-dev
  • sudo pip install requests
  • sudo pip install future
  • sudo pip install crypto
  • sudo pip install bs4
  • sudo pip install pycrypto

上面这些依赖应该够了,如果提示缺少包的话,大家根据提示自行安装就可以了,切换到RasWxNeteaseMusic目录,执行python run.py 用微信扫码登陆,Bingo, just enjoy it !

功能

嗯,先来看看都有什么功能。

  • H: 帮助信息
  • L: 登陆网易云音乐
  • U: 用户歌单
  • M: 播放列表
  • N: 下一曲
  • R: 正在播放
  • S: 歌曲搜索
  • T: 热门单曲
  • E: 退出

这就是RasWxNeteaseMusic V0.1版的功能菜单啦,后面如果大家有其它的需求或者使用过程中有什么问题,都可以提出来,github上提Issue或者在下面评论都可以,后面我会尽量完善。

使用

微信扫码登陆后,向登陆的微信号发送命令,就可以使用了。我的微信号是可以自己向自己发送信息的,使用起来比较方便,但是有些微信号好像不能自己给自己发信息,这种情况下,就需要通过另一个微信号向扫码登陆的微信号发命令。这里需要注意,扫码的时候itchat是以网页版/电脑版的方式登陆微信的,如果扫码的手机退出微信客户端,那么WxNeteaseMusic自然也不能正常使用。不过也有手机退出微信但是网页版/电脑版不退出的办法,大家自行百度一下。 如果大家看一下代码就会发现,WxNeteaseMusic是以空格为分隔符来切割命令的,所以对于有两个或者三个参数的命令时,需要以空格为分隔符,下面我具体来介绍一下。

获取帮助信息

发送 H

登陆网易云音乐

命令格式为 L 用户名 密码,注意,L用户名密码之间以空格分开,这里的用户名和密码是你的网易云音乐的用户名和密码,邮箱格式。之后客户端会收到一条消息,登陆成功或者登陆失败,如果登陆成功,WxNeteaseMusic会保存你的UserId,所以并不需要每次使用都要登陆账号,除非要换其它账号,UserId在网易云音乐中是唯一的,用户的歌单、收藏列表等信息都是通过UserId来获取的。登陆成功后,就可以使用下面的功能了,默认是我的UserId哦,别忘记登录呀~

获取用户歌单

登陆成功后,播放列表默认为网易云音乐的热歌榜,些时发送U可以获取用户的歌单,就是你在网易云音乐创建的歌单,获取歌单后,通过命令U 序号来选择对应的歌单,注意U序号之间有空格,此时播放列表是你歌单里的歌曲。

播放列表

使用过程中,发送M可以随时查看当时的播放列表。

下一曲

发送命令N来播放下一曲,N 序号播放列表中对应的歌曲,当前列表通过命令M获取。这里需要注意,通过N 序号选择列表中的歌曲时,播放是临时的,并不保存在播放列表中,此时再发R命令时显示的播放信息是错误的。

正在播放

发送命令R可获取正在播放的歌曲详情。

歌曲搜索

发送命令S 歌曲名可进行歌曲搜索,成功后会返回搜索结果列表,再发送S 歌曲名 序号来播放对应序号的歌曲,注意,两次命令的歌曲名必须完全一致。

热门单曲榜

发送T获取网易云音乐的热门单曲榜,并更新播放列表。

退出

发送E退出播放,此时播放列表变为空,用户如果要恢复播放,需要获取歌单更新播放列表。

功能演示

好吧好吧,说了这么多,还是让我来实际来演示一下吧。注意,演示中的登陆密码我已经修改了,你们就不要试了哈。

演示

如果还不清楚的话,我还拍了个小视频,放在了优酷上,请点击这里

视频演示

Todo List

  • 增加控制音量功能 amixer sset PCM 80%

其它

当前在树莓派上使用的播放器为raspbian自带的omxplayer,因为python的mp3play包不能在树莓派上使用,后来对比了mpg123和omxplayer发现,omxplayer音质还要相对好一些。另外,在登陆网易云音乐的时候需要进行一个加密算法,由于树莓派的计算能力有限,所以需要多等待一会。

BUGS

1.网易云音乐中部分音乐链接已失效,所以可能导致播放失败的情况,这种情况下,因为树莓派版使用的是omxplayer,而非其它平台下的WxNeteaseMusic使用的mp3play模块,omxplayer并不能感知到播放失败,还会一直等待当前播放失败的歌曲的时长才会播放下一首,或者其它命令触发切换动作,如(N)等,建议使用网易音乐的客户端把播放失败的这首歌直接删除掉,这样在树莓派上播放时就不会卡住了。而电脑版使用的是python的mp3play包,播放失败时会自动跳过。

2.通过N 序号选择列表中的歌曲时,播放是临时的,并不保存在播放列表中,此时再发R命令时显示的播放信息是错误的。

3.如果出现二维码不完整的问题,是linux平台编码字符宽度问题,尝试使用itchat.auto_login(enableCmdQR=True)。

raswxneteasemusic's People

Contributors

yaphone 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

raswxneteasemusic's Issues

扫码后报错

Please scan the QR code to log in.
Please press confirm on your phone.
Traceback (most recent call last):
File "run.py", line 14, in
itchat.auto_login(enableCmdQR=2)
File "/home/pi/RasWxNeteaseMusic/itchat/components/register.py", line 35, in auto_login
loginCallback=loginCallback, exitCallback=exitCallback)
File "/home/pi/RasWxNeteaseMusic/itchat/components/login.py", line 61, in login
self.show_mobile_login()
File "/home/pi/RasWxNeteaseMusic/itchat/components/login.py", line 180, in show_mobile_login
self.loginInfo['url'], self.loginInfo['pass_ticket'])
KeyError: 'pass_ticket'

关于播放音源的问题

播放的时候貌似好像只能用HDMI播放,拔掉hdmi线,内置的耳机口接耳机没声音,raspbian系统调节音量和音源为本地那个A开头的也无效,我的是树莓派3,这样不能脱离显示器听歌--,操作方面相当流畅,持续关注O(∩_∩)O

关于微信扫码的问题

您好,关于微信扫码的问题前一个版本的扫码可以顺利进行,而这个版本出现的二维码会出现错乱的情况。请问这是为什么呢?谢谢

BUG 登录

我对比了 两个版本的myapi.py 发现此版本的 login函数内 password参数加密 缺少编码 我不知道 作者是不是有意为之

关于播放网址不变的询问

楼主,您好!我在play()方法中的添加了print "success",发现换歌后的歌曲网址是一样的(如图),而且我把网址提取出来,用命令行中输入omxplayer http://xxxx没有播放任何歌曲,不知道是为什么,期待您的答复!
注:omxplayer 能正常播放本地歌曲

mp3_url = song["mp3_url"]
                    try:
                        subprocess.Popen("pkill omxplayer", shell=True)
                        time.sleep(1)
                        subprocess.Popen("omxplayer " + mp3_url, shell=True, stdout=subprocess.PIPE)
                        self.con.notifyAll()
                        print "success"
                        print "mp3"+mp3_url
                        self.con.wait(int(song.get('playTime')) / 1000)
                    except:
                        pass

image

我的树莓派无法播放

微信上有正常回应,但树莓派不发出声音

错误显示 Connection aborted

我看到之前也有两三个类似问题,是不是网易云的源出了些问题?

无声音输出,树莓派3B

运行OK,
QR code有缺失,不过可以使用生成的实际图片文件,来登陆
网易云用户名登陆OK,
列表获取OK,
歌曲选择OK,
播放,显示正在播放,但是无声音输出。从log上看不出什么异常。
OMXplayer,是可以正常播放本地的MP3歌曲的,验证无问题。

不知道为什么这个微信选择歌曲无法播放了。

字符微信二维码无法扫描

生成微信二维码后,我把二维码粘贴到windows自带的记事本中,粘贴后的二维码无法扫描。(粘贴后会显示正方形的二维码,以解决终端中二维码字符宽度问题。)

在你之前的回答中提到的打开QR.jpg的方法是可行的,只是比较好奇为什么二维码都正方形了,还是无法扫描

求设计大大增加些硬件平台信息的说明

首先对设计大大的设计表示很好,很强大,nice work!
我看到readme里都是介绍软件的,但没有介绍最重要的硬件平台:树莓派的版本啊。。
不过从视频可以看出,应该用的是树莓派3B,和我手里的这块3代差不多,和2代区别有点大。
还有我看整个系统(linux主机,树莓派,手机(看着像苹果而不是安卓机?))这三个硬件模块都是用wifi组网,连接到一起的吧。
所以希望设计大大能增加些硬件平台系统的说明,包括树莓派,还有那个酷炫的小音响是怎么树莓派连接到一起的等等。
这样后续的菜鸟才能复现,再次表示赞!

二维码不完整

使用itchat.auto_login(enableCmdQR=True)er'wei二维码也不完整啊.

关于Python超过最大递归深度的问题

您好,我的平台是树莓派3B。
执行python run.py时,显示超出递归深度。我首先在configue.py中手动设定了深度,在30000左后报错SegmentationFault
我换成Python3的环境,依然报错超出递归深度。
请问问题出在哪呢?

扫码后报错

Traceback (most recent call last):
File "run.py", line 13, in
itchat.auto_login(enableCmdQR=2)
File "/home/pi/myApp/RasWxNeteaseMusic/itchat/components/register.py", line 35, in auto_login
loginCallback=loginCallback, exitCallback=exitCallback)
File "/home/pi/myApp/RasWxNeteaseMusic/itchat/components/login.py", line 47, in login
status = self.check_login()
File "/home/pi/myApp/RasWxNeteaseMusic/itchat/components/login.py", line 116, in check_login
process_login_info(self, r.text)
File "/home/pi/myApp/RasWxNeteaseMusic/itchat/components/login.py", line 132, in process_login_info
r = core.s.get(core.loginInfo['url'], headers=headers, allow_redirects=False)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 546, in get
return self.request('GET', url, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 646, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 516, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='wx2.qq.com', port=443): Max retries exceeded with url: /cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=AyhrhvRmsKr0UHzKgOKGePmE@qrticket_0&uuid=QdOQ8yRu4A==&lang=zh_CN&scan=1565355370 (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x755978b0>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution',))

登录成功但没收到回复

1496606643 1
wechat image_20170605040712

楼主好!首先说一下我是个菜鸟,麻烦您了!我的是树莓派2,用的是 Python 2.7.x 运行 run.py
但是运行、扫描登录成功后【如图1】,按照您的教程, 我在微信上给我自己的微信进行回复,但是没有收到任何的回复【如图2】。请问是什么问题呢?
注:

  1. 我的树莓里没有装网易云音乐这个软件(也不知道要不要装)
  2. 我的树莓还没有外放设备(应该也不会影响回复问题吧)
  3. 我是通过SSH登录操作树莓的。

api失效

API似乎失效了,我打了log发现不管搜索播放什么歌都是返回一个无效的url

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.