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

功能

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

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

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

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

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

  6. 加上了实时歌词滚动

  7. ...

其他说明

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

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

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

技术沉淀

如上图,网易云音乐的请求参数是做了加密处理的。
关于网易云音乐请求参数的加密方法,简单提下


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

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

这样做的好处不言而喻,不法分子很难破解抓取到的请求数据
但服务器负担加重了,每次提供服务前,还得先去破解一番

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

所以,不能够在点歌的时候就把音乐url抓取下来保存,必须得有用户需要播放的时候再抓取url
而且云音乐的mvurl不支持跨域访问,所以我只好做个代理,转发视频数据流了,但这样做的不好就是mv播放不能跳跃播放(如最上方动图所示),不知有没有大牛知道如何解决这个问题


let url = req.url
let q = URL.parse(req.url, true).query
if(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
}

最后在上个预览

源码与使用

song-robot

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

参考资料

referer
https://zh.wikipedia.org/zh/H...

网易云api破解
http://qianzewei.com/2015/12/...

node crypto
https://nodejs.org/api/crypto...

输入框光标变色
http://jsfiddle.net/8k1k0awb/

实时多人点歌机器人 (来自网易云音乐)相关推荐

  1. 从零开始实现实时多人点歌机器人 (来自网易云音乐)

    偶然的机会,发现了B站的点歌机器人,觉得挺好玩的就自己做了一个简易版点歌机器人,预览如下: 功能 使用websocket,支持多人同时点歌,发送弹幕聊天 具有搜索suggestion,用户体验更佳 点 ...

  2. 情侣一起听歌 同步音乐播放 音源来自网易云音乐 异地同步 同步切歌 切换歌曲

    在线体验地址 Github在线地址(国外网站,网速比较慢)) https://egdw.github.io/SyncMusicOnline/#/ Coding.net在线地址(国内网站,网速比较快) ...

  3. 基于网易云音乐API的微信小程序——网愈芸音乐

    网愈芸音乐 一.项目说明 二.项目环境准备 三.项目初始化 1.新建项目 2.安装依赖Vant Weapp,构建NPM 四.项目具体开发过程 1.欢迎页面(首页): 2.登陆页面 1.界面设计 2.逻 ...

  4. 那些你可能不知道的网易云音乐奇技淫巧

    平常听网易云音乐比较多,主要喜欢看看评论,这里就说说网易云音乐. ps: 点击https://st.music.163.com/c/year2018/z/index.html 生成你的 2018 网易 ...

  5. uniapp 仿网易云音乐播放器 微信小程序

    效果视频: uniapp 仿照网易云播放器功能 效果截图: 上代码: <template><view class=""><scroll-view :s ...

  6. 网易云信联手网易云音乐,“一起听”创新音乐社交体验

    还记得"我的耳机分你一半"的感觉吗? 学生时代,教室里.操场边,抑或是上下学的公交车站,我们都曾与好朋友分享过同一副耳机,你的右耳,他的左耳,两只耳朵一起聆听着同一段属于青春的旋律 ...

  7. 网易云音乐基于 Flink + Kafka 的实时数仓建设实践

    简介:本文由网易云音乐实时计算平台研发工程师岳猛分享,主要从以下四个部分将为大家介绍 Flink + Kafka 在网易云音乐的应用实战: 背景.Flink + Kafka 平台化设计.Kafka 在 ...

  8. 网易云音乐歌单详情列表爬虫破解

    这次我跟大家分享的是关于爬虫加密破解的技术! 由于工作开发的需求,后台需要爬取网易云歌单详情页面(http://music.163.com/#/playlist?id=867413461)的歌单歌曲列 ...

  9. flink source 同步_网易云音乐基于 Flink + Kafka 的实时数仓建设实践

    简介:本文由网易云音乐实时计算平台研发工程师岳猛分享,主要从以下四个部分将为大家介绍 Flink + Kafka 在网易云音乐的应用实战: 背景.Flink + Kafka 平台化设计.Kafka 在 ...

最新文章

  1. 关于R语言的一些编程经验
  2. 上传图片到linux返回url,Springboot 将前端传递的图片上传至Linux服务器并返回图片的url(附源码)...
  3. 团队开发经验:如何带领一个项目团队并做好项目总结 !!
  4. 最新版AnyDbTest数据库单元测试工具的下载地址
  5. Boost asio 官方教程简介
  6. linux如何做bond4,linux系统做bond
  7. Rust之字符串,元组,数组,切片,打印优化
  8. 震惊!99%的网络工程师都不知道的组播问题
  9. 暑假学习日记2013/8/20
  10. 最全的Windows进程详解!
  11. Eclipse 专用等宽字体,Yahei_Consola字体
  12. 安静的秋千 ,晚上不睡早晨不起精彩回帖汇总
  13. 【设计模式】-状态模式->APP抽奖活动(源码与类图解析)
  14. 七牛云和Github如何使用PicGo设置免费图床
  15. Qgis教程10:如何自定义工程坐标系
  16. idea maven parent飘红
  17. 什么是大数据思维,数据思维划分哪几个维度?
  18. 5G+AI+大数据+IoT如何改变一切?
  19. 自己动手制作C 语言编译器(8):表达式
  20. JAVA OOP继承和抽象

热门文章

  1. 汉王OCR接口调用——python
  2. 以源码运行nacos2.0.3报错
  3. 简单实用的离线浏览器Web Copier
  4. android安卓音乐播放器课程代码9.5.2
  5. 天梯赛---7-6 集合相似度 (25分)
  6. 微软OA认证/ADFS认证 java 源码解析
  7. python——wordcloud生成中文词云
  8. VC代码的编写和调试
  9. python:求解一元二次方程
  10. 注会考试能用计算机吗,cpa机考能带计算器吗