音樂API之QQ音樂

来源:http://www.cnblogs.com/TwilightLemon/archive/2017/06/25/7076938.html
-Advertisement-
Play Games

歡迎大家來到我的博客,這是我在博客園寫的第一篇文章,但不會是最後一篇,希望大家多多關註我,支持我哦!正文開始,今天我們要講的是QQ音樂的API,都是來源於官方的地址,以前我也想寫一個,但百度谷歌之後都是一些很久以前的,而今天的是我從QQ音樂客戶端抓包而來,希望大家喜歡。 本教程的示例代碼為C# WP ...


歡迎大家來到我的博客,這是我在博客園寫的第一篇文章,但不會是最後一篇,希望大家多多關註我,支持我哦!
正文開始,今天我們要講的是QQ音樂的API,都是來源於官方的地址,以前我也想寫一個,但百度谷歌之後都是一些很久以前的,而今天的是我從QQ音樂客戶端抓包而來,希望大家喜歡。

本教程的示例代碼為C# WPF,其他語言也可以,最關鍵的還是API嘛。
首先我們需要搜索到音樂,取出他的各類值,才能進行播放
http://59.37.96.220/soso/fcgi-bin/client_search_cp?format=json&t=0&inCharset=GB2312&outCharset=utf-8&qqmusic_ver=1302&catZhida=0&p={0}&n={1}&w={2}&flag_qc=0&remoteplace=sizer.newclient.song&new_json=1&lossless=0&aggr=1&cr=1&sem=0&force_zonghe=0
{0} :當前頁碼數,從1開始
{1} :每次請求返回的數量
{2} :搜索關鍵詞
我們就能得到一些json,在C#中 我熟悉使用Newtonsoft.Json來操作JSON.
例如這樣:

C#示例代碼:

 1 Music m = new Music();
 2 
 3 m.MusicName = o["data"]["song"]["list"][i]["name"].ToString();
 4 
 5 string Singer = "";
 6 
 7 for (int osxc = 0; osxc != o["data"]["song"]["list"][i]["singer"].Count(); osxc++)
 8 
 9 { Singer += o["data"]["song"]["list"][i]["singer"][osxc]["name"] + "/"; }
10 
11 m.Singer = Singer.Substring(0, Singer.LastIndexOf("/"));//歌手
12 
13 m.ZJ = o["data"]["song"]["list"][i]["album"]["name"].ToString();//專輯
14 
15 m.MusicID = o["data"]["song"]["list"][i]["mid"].ToString();//音樂ID
16 
17 m.ImageID = o["data"]["song"]["list"][i]["album"]["mid"].ToString();//專輯圖ID
18 
19 m.GC = o["data"]["song"]["list"][i]["id"].ToString();//歌詞ID
20 
21 m.Fotmat = o["data"]["song"]["list"][i]["file"]["size_flac"].ToString();//是否為FLAC,其實沒有多大用
22 
23 m.HQFOTmat = o["data"]["song"]["list"][i]["file"]["size_ogg"].ToString();//HQ
24 
25 m.MV = o["data"]["song"]["list"][i]["mv"]["id"].ToString();//MV iD
26 
27 string Q = "";
28 
29 if (m.Fotmat != "0")
30 
31 Q = "SQ";
32 
33 if (m.HQFOTmat != "0")
34 
35 if (m.Fotmat == "0")
36 
37 Q = "HQ";
38 
39 //判斷最高品質(SQ,HQ,標準)

 

其中,Music是我的一個自定義類,你可以直接儲存到string中。

獲取到了音樂信息,接下來就是使用了。

專輯圖 API:

https://y.gtimg.cn/music/photo_new/T002R300x300M000{0}.jpg

{0} :從上面獲取到的專輯圖ID

 

接下來就是獲取歌曲的步驟了,分別有3個品質,這要看歌曲是否支持(HQ,標準,經濟),由於SQ的API加入了綠鑽檢測和QQ登陸檢測,所以就無法破解SQ品質的歌曲。

 

經濟品質,大小最小,品質最低的,並且獲取最簡單:

 

http://cc.stream.qqmusic.qq.com/C100{0}.m4a?fromtag=52

{0} :上面獲取到的音樂ID

怎麼樣,很簡單把~

 

標準品質,大小一般,品質一般,由於需要KEY所以獲取有點難:

首先需要一下幾樣東西:

 Guid:20D919A4D7700FBC424740E8CED80C5F,用於獲取KEY

 

地址:

http://59.37.96.220/base/fcgi-bin/fcg_musicexpress2.fcg?version=12&miniversion=92&key=19914AA57A96A9135541562F16DAD6B885AC8B8B5420AC567A0561D04540172E&guid={guid}

{guid} :就是上面那一串

 

我們可以用一個笨方法將key取出,就是取出中間文本:

前面: "key=\""  後面:"\" speedrpttype"

 

這樣我們獲取到了key就可以請求歌曲文件啦:

http://182.247.250.19/streamoc.music.tc.qq.com/M500{musicid}.mp3?vkey={vkey}&guid={guid}

{musicid} :上面獲取的音樂ID

{vkey} :上面獲取的KEY

{guid}: 上面獲取的Guid

 

這樣就完成了標準品質的播放

 

HQ品質,也就是高品質,獲取難度同上,但一些歌曲不支持HQ。

首先準備一隻GUID:"20D919A4D7700FBC424740E8CED80C5F"

再次發送請求:http://59.37.96.220/base/fcgi-bin/fcg_musicexpress2.fcg?version=12&miniversion=92&key=19914AA57A96A9135541562F16DAD6B885AC8B8B5420AC567A0561D04540172E&guid={guid}

這些步驟其實和標準的獲取方法是一樣的。

接著取出key

取出中間文本:前面: "key=\""  後面:"\" speedrpttype"

 

獲取KEY我們就能拿到歌曲鏈接了:

http://182.247.250.19/streamoc.music.tc.qq.com/O600{musicid}.ogg?vkey={vkey}&guid={guid}

參數同上,其實就是M5和O6變了,其他都一樣。

 

其他的API,是我在y.qq.com抓包得來的

獲取個人歌單API,必須是開放的歌單才行.

https://y.qq.com/n/yqq/playlist/{0}.html#stat=y_new.profile.create_playlist.click&dirid=6

{0}:歌單ID ,從官網點進去就能看到

接著取出JSON解析處理

"{\"list\":" + 取出文本(s, "var getSongInfo = ", ";", 0) + "}"

 

熱搜關鍵詞API:

http://59.37.96.220/soso/fcgi-bin/dynamic_content?format=json&outCharset=utf-8

沒有任何需要更改的參數,盡情解析JSON就可以

它位於JSON的["data"]["search_content"]處

 

最終API--歌詞+翻譯

這是我研究了很久的API,原先我是從QQ音樂客戶端抓包,可是太複雜,於是又從y.qq.com下手,終於找到了夢寐以求的API。

 

它是以BESE64加密的,不算太麻煩

請求連接:

由於設置了防盜鏈,你需要做些手腳,偽裝自己。

一下以C#代碼為示例解說:

 1 WebClient c = new WebClient();
 2 
 3 .Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36");
 4 
 5 c.Headers.Add("Accept", "*/*");
 6 
 7 c.Headers.Add("Referer", "https://y.qq.com/portal/player.html");
 8 
 9 c.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
10 
11 c.Headers.Add("Cookie", "tvfe_boss_uuid=c3db0dcc4d677c60; pac_uid=1_2728578956; qq_slist_autoplay=on; ts_refer=ADTAGh5_playsong; RK=pKOOKi2f1O; pgv_pvi=8927113216; o_cookie=2728578956; pgv_pvid=5107924810; ptui_loginuin=2728578956; ptcz=897c17d7e17ae9009e018ebf3f818355147a3a26c6c67a63ae949e24758baa2d; pt2gguin=o2728578956; pgv_si=s5715204096; qqmusic_fromtag=66; yplayer_open=1; ts_last=y.qq.com/portal/player.html; ts_uid=996779984; yq_index=0");
12 
13 c.Headers.Add("Host", "c.y.qq.com");

 

加入一大串標頭,哈哈

 

https://c.y.qq.com/lyric/fcgi-bin/fcg_query_lyric_new.fcg?callback=MusicJsonCallback_lrc&pcachetime=1494070301711&songmid={McMind}&g_tk=5381&jsonpCallback=MusicJsonCallback_lrc&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq&needNewCode=0

{McMind} :音樂ID

 

首先用JSON的方法取出lyric和trans兩個數據。

接下來使用BASE64解密就可以得到歌詞啦!

 

示例代碼:https://github.com/TwilightLemon/Lemon-App/tree/master/Lemon%20App/Music

 

本次教程到這裡就結束啦,希望大家喜歡,多多支持我!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • redis對象 redis中有五種常用對象 我們所說的對象的類型大多是值的類型,鍵的類型大多是字元串對象,值得類型大概有以下幾種,但是無論哪種都是基於redisObject實現的 redisObject的結構如下 type的可選值有五種.分別是 REDIS_STRING, REDIS_LIST, R ...
  • 情景linux shell如何實現多線程? 情景 shell腳本的執行效率雖高,但當任務量巨大時仍然需要較長的時間,尤其是需要執行一大批的命令時。因為預設情況下,shell腳本中的命令是串列執行的。如果這些命令相互之間是獨立的,則可以使用“併發”的方式執行這些命令,這樣可以更好地 利用系統資源,提升 ...
  • 本文目錄: 13.1 Linux數據包轉發功能 13.2 和網路相關的幾個文件說明 13.2.1 網卡配置文件ifcfg-* 13.2.2 DNS配置文件/etc/resolve.conf 13.2.3 /etc/udev/rules.d/70-persistent-net.rules 13.2.4 ...
  • 虛擬機無桌面的Linux 與 物理機Windows 文件互傳有很多種方法,現在先說一種通過共用文件夾的形式,其他方法後續再補充 1、 背景 1) 虛擬機系統:VMWare無桌面的Linux 2) 物理機系統:Win 7 3) 共用文件夾:物理機的D:\Virtual Machines\shared_ ...
  • 1.第一種方法是最常用的 :如果下載了Xshell和Xftp,Ctrl+Alt+F就可以選擇文件的互傳了!(虛擬機/雲伺服器通用)--只要相互間能ping得通。 2.第二種方法 :ubuntu環境下安裝lrzsz,具體命令是 > sudo apt-get install lrzsz (如果是root ...
  • 本文轉自:[FFmpeg 入門(2):輸出視頻到屏幕 | www.samirchen.com][2] SDL 我們這裡使用 SDL 來渲染視頻到屏幕。SDL 是 Simple Direct Layer 的縮寫,是一個優秀的跨平臺多媒體庫,你可以從 [http://www.libsdl.org][3] ...
  • 使用wget下載整個FTP目錄,可以用於伺服器間文件傳輸,進行遠程備份。通過限制網速,可以解決帶寬限制問題。 ...
  • NuGet是微軟開發平臺下的包管理軟體,使用它你可以非常方便的將一些第三方的庫、框架整合進自己的項目中,省去了不少麻煩的配置過程。但是從官方文檔上來看,貌似NuGet對C++的支持不是很好,並且在現階段推薦使用CoApp來簡化包的構建。 1. 環境要求 NuGet 2.5 及以上(較新版本才加入了對 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...