基于.NET的音乐搜索与播放软件(C#,爬取4个平台:酷我/网易云/酷狗/QQ)

前言的前言

我怕阅读者看完之后想打洗我,因此作个说明。php

这个项目构建于 2020年1月,这篇文章开始写于 2020年2月底,而后如今是 2021年1月14日。好吧我一直懒,因此没写完没发布。html

而后到 2021年,也不想细究之前怎么实现这个项目了,读者本身研究吧,啊哈哈……(太不负责任了,打洗丢掉不要了)python

基本思路

一、模拟搜索:经过关键字,获取歌曲列表
二、获取歌曲关键信息(歌曲ID之类的惟一标识)
三、使用指定方法(某个url),根据歌曲ID获取歌曲播放地址
四、将歌曲下载到本地,实现下载或播放
限制:vip音乐大多无法爬取(酷我除外),并且为试听品质
代码内容相对较少,代码编写规范,我的认为是很好的入门projectgit

 

前言

整个项目分三步走,第一步,构思;第二步,研究;第三步,实现。github

 (如要转载,请注明出处和做者!)web

 

一,项目构思

首先,咱们本身没有音乐资源,也没有谁家的服务器提供相应的服务(API),那么,就要找有这些资源的,谁有?chrome

答:酷我音乐,QQ音乐,酷狗音乐,网易云音乐……数据库

对,没错,咱们就是要撸这4个平台的音乐。那咱们要怎么撸?json

答:爬取。c#

经过网页端的试听,将试听的音乐爬取下来。(是的,这个项目只能爬取试听音质,VIP才能听的也爬不下来,因此,要求高的同窗仍是乖乖买个VIP吧)

接着,既然要爬取,那就要研究怎么拿到对方的MP3(其实就是一段URL),这个第二部分说明

最后,这个项目实际上是爬虫项目,爬虫多用python,然,本人工做须要,因此用c#。

一开始是想作成web版的,无奈解决不了跨域问题,因此作成客户端版。

总的,项目内容以下:第一部分介绍项目构(chui)思(shui),第二部分介绍如何爬取各个音乐平台的音乐,第三部分介绍软件的设计。

另外,本文章的读者应该具有:首先,知道如何打开并使用谷歌浏览器chrome的开发者工具(F12);接着,知道VS2013(或者相近版本)的基本操做,以及c#的基本语法;最后,不懂要会百度、谷歌、必应、360搜索……

 

二,研究音乐平台的协议以及实现

各个平台爬取难度不一,酷狗<QQ<酷我<网易云。其中酷狗会封IP,须要不时(应该是定时,或者定频率,未研究)登陆网页端完成验证,其余平台未发现问题。

要爬取音乐,分两步走:1先获取音乐搜索列表,2获取指定音乐的地址

1,酷狗音乐研究

a、获取搜索列表

首先打开谷歌chrome,打开酷狗首页,进入搜索页面(URL:https://www.kugou.com/yy/html/search.html#searchType=song&searchKeyWord=九万字),接着打开开发者工具(F12),页面以下:

 

 在搜索框中输入歌名,找到搜索时 发送请求的url 。以下图:

咱们搜索歌曲时获取歌曲列表就要用这个url(截图中,歌名 “九万字” 被URL编码了):https://complexsearch.kugou.com/v2/search/song?callback=callback123&keyword=九万字&page=1&pagesize=30&bitrate=0&isfuzzy=0&tag=em&inputtype=0&platform=WebFilter&userid=-1&clientver=2000&iscorrection=1&privilege_filter=0&srcappid=2919&clienttime=1594010330190&mid=1594010330190&uuid=1594010330190&dfid=-&signature=1B0D26199D1F3DA254B426375BE1A262

这个url 里面带了不少参数,通常来讲不少参数是没必要须的(能够清洗掉)。

不过酷狗这个新的搜索url 少一个参数都不给显示结果。可是呢,其实除了 keyword 这个参数,其余都是能够固定不理的。

实际上,我的研究这个项目的时候(2020年年初),酷狗搜索歌曲列表的url 是另外一个,就是项目代码里面的这个(通过清洗的): https://songsearch.kugou.com/song_search_v2?&keyword=<<SongName>>&platform=WebFilter

其中<<SongName>> 替换为歌名便可。

这两个url 目前均可以使用。

 能够直接在浏览器测试咱们找得这两个url 是否有效。

 

 b、获取歌曲地址

搜索列表相对来讲仍是比较容易获取的,歌曲地址就有点麻烦了。

咱们先找一首歌,进入试听界面,依旧在左侧找到咱们要的音乐地址:

 

这个url 是https://webfs.yun.kugou.com/202007061248/306902e1e09339160b4cc565848fe108/G108/M00/1A/19/TJQEAFwkeLyANMZ9ADisal-ma54680.mp3

很明显,这就是咱们要的歌曲的地址

可是,问题来了,这个地址哪里来的呢?

咱们不妨搜索一下:

这里,我输入的搜索内容为:TJQEAFwkeLyANMZ9ADisal-ma54680.mp3

搜出了三个url,第一个url 点进去,能够找到咱们要的 play_url 。很明显,这个url (这里咱们暂称这个url 为歌曲地址的上一级地址)就是咱们要的了。

歌曲地址的上一级地址 为:https://wwwapi.kugou.com/yy/index.php?r=play/getdata&callback=jQuery191008139216889751522_1594011139696&hash=D5E394C859D20B095070ADBBFC80C2E6&album_id=14636608&dfid=33ZR3t41Vu4d0jGuk71ttSX4&mid=c596eb268a2705383a10d0af021664c0&platid=4&_=1594011139697

这个url

能够看到里面仍是要参数,这些参数应该就是标识歌曲的相关参数了,咱们能够从上一步骤(获取歌曲列表)里面获取的数据找找看,是否都在里面:

很遗憾……咱们只找到了两个参数,FileHash 和 album_id。

那么 dfid 和 mid ,还有 platid 和 _ 这几个奇奇怪怪的参数怎么办呢?

咱们先清洗一下参数

 咱们先试着去掉 &_=1594011139697 这部分,在浏览器输入剩下的 url ……

好像能够获取正确的结果。

很好,这个参数很明显是无用参数,丢……

来,咱们继续去掉 &platid=4 这部分,依旧能获得正确结果。

……

重复尝试,发现必须参数只有一个,那就是 FileHash (这里说明一下,callback=jQuery191008139216889751522_1594011139696 这个参数最好仍是去掉吧,由于去掉后返回的结果是 json ,能够直接转化为 json)

这未免也太舒服了……只须要一个 FileHash 参数,并且这个参数能够轻松从 获取歌曲的列表 里找到。

这里补充一下,通过重复试验,其实最好保留 dfid 和 mid 两个参数,由于有时候没有这两个参数,其实也获取不到正确结果。

关于 dfidmid 两个参数,其实主要是酷狗对客户身份的区分,有时候获取不到正确结果,能够试着替换这两个参数的值(在程序里,这两个值也能够经过配置文件来动态设置的)。

至此,咱们完成获取歌曲列表获取歌曲地址的操做。

 

c、梳理一下

咱们流程,应该是这样的:首先获取歌曲列表 -> 记录每一首歌的FileHash -> 根据FileHash 经过歌曲地址的上一级地址获取歌曲地址 -> 成功获取歌曲地址

 

二、酷狗音乐爬取 c# 程序实现

既然研究完了协议,咱们就来撸代码了。

 代码……见最后……

此处省略一万字……(2021年1月14日。)

 

三,源码和运行环境

源码地址:

  https://gitee.com/chen3322275/UnLockMusic

  https://github.com/lisheng741/UnLockMusic

运行环境:VS2013可直接打开,无数据库链接 有自定义配置文件(txt文本,在 \bin\Debug\config.txt )

界面截图:(丑是丑了点,这只是个十几天作的小 project,别介意)

相关文章
相关标签/搜索