博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实时多人点歌机器人 (来自网易云音乐)
阅读量:6940 次
发布时间:2019-06-27

本文共 1843 字,大约阅读时间需要 6 分钟。

偶然的机会,发现了B站的点歌机器人,觉得挺好玩的就自己做了一个简易版点歌机器人,预览如下:

clipboard.png

clipboard.png

功能

  1. 使用websocket,支持多人同时点歌,发送弹幕聊天

  2. 具有搜索suggestion,用户体验更佳

  3. 点击mv视频右上角可以缩小放大,不影响用户其他操作

  4. 具有mv的资源,优先播放mv

  5. 对于未播放的已点歌曲,可以进行取消

  6. 加上了实时歌词滚动

  7. ...

其他说明

由于是实时多人点歌,所以不能够跳过当前播放歌曲,也不能跳跃播放,Mv只能够重头开始播放,mp3能够根据线上其他用户的播放进度进行同步

音乐资源均来自网易云音乐,该程序仅用于个人学习,不得用于任何商业用途

关于网易云音乐的接口规则,我就不多说了,因为关于商业机密,可能吃官司的,有兴趣的可以私下找我

技术沉淀

clipboard.png

如上图,网易云音乐的请求参数是做了加密处理的。

关于网易云音乐请求参数的加密方法,简单提下

aesRsaEncrypt: function (text) {    var secKey = createSecretKey(16);    return {        params: aesEncrypt(aesEncrypt(text, nonce), secKey),        encSecKey: rsaEncrypt(secKey, pubKey, modulus)    }}

clipboard.png

secKey为本地随机生成的密文,通过rsa非对称加密算法加密,然后网易服务器通过约定好的与pubKey对应的另一个因数进行解密,得到secKey, 然后通过两次aes逆运算就能得到text,也就是真实的参数了。

这样做的好处不言而喻,不法分子很难破解抓取到的请求数据

但服务器负担加重了,每次提供服务前,还得先去破解一番

另外!网易还做了一点安全措施,调用接口得到音乐url是有时间限制的!!!

clipboard.png

所以,不能够在点歌的时候就把音乐url抓取下来保存,必须得有用户需要播放的时候再抓取url

而且云音乐的mvurl不支持跨域访问,所以我只好做个代理,转发视频数据流了,但这样做的不好就是mv播放不能跳跃播放(如最上方动图所示),不知有没有大牛知道如何解决这个问题

let url = req.urllet q = URL.parse(req.url, true).queryif(url.startsWith(SUFFIX)) {    if(q.id!=0)        gs.getMvUrl(q.id)            .then(json => {                if(json.hurl || json.murl) {                    res.writeHead(200, {'Content-Type': u.suffix2Type('mp4')});                    var s = gs.getStream(json.hurl || json.murl)                    s.on('error', (err) => {                        s.close && s.close()                        console.error(err)                        res.end()                    })                    //传递MV视频数据流                    s.pipe(res)                } else {                    res.writeHead(500);                    res.end('Error '+JSON.stringify(json))                }            })    else {        res.writeHead(500);        res.end('Error')    }    return}

最后在上个预览

clipboard.png

源码与使用

npm i song-robot -gsong-robot -p 9888open http://localhost:9888

参考资料

referer

网易云api破解

node crypto

输入框光标变色

转载地址:http://obsnl.baihongyu.com/

你可能感兴趣的文章
java算法 第七届 蓝桥杯B组(题+答案) 8.四平方和
查看>>
Eclipse(PDT) + Xdebug
查看>>
文本内容超出父元素一行或多行省略号代替
查看>>
冒泡排序法
查看>>
第五次作业
查看>>
创建外部用户_外部表
查看>>
安徒生的童话《冰雪皇后》原本是这样的
查看>>
[Django学习] Django基础(7)_分类统计
查看>>
第四次作业测试代码+018+李滨
查看>>
五花肉
查看>>
利用jquery将页面中所有目标为“#‘的链接改为其他URL
查看>>
缓冲流
查看>>
PMBOK学习笔记一
查看>>
Python 3.5 socket OSError: [Errno 101] Network is unreachable
查看>>
前后端分离?
查看>>
os中的mmu介绍
查看>>
Python使用Scrapy爬虫框架全站爬取图片并保存本地(@妹子图@)
查看>>
Java异常处理机制以及try-catch-finally-return执行顺序
查看>>
Java Path 问题(一)
查看>>
51nod 1293:球与切换器
查看>>