【QQ Music Downloader】

誰もが本物をサポートする責任があります


プロジェクト要件

①QQ音楽Webページの検索およびダウンロード機能をシミュレートします。

  • アーティストまたは曲のタイトルを入力して、関連する曲のリストを検索し、オプションでダウンロードします。
  • ローカルで曲をダウンロードできます。ローカルにダウンロードするための命名方法は、曲名+歌手+ IDです。

まず、QQ Musicにアクセスして、オーディオダウンロードインターフェイスを見つけます。

曲をランダムに検索します。

次に、Chromeブラウザのデベロッパーツールを開き、クリックして曲を再生します。

次に、メディアタイプファイルを探します。明らかに、必要な音楽は最大のファイルです。

このURLを開きます。

これまでのところ、QQ音楽のオーディオダウンロードインターフェイスが正常に見つかりました。


次に、音楽ダウンロードインターフェイスを分析します。

https://isure.stream.qqmusic.qq.com/C400003y3tQK2JZaau.m4a?
guid = 4441071008&
vkey = 6A1D99170713A9FFA58B61103D38450398E41C3ACDABF3F3E6FF170FB936B9239C1412F189015FE08484D930C1F11B39CD37EA7443CFC395&
uin = 0&
fromtag = 66

最初にこの曲を分析しましょうsongmid参数

私たちは、歌見ることができsongmid参数市は003y3tQK2JZaau、のURLでC400、次のセクションを。

songmid命名の観点から、それは曲の一意の識別子です

残りのパラメータは、オーディオファイルにあります。


3.次に、検索インターフェースを分析します。

検索ボックスを開き、曲名を入力して、検索リクエストをインターセプトします。

次に、URLをデコードします。

URLのパラメーターを分析して、不要なパラメーターをいくつか削除します。

https://cyqq.com/soso/fcgi-bin/client_search_cp?
ct = 24&
qqmusic_ver = 1298&
new_json = 1&
remoteplace = txt.yqq.top&
searchid = 35829660933924128&
t = 0&
aggr = 1&
cr = 1&
catZhida = 1&
lossless = 0&
flag_qc = 0&
p = 1&
n = 10&
w =你要相信この不是最后一天&
g_tk_new_20200303 = 1944343149&
g_tk = 1944343149&
loginUin = 0&
hostUin = 0&
format = json&
inCharset = utf8&
outCharset = utf-8&
notice = 0&
platform = yqq.json&
needNewCode = 0

ここで検索されたキーワードはw参数です。

次のように、不要なパラメータを削除した後:

https://cyqq.com/soso/fcgi-bin/client_search_cp?&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=10&w=歌曲或歌手名称


4番目に、検索インターフェースを介して情報を抽出します。

import requests
import json

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}

url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w=你要相信这不是最后一天'

response = requests.get(url, headers=headers)

js1 = json.loads(response.text.strip('callback()'))
js1 = js1['data']['song']['list']

print(js1)

出力:

これにより、楽曲情報の抽出に成功しました。

次に、リストを作成して関連情報を保存します。

medias = []
song_mid = []
src = []
song_names = []
singers = []

for rest in js1:
    medias.append(rest['media_mid'])
    song_mid.append(rest['songmid'])
    song_names.append(rest['songname'])
    singers.append(rest['singer'][0]['name'])

ただし、ここから抽出しただけなsongmid参数ので、ダウンロードする場合は抽出する必要がありますvkey参数


5.ダウンロードインターフェイスからvkeyパラメータを取得します。

https://cyqq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?&jsonpCallback=MusicJsonCallback&cid=205361747&songmid=

このインターフェイスを通じて、次の情報を取得できますvkey参数

for n in range(0, len(medias)):
    url2 = 'https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?&jsonpCallback=MusicJsonCallback&cid=205361747&songmid=' + song_mid[n] + '&filename=C400' + medias[n] + '.m4a&guid=4441071008'
    rest2 = get_request(url2)
    # print(rest2.text)
    js2 = json.loads(rest2.text)
    print(js2)

ここに画像の説明を挿入


6、ダウンロードインターフェイスから曲をダウンロードします。

for n in range(0, len(medias)):
    try:
        url2 = 'https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg?&jsonpCallback=MusicJsonCallback&cid=205361747&songmid=' + song_mid[n] + '&filename=C400' + medias[n] + '.m4a&guid=4441071008' # 重要参数提取接口
        rest2 = self.get_request(url2)
        js2 = json.loads(rest2.text)
        vkey = js2['data']['items'][0]['vkey']
        src.append('https://isure.stream.qqmusic.qq.com/C400' + medias[n] + '.m4a?vkey=' + vkey + '&guid=4441071008&uin=0&fromtag=66') # 下载接口
    except:
        print("检测到异常,请重新下载")
        break
print("*"*30)
for m in range(0, len(src)):
    print("%-4d" % (int(m+1)) + '《' + song_names[m] + '》' + ' - ' + singers[m])
song_index = int(input("请选择序号:").strip())
if song_index < 0:
    print("退出QQ音乐爬虫程序")
    break
try:
    song_data = self.get_request(src[song_index - 1])
    data = song_data.content
    self.download(data, song_names[song_index-1])
except Exception as er:
    print("检测到异常,请重新下载 ", er)

プログラムを実行します。


誰もが本物をサポートする責任があります

75件のオリジナル記事を公開しました ・いい ね267 訪問数5200

おすすめ

転載: blog.csdn.net/weixin_45961774/article/details/105601148