今天跟大家伙儿唠唠我捣鼓的“kugou7”的事儿。这玩意儿,纯粹是个人兴趣,想自己搞点儿音乐资源玩儿。
就是随便搜搜,看看有没有啥现成的工具能用。结果发现,要么就是广告满天飞,要么就是根本不能用。得了,只能自己动手了。
我得搞清楚酷狗音乐的网页结构。打开开发者工具,开始抓包。哎呦呵,这请求还挺复杂的,又是加密又是各种参数。不过没关系,一点点啃,慢慢分析。
分析请求:
- 先是抓包,看看搜索歌曲的时候,浏览器都发了啥请求。
- 然后对着请求头、请求体,一点点扣,看看哪些是固定的,哪些是变化的。
- 最关键的,就是那个加密参数,得想办法搞清楚它的生成逻辑。
这加密参数,费了我老鼻子劲了。又是看JavaScript代码,又是各种尝试。发现,原来是用了某个加密算法,还加了点儿自定义的逻辑。把这算法搞明白,然后用Python模拟出来,总算是能生成正确的参数了。
代码实现:
- 有了正确的请求参数,就可以用Python的requests库,模拟发送请求了。
- 拿到返回的JSON数据,解析一下,就能拿到歌曲的信息,比如歌曲名、歌手、专辑啥的。
- 然后,再根据歌曲的信息,构造下载链接。这下载链接也是藏得挺深的,得一层层地分析。
下载链接搞到手,就可以用Python的urllib库或者requests库,把歌曲下载下来了。为了提高下载速度,我用了多线程下载。这样,就可以同时下载多首歌曲,省不少时间。
存储:
- 下载下来的歌曲,我按照歌手名和专辑名,分目录存放。这样,方便管理。
- 我还写了个简单的数据库,记录歌曲的信息,比如歌曲名、歌手、专辑、下载地址等等。这样,方便搜索和查找。
为了方便使用,我写了个简单的命令行界面。可以输入关键词搜索歌曲,然后选择要下载的歌曲,一键下载。这样,就不用每次都手动分析请求了。
这玩意儿还有很多需要完善的地方。比如,搜索结果的排序、歌曲信息的自动补全、下载速度的优化等等。不过目前这个版本已经能满足我的基本需求了。想听啥歌,搜一下,下下来,就能听,挺方便的。
这回搞“kugou7”,虽然挺费劲的,但是也学到了不少东西。比如,怎么分析网页请求、怎么模拟加密算法、怎么用Python进行网络编程等等。最重要的是,体验了自己动手,丰衣足食的乐趣。
如果以后有时间,我会继续完善这个小工具,让它更好用。也欢迎大家伙儿给我提意见,一起交流学习。