1.本教程仅供个人学习用,禁止用于任何的商业和非法用途,如涉及版权问题请联系笔者删除。
2.随笔系作者原创文档,转载请注明文档来源:http://www.cnblogs.com/apresunday/p/8448126.html,谢谢
小八这几天正在学习微信小程序的开发,于是想在学的同时能开发出来一个关于音乐的项目,但是问题在于音乐这东西。一方面是数据量太大,第二个方面就是牵扯到很多的版权的问题,所以笔者就想着借助于目前市面上的音乐播放器上的音乐文件,鉴于酷狗音乐上边的歌多而且比较的全面,在此就以酷狗音乐为示例,其它的什么QQ音乐和网易之类的也一样。
建议:用Chrome或者Firefox来进行抓取。
1.打开Chrome地址栏输入酷狗音乐的官网,进入官网后随便搜索一首歌曲,这里以最近比较火的一首歌曲广东爱情故事为例,搜索后按下键盘的F12或者鼠标右键选择检查来打开开发者神器,然后点击Network(用来调试浏览器和服务器交互的工具)随后再次刷新搜索结果页面,会发现工具中出现很多的链接,其链接都是服务器返回给浏览器的数据,如下图。
2.分析:既然是服务器返回给浏览器的数据,其中必有歌曲的相关信息,我们来查看这些链接来看哪个返回了与歌曲相关的数据。当我们查看到一个song_search的链接后发现它callback了一个jQuery的数据对象,我们点击这个song_search这个链接,然后点击Response这个选项卡来看看它返回了 什么数据,如图:它返回了和歌曲相关的信息
点击Headers来来查看它详细的信息。如图:
3.我们发现这个URL很像搜索歌曲的,然后我们复制其到浏览器打开如图:
然后我们多替换keyword为不同的歌曲名称发现它都返回的是歌曲的搜索列表,在此我们已经找到搜索歌曲的链接:http://songsearch.kugou.com/song_search_v2?callback=jQuery1124006980366032059648_1518578518932&keyword=这里是歌曲名称&page=1&pagesize=30&userid=-1&clientver=&platform=WebFilter&tag=em&filter=2&iscorrection=1&privilege_filter=0&_=1518578518934
4.我们来继续播放歌曲,就拿搜索结果的第一个歌来看,地址栏中一个hash就打开了歌曲的所有信息,所以在这我们分析到只要拿到这个hash值就拿到了歌曲的所有播放信息
5.分析刚才搜索返回的数据,我们删除搜索返回数据的最外边的小括号后它其实就是一个json数据,我们来格式化这个json数据,如下:
{
"status": 1,
"error_code": 0,
"data": {
"page": 1,
"tab": "全部",
"lists": [{
"SongName": "<em>广东爱情故事<\/em>",
"OwnerCount": 628451,
"MvType": 2,
"TopicRemark": "",
"SQFailProcess": 0,
"Source": "",
"Bitrate": 128,
"HQExtName": "mp3",
"SQFileSize": 0,
"ResFileSize": 0,
"Duration": 214,
"MvTrac": 3,
"SQDuration": 0,
"ExtName": "mp3",
"Auxiliary": "",
"SongLabel": "",
"Scid": 29199917,
"OriSongName": "<em>广东爱情故事<\/em>",
"FailProcess": 0,
"SQBitrate": 0,
"HQBitrate": 320,
"Audioid": 29199917,
"HiFiQuality": 1,
"Grp": {},
"OriOtherName": "",
"AlbumPrivilege": 0,
"TopicUrl": "",
"SuperFileHash": "",
"ASQPrivilege": 0,
"M4aSize": 878148,
"AlbumName": "广东爱情故事",
"IsOriginal": 1,
"Privilege": 0,
"ResBitrate": 0,
"HQFailProcess": 0,
"SQPayType": 0,
"HQPrice": 0,
"Type": "audio",
"SourceID": 0,
"Publish": 1,
"ID": "89975939",
"SuperFileSize": 0,
"QualityLevel": 2,
"SQFileHash": "00000000000000000000000000000000",
"A320Privilege": 0,
"HQPrivilege": 0,
"SuperBitrate": 0,
"SuperDuration": 0,
"AlbumID": "4162049",
"ResFileHash": "",
"FileSize": 3429399,
"MixSongID": "89975939",
"HQFileHash": "0127995D50833821451408D8A7F90E15",
"SuperExtName": "",
"FileHash": "2A25AAFF4B6C84B859B4D77F944DE57A",
"AudioCdn": 100,
"OtherName": "",
"SQPkgPrice": 0,
"PkgPrice": 0,
"HQFileSize": 8658421,
"mvTotal": 4,
"OldCpy": 1,
"HQPayType": 0,
"SQPrice": 0,
"ResDuration": 0,
"PublishAge": 255,
"Price": 0,
"HQPkgPrice": 0,
"SingerName": "广东雨神",
"SQExtName": "",
"MvHash": "421FD51941758456539B5C1EA10A7E2E",
"SQPrivilege": 0,
"HQDuration": 214,
"PayType": 0,
"HasAlbum": 1,
"Accompany": 1,
"FileName": "广东雨神 - <em>广东爱情故事<\/em>"
},
我们在里边找到了歌曲的FileHash和播放页面的hash值是一样的,在这我们就会拿到歌曲的hash值。
6.用同样的方法在Network中分析播放页面,会发现一个index的链接根据歌曲的hash值返回了歌曲的所有信息,如图:
我们点击Header来查看具体的URL,如图:
我们复制URL在浏览器地址栏打开,如图
发现其返回的就是一个json数据,格式化后代码如下:
{
"status": 1,
"err_code": 0,
"data": {
"hash": "2A25AAFF4B6C84B859B4D77F944DE57A",
"timelength": 214000,
"filesize": 3429399,
"audio_name": "广东雨神 - 广东爱情故事",
"have_album": 0,
"album_name": "未知专辑",
"album_id": 0,
"img": "http:\/\/singerimg.kugou.com\/uploadpic\/softhead\/400\/20171222\/20171222112942494.jpg",
"have_mv": 1,
"video_id": "635812",
"author_name": "广东雨神",
"song_name": "广东爱情故事",
"lyrics": "[00:00.03]广东雨神 - 广东爱情故事\r\n[00:02.61]词:广东雨神\r\n[00:03.83]曲:广东雨神\r\n[00:18.87]安静地离去\r\n[00:21.66]和孤单一起\r\n[00:26.47]拥挤的回忆时间抹去\r\n[00:33.26]人在广东已经漂泊十年\r\n[00:36.32]有时也怀念当初一起\r\n[00:38.41]经已改变\r\n[00:40.88]让这天空将你我相连\r\n[00:44.00]怀念你走了云的天空还任性\r\n[00:51.48]是否它相信在乎\r\n[00:53.10]反而容易放弃\r\n[00:55.92]非要最后一无所有\r\n[00:59.01]才无所畏惧\r\n[01:08.94]我知道好多时候\r\n[01:11.88]爱一个人是没任何理由的\r\n[01:15.92]你同其他女子不一样的\r\n[01:18.54]你从来都不问我钟意你什么\r\n[01:21.49]反而我成日都问你\r\n[01:24.96]你究竟钟意我什么\r\n[01:33.79]笑的多一些改变要彻底\r\n[01:41.34]直面这世界真假游戏\r\n[01:48.24]人在广东已经漂泊十年\r\n[01:51.34]有时也怀念当初一起\r\n[01:53.55]经已改变\r\n[01:55.81]让这天空将你我相连\r\n[01:59.23]怀念你走了云的天空还任性\r\n[02:06.41]是否它相信下一次的相遇\r\n[02:10.83]就算最后一无所有\r\n[02:13.83]也无所畏惧\r\n[02:18.78]相信你就如当初一起\r\n[02:22.24]行过广东这十年幸福走了\r\n[02:28.14]唏嘘感慨那当初\r\n[02:33.76]相信你哪怕坚强\r\n[02:36.44]是假装出勇敢的面具\r\n[02:41.33]也不能少活得精彩的勇气\r\n[02:48.34]人在广东已经漂泊十年\r\n[02:51.30]有时也怀念当初一起\r\n[02:53.48]经已改变\r\n[02:55.83]让这天空将你我相连\r\n[02:59.22]怀念你走了云的天空\r\n[03:04.72]还任性是否它相信\r\n[03:07.50]下一次的相遇\r\n[03:10.84]就算最后一无所有\r\n[03:13.78]也无所畏惧\r\n[03:18.50]就算最后一无所有\r\n[03:21.08]我都无所畏惧\r\n",
"author_id": "721812",
"privilege": 0,
"privilege2": "0",
"play_url": "http:\/\/fs.w.kugou.com\/201802141035\/e668b72ad68914612e8aacf363a34b22\/G114\/M0B\/00\/13\/UpQEAFnocumANGxzADRUF4h4Zks442.mp3",
"authors": [{
"is_publish": "1",
"author_id": "721812",
"avatar": "20171222112942494.jpg",
"author_name": "广东雨神"
}],
"bitrate": 128
}
我们发现歌曲的所有信息都在,包括图片,歌词,歌曲等等,我们来验证下歌曲的url,复制play_url后边的链接,注意去掉转义字符的反斜杠,在浏览器地址栏打开后,如图:熟悉的歌播放。
总结:
1.首先要根据歌曲的名字获取其在酷狗数据库中的唯一索引hash值。
2.根据hash值来获取歌曲的所有信息
记一次酷狗音乐API的获取,感兴趣的可以自己封装开发自己的音乐播放器的更多相关文章
-
在Android上使用酷狗歌词API
参考自http://blog.csdn.net/u010752082/article/details/50810190 代码先贴出来: public void searchLyric(){ final ...
-
Lily_music 网页音乐播放器 -可搜索(附歌词联动播放效果解说)
博客地址:https://ainyi.com/59 写在前面 这是我今年(2018)年初的小项目,当时也是手贱,不想用别的播放器,想着做一个自己的网页播放器,有个歌曲列表.可关键词搜索.歌词滚动播放的 ...
-
Qt音乐播放器制作(一)Easy Player
前几天忽然间认为,事到现在Qt的功底也有些基础了,为什么不试着自己做个玩意来玩玩呢?刚好在开源中国逛代码区的时候看到一个QKugou的项目,就想着做一个在线音乐播放器好了. 于是開始着手准备,忙活了一 ...
-
使用MediaPlayer框架实现简单音乐播放器-陈棚
该项目需要使用MediaPlayer框架,因此程序需要先为该项目添加MediaPalyer框架,并在上面控制器类的实现部分使用#import<MediaPlayer/MediaPlayer.h& ...
-
在线音乐播放器-----酷狗音乐api接口抓取
首先身为一个在线音乐播放器,需要前端和数据库的搭配使用. 在数据库方面,我们没有办法制作,首先是版权问题,再加上数据量.所以我们需要借用其他网络播放器的数据库. 但是这些在线播放器,如百度,酷狗,酷我 ...
-
Java爬虫系列之实战:爬取酷狗音乐网 TOP500 的歌曲(附源码)
在前面分享的两篇随笔中分别介绍了HttpClient和Jsoup以及简单的代码案例: Java爬虫系列二:使用HttpClient抓取页面HTML Java爬虫系列三:使用Jsoup解析HTML 今天 ...
-
Redrain仿酷狗音乐播放器开发完毕,发布测试程序
转载请说明原出处,谢谢~~ 从暑假到现在中秋刚过,我用duilib开发仿酷狗播放器大概经历了50天.做仿酷狗的意图只是看原酷狗的界面比较漂亮,想做个完整一些的工程来练习一下duilib.今天把写好的程 ...
-
仿酷狗音乐播放器开发日志二十七 用ole为窗体增加文件拖动功能(附源码)
转载请说明原出处,谢谢~~ 中秋到了,出去玩了几天.今天把仿酷狗程序做了收尾,已经开发完成了,下一篇博客把完结的情况说一下.在这篇博客里说一下使用OLE为窗体增加文件拖拽的功能.使用播放器,我更喜欢直 ...
-
仿酷狗音乐播放器开发日志二十五 duilib右键事件的不足的bug修复
转载请说明原出处,谢谢~~ 虽然仿酷狗的各个菜单早就写好了,但是一直没有附加到程序里.今天把菜单和播放列表控件关联时发现了问题. 和播放列表相关的菜单有三个,分别是每个音乐项目控件相关的菜单.分组的菜 ...
随机推荐
-
慢慢聊Linux AIO
一.What:异步IO是什么? 1. 一句话总结 允许进程发起很多I/O操作,而不用阻塞或等待任何操作完成 2. 详细说说 一般来说,服务器端的I/O主要有两种情况:一是来自网络的I/O:二是对文件 ...
-
pancake sort的几个问题
1. 每次找剩下序列中的最大值,可以进行pancake sort,时间复杂度是O(n^2): 2. 求最少交换次数进行pancake sort的问题是个NP问题,搜索的时候,upper bound是2 ...
-
430的启动,I/O中断
感言:看了这一集MSP430的讲解之后,我才知道msp430真的和arm7没什么区别了,可能在某些功能上要比arm7要优秀 1:430的系统复位和初始化初始化 430的系统复位有两个来源 1:POR上 ...
-
关于python文件操作 (转载)
总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...
-
vue.js报错:Module build failed: Error: No parser and no file path given, couldn&#39;t infer a parser.
ERROR Failed to compile with 2 errors 12:00:33 error in ./src/App.vue Module build failed: Error: No ...
-
React 学习(六) ---- 父子组件之间的通信
当有多个组件需要共享状态的时候,这就需要把状态放到这些组件共有的父组件中,相应地,这些组件就变成了子组件,从而涉及到父子组件之间的通信.父组件通过props 给子组件传递数据,子组件则是通过调用父组件 ...
-
LINQ 语法
语言集成查询 (LINQ) 是 Visual Studio 2008 和 .NET Framework 3.5 版中一项突破性的创新,它在对象领域和数据领域之间架起了一座桥梁. 传统上,针对数据的查询 ...
-
linux下mysql忘记密码怎么办
前言 今天在服务器安装mysql之后,登录发现密码错误,但是我没有设置密码呀,最后百度之后得知,mysql在5.7版本之后会自动创建一个初始密码. 报错如下: [root@mytestlnx02 ~] ...
-
Oracle用imp导入dmp 提示遇到 ORACLE 错误 12560 TNS: 协议适配器错误 解决方法
用imp命令导入dmp文件时提示以下错误: IMP-00058: 遇到 ORACLE 错误 12560 : ORA-12560: TNS: 协议适配器错误 : IMP-00000: 未成功终止导入 : ...
-
LeetCode3.无重复字符的最长子串 JavaScript
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...