目标网易云音乐

详情见B站教程https://www.bilibili.com/video/BV18V4y1T79F?p=14

还有这两篇https://blog.csdn.net/zly717216/article/details/113522474

https://blog.csdn.net/qq_36779888/article/details/90738012

抓包

喜爱页

https://music.163.com/weapi/v6/playlist/detail?csrf_token=880738687515b74fb700788c52270b8b

搜索页

https://music.163.com/#/search/m/?id=7053185814&s=陈奕迅&type=1

歌曲页

https://music.163.com/#/song?id=65800

辅助代码,下载喜爱歌曲到一个列表里面

import execjs
import requests headers = {
'referer': 'https://music.163.com/',
'cookie':'_ga=GA1.1.18448714.1632904553; _ntes_nuid=9c0d0f8e61f12c731b6fb04a2d2e279b; _ga_C6TGHFPQ1H=GS1.1.1632904553.1.0.1632904615.0; NMTID=00Ozo1wJ1fXcNyV6kiHvvcOtt5D20kAAAF8ZQy0RA; WNMCID=wsqenr.1633782907500.01.0; WEVNSM=1.0.0; WM_TID=dI1C5xAE2t1AURUEBUI78DgnQaSfP1on; usertrack=ezq0J2LYu3quZhxDA9yVAg==; ntes_kaola_ad=1; _ntes_nnid=9c0d0f8e61f12c731b6fb04a2d2e279b,1664203664905; __snaker__id=FcswSyk2djPmoVxA; YD00000558929251%3AWM_TID=S6hdsgMkCj1BRAQUQELVSiqMIXGKybbE; _9755xjdesxxd_=32; hb_MA-93D5-9AD06EA4329A_source=www.baidu.com; __root_domain_v=.163.com; _qddaz=QD.351866958934376; WM_NI=0muVkpfNdOBVCkJVaAa%2FRcJak77OdnGHxOZhxcKgWNuswIp1NId%2BMR28EuoKp4V4WTfqCac3%2BW61WiioRfKkvvm5HMsdYH5Ww6122FHIXTAS5yBcz2CvHtsFIWN8vBYGZHo%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6eea8e14489eea984f664f6bc8bb3d45a968f9b87c85287bac0d4b85b8a9ae5ccb52af0fea7c3b92af4b3bbb7ea7ca692acb0c15e81b586b7e44ba3f19e84c96ba9e9f9b0e7668598b8b0d964bcbd8588d646b7adb9aaf33b8e97acccd05af2e88b96ee41b4ec9ad5d660a6af8d82e239e989fad2d663abb19e87ca61b6aaa3d6cb47b1bc97a9b85db5eaffd3b14e8c9798b5c459f7a78e84f93a81aa8895f24e8b8982d9f54a9b9996a9ee37e2a3; gdxidpyhxdE=%5CSQfxqPLswGhHQkWaeqziJH113SBu%2B87SD%2ByEUsco%5CIL%2FpCYi8dfNwN6prCjgxD%2FL9uUnPAMaH9m7RItN7P%2F%5CjhdJ6s5yM54QznWjYDgDAabyvfiVtLb616m59%2F7REbBvqN9SxyrKjPI1NsEWpWy2YbmI%2B%5CqP%2B7Eecb7lsWE8lZ%5CQp%5Cu%3A1667012947397; YD00000558929251%3AWM_NI=d9l9PqWZ04W0cPm6nuaQkN2%2FR7Cix7xJrv6G8x8OxLYm2e73LzLf0hRTEzf5I6PbSYQ124M%2FDcE%2FKyU%2BYuM6qHPfogH1L%2FQcCHVWyHIHtWlqpmKBauFngIYmTLFIr9xNZXY%3D; YD00000558929251%3AWM_NIKE=9ca17ae2e6ffcda170e2e6eed9c84f889cafbae2259bb48aa7d15b839b8ab1d54783ef988fc953a38bae99c92af0fea7c3b92aa8e7a4dad37b958600d5d63ca190a3d7ed7fa38fa5afb12592e98d8afb3dbc96be97b54dfca8f8b0fb489bb3fe86b63990a68487b364928c8b9be53f8beaa083d25393effed5d02588bd8bd0ca7397f59796d03eb398a087ee6d8cef84d0d46981989ab8fc448b98bcb8ef7bb4b385a3e47f86b2a9aadc6798948aaaf133bc9296b9dc37e2a3; __csrf=880738687515b74fb700788c52270b8b; MUSIC_U=6acc1a5bb7fe3625dc22db7370d5570bbb40d86bd42b29f60c049e3db3398c4f993166e004087dd326a0f72a48558f6c6c17c85bdd7a8046672c525893c48e2b37ecc291c0801a2ad4dbf082a8813684; _iuqxldmzr_=32; playerid=98979907; JSESSIONID-WYYY=ReeUtuIMo5N4sNZQWIvASEdPBWwXp2Xvf3zGHnwm%5Csz2EAMOePH1qxiuJHyUZxErrcvSSntMzKc%2Fs88lzv7JPqtpvzftMTx6%2Fo4sTy4GvfiBPzdPomqXI%5CwQ%5C%5CbC0AGrR2zxyJFFiBH9Z3H0j8Hh2%2BOszJSxZO13fDuqukPQrigm1NzR%3A1667034584884',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
params = {
'csrf_token': 'c08dc13fbcff3a4a9285ed4250812a22',
}
ctx=open('Python/实战项目/爬虫网易云播放器/网易云.js','r').read() song_list=[]
like_list=[] # 个人喜爱歌单
def get_like_list():
like_encText=execjs.compile(ctx).call('get_like_encText')
like_encSecKey=execjs.compile(ctx).call('get_like_encSecKey')
like_data={
'params': like_encText,
'encSecKey': like_encSecKey,
}
like_url='https://music.163.com/weapi/v6/playlist/detail'
like_songs= requests.post(like_url, params=params,headers=headers, data=like_data).json()['playlist']['tracks']
for song in like_songs:
song_name=song['name']
id=song['id']
singer=song['ar'][0]['name']
song=get_song(id,song_name,singer)
like_list.append(song)
print(song)
with open('Python/实战项目/爬虫网易云播放器/我的喜欢.txt','w',encoding='utf-8') as f:
f.write(str(like_list)+",") # 获取歌曲
def get_song(id,song_name,singer):
encText=execjs.compile(ctx).call('get_encText',id)
encSecKey=execjs.compile(ctx).call('get_encSecKey')
song_data = {
'params': encText,
'encSecKey': encSecKey,
}
song_url = 'https://music.163.com/weapi/song/enhance/player/url/v1'
song_data = requests.post(song_url, params=params,headers=headers, data=song_data).json()['data'][0]
song_id=song_data['id']
m4a_url=song_data['url']
song={
'id':song_id,
'name':song_name,
'singer':singer,
'url':m4a_url
}
if m4a_url !=None:
song['url']=f"http://music.163.com/song/media/outer/url?id={song_id}"
return song

主界面的代码

import random
import requests
import execjs
import requests
import tkinter as tk
import os
import pygame as py
from pydub import AudioSegment
from pydub.playback import play
from playsound import playsound
from Likedsongs import I_liked_songs headers = {
'referer': 'https://music.163.com/',
'cookie':'_ga=GA1.1.18448714.1632904553; _ntes_nuid=9c0d0f8e61f12c731b6fb04a2d2e279b; _ga_C6TGHFPQ1H=GS1.1.1632904553.1.0.1632904615.0; NMTID=00Ozo1wJ1fXcNyV6kiHvvcOtt5D20kAAAF8ZQy0RA; WNMCID=wsqenr.1633782907500.01.0; WEVNSM=1.0.0; WM_TID=dI1C5xAE2t1AURUEBUI78DgnQaSfP1on; usertrack=ezq0J2LYu3quZhxDA9yVAg==; ntes_kaola_ad=1; _ntes_nnid=9c0d0f8e61f12c731b6fb04a2d2e279b,1664203664905; __snaker__id=FcswSyk2djPmoVxA; YD00000558929251%3AWM_TID=S6hdsgMkCj1BRAQUQELVSiqMIXGKybbE; _9755xjdesxxd_=32; hb_MA-93D5-9AD06EA4329A_source=www.baidu.com; __root_domain_v=.163.com; _qddaz=QD.351866958934376; WM_NI=0muVkpfNdOBVCkJVaAa%2FRcJak77OdnGHxOZhxcKgWNuswIp1NId%2BMR28EuoKp4V4WTfqCac3%2BW61WiioRfKkvvm5HMsdYH5Ww6122FHIXTAS5yBcz2CvHtsFIWN8vBYGZHo%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6eea8e14489eea984f664f6bc8bb3d45a968f9b87c85287bac0d4b85b8a9ae5ccb52af0fea7c3b92af4b3bbb7ea7ca692acb0c15e81b586b7e44ba3f19e84c96ba9e9f9b0e7668598b8b0d964bcbd8588d646b7adb9aaf33b8e97acccd05af2e88b96ee41b4ec9ad5d660a6af8d82e239e989fad2d663abb19e87ca61b6aaa3d6cb47b1bc97a9b85db5eaffd3b14e8c9798b5c459f7a78e84f93a81aa8895f24e8b8982d9f54a9b9996a9ee37e2a3; gdxidpyhxdE=%5CSQfxqPLswGhHQkWaeqziJH113SBu%2B87SD%2ByEUsco%5CIL%2FpCYi8dfNwN6prCjgxD%2FL9uUnPAMaH9m7RItN7P%2F%5CjhdJ6s5yM54QznWjYDgDAabyvfiVtLb616m59%2F7REbBvqN9SxyrKjPI1NsEWpWy2YbmI%2B%5CqP%2B7Eecb7lsWE8lZ%5CQp%5Cu%3A1667012947397; YD00000558929251%3AWM_NI=d9l9PqWZ04W0cPm6nuaQkN2%2FR7Cix7xJrv6G8x8OxLYm2e73LzLf0hRTEzf5I6PbSYQ124M%2FDcE%2FKyU%2BYuM6qHPfogH1L%2FQcCHVWyHIHtWlqpmKBauFngIYmTLFIr9xNZXY%3D; YD00000558929251%3AWM_NIKE=9ca17ae2e6ffcda170e2e6eed9c84f889cafbae2259bb48aa7d15b839b8ab1d54783ef988fc953a38bae99c92af0fea7c3b92aa8e7a4dad37b958600d5d63ca190a3d7ed7fa38fa5afb12592e98d8afb3dbc96be97b54dfca8f8b0fb489bb3fe86b63990a68487b364928c8b9be53f8beaa083d25393effed5d02588bd8bd0ca7397f59796d03eb398a087ee6d8cef84d0d46981989ab8fc448b98bcb8ef7bb4b385a3e47f86b2a9aadc6798948aaaf133bc9296b9dc37e2a3; __csrf=880738687515b74fb700788c52270b8b; MUSIC_U=6acc1a5bb7fe3625dc22db7370d5570bbb40d86bd42b29f60c049e3db3398c4f993166e004087dd326a0f72a48558f6c6c17c85bdd7a8046672c525893c48e2b37ecc291c0801a2ad4dbf082a8813684; _iuqxldmzr_=32; playerid=98979907; JSESSIONID-WYYY=ReeUtuIMo5N4sNZQWIvASEdPBWwXp2Xvf3zGHnwm%5Csz2EAMOePH1qxiuJHyUZxErrcvSSntMzKc%2Fs88lzv7JPqtpvzftMTx6%2Fo4sTy4GvfiBPzdPomqXI%5CwQ%5C%5CbC0AGrR2zxyJFFiBH9Z3H0j8Hh2%2BOszJSxZO13fDuqukPQrigm1NzR%3A1667034584884',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
params = {
'csrf_token': 'c08dc13fbcff3a4a9285ed4250812a22',
}
ctx=open('Python/实战项目/爬虫网易云播放器/网易云.js','r').read() song_list=[] # 个人喜爱歌单
def get_like_list():
lab=tk.Label(root,text="猜你喜欢",font=('kaiti',16))
lab.grid(row=2,column=0,columnspan=4)
song_list=random.sample(I_liked_songs,10)
show(song_list) # 搜索歌单
def get_song_list():
query=var.get()
list_encText=execjs.compile(ctx).call('get_list_encText',query)
list_encSecKey=execjs.compile(ctx).call('get_list_encSecKey')
list_data={
'params': list_encText,
'encSecKey': list_encSecKey,
}
search_url='https://music.163.com/weapi/cloudsearch/get/web'
songs= requests.post(search_url, params=params,headers=headers, data=list_data).json()['result']['songs']
for i,song in enumerate(songs):
song_name=song['name']
id=song['id']
singer=song['ar'][0]['name']
song=get_song(id,song_name,singer)
print(song)
song_list.append(song)
if i==9:
break
lab=tk.Label(root,text="以下是搜索结果",font=('kaiti',16))
lab.grid(row=2,column=0,columnspan=4)
show(song_list) # 获取歌曲
def get_song(id,song_name,singer):
encText=execjs.compile(ctx).call('get_encText',id)
encSecKey=execjs.compile(ctx).call('get_encSecKey')
song_data = {
'params': encText,
'encSecKey': encSecKey,
}
song_url = 'https://music.163.com/weapi/song/enhance/player/url/v1'
song_data = requests.post(song_url, params=params,headers=headers, data=song_data).json()['data'][0]
song_id=song_data['id']
m4a_url=song_data['url']
song={
'id':song_id,
'name':song_name,
'singer':singer,
'url':m4a_url
}
if m4a_url:
song['url']=f"http://music.163.com/song/media/outer/url?id={song_id}"
return song # 显示搜索结果
def show(song_list):
lab=tk.Label(root,width=10,text="歌曲ID",font=('heiti',12))
lab.grid(row=3,column=0)
lab=tk.Label(root,width=25,text="歌名",font=('heiti',12))
lab.grid(row=3,column=1)
lab=tk.Label(root,width=15,text="歌手",font=('heiti',12))
lab.grid(row=3,column=2)
btn=tk.Button(root,width=10,text="刷新列表",font=('heiti',12),command=get_like_list)
btn.grid(row=3,column=3)
for i,song in enumerate(song_list):
lab=tk.Label(root,width=10,text=song['id'],font=('songti',12))
lab.grid(row=4+i,column=0)
lab=tk.Label(root,width=25,text=song['name'],anchor='w',font=('songti',12))
lab.grid(row=4+i,column=1,sticky='w')
lab=tk.Label(root,width=15,text=song['singer'],anchor='w',font=('songti',12))
lab.grid(row=4+i,column=2,sticky='w')
if song['url'] is None:
btn=tk.Button(root,width=10,text="VIP尊享",font=('songti',12))
else:
btn=tk.Button(root,width=10,text="播放",font=('songti',12),command=lambda x=song:play_song(x))
btn.grid(row=4+i,column=3) # 播放歌曲
def play_song(song):
url=song['url']
name=song['name']
id=song['id']
music_path=f'D:/56号妖精仓库/square/Python/实战项目/爬虫网易云播放器/{name}_{id}.mp3'
sound=requests.get(url).content
with open(music_path,'wb') as f:
f.write(sound) ex = tk.Toplevel()
ex.geometry("240x30+660+260")
ex.title(name) def delete_explain():
py.mixer.quit()
os.remove(music_path)
ex.destroy() btn1=tk.Button(ex,width=10,text="继续",command=py.mixer.music.unpause)
btn1.grid(row=0,column=0)
btn2=tk.Button(ex,width=10,text="暂停",command=py.mixer.music.pause)
btn2.grid(row=0,column=1)
btn3=tk.Button(ex,width=10,text="结束",command=delete_explain)
btn3.grid(row=0,column=2)
ex.protocol('WM_DELETE_WINDOW',delete_explain) py.mixer.init()
py.mixer.music.load(music_path)
py.mixer.music.play(-1, 0) root=tk.Tk()
root.title("网易云音乐播放器")
root.iconphoto(True, tk.PhotoImage(file='Python/实战项目/爬虫网易云播放器/163.png')) var=tk.StringVar()
var.set('')
lab=tk.Label(root,width=40,text=" 欢迎使用网易云播放器!请输入歌曲/歌手: ",font=('songti',12))
lab.grid(row=0,column=0,columnspan=2)
ent=tk.Entry(root,width=10,textvariable=var,font=('kaiti',14))
ent.grid(row=0,column=2)
btn=tk.Button(root,width=10,text="搜索音乐",font=('heiti',10),command=get_song_list)
btn.grid(row=0,column=3) get_like_list() l=tk.Label(root,text="***",font=('songti',10))
l.grid(row=1,column=0,columnspan=4)
root.mainloop()

js扣扣扣

window=this;
const CryptoJS = require('crypto-js'); function RSAKeyPair(a, b, c) {
this.e = biFromHex(a),
this.d = biFromHex(b),
this.m = biFromHex(c),
this.chunkSize = 2 * biHighIndex(this.m),
this.radix = 16,
this.barrett = new BarrettMu(this.m)
}
function twoDigit(a) {
return (10 > a ? "0" : "") + String(a)
}
function encryptedString(a, b) {
for (var f, g, h, i, j, k, l, c = new Array, d = b.length, e = 0; d > e; )
c[e] = b.charCodeAt(e),
e++;
for (; 0 != c.length % a.chunkSize; )
c[e++] = 0;
for (f = c.length,
g = "",
e = 0; f > e; e += a.chunkSize) {
for (j = new BigInt,
h = 0,
i = e; i < e + a.chunkSize; ++h)
j.digits[h] = c[i++],
j.digits[h] += c[i++] << 8;
k = a.barrett.powMod(j, a.e),
l = 16 == a.radix ? biToHex(k) : biToString(k, a.radix),
g += l + " "
}
return g.substring(0, g.length - 1)
}
function decryptedString(a, b) {
var e, f, g, h, c = b.split(" "), d = "";
for (e = 0; e < c.length; ++e)
for (h = 16 == a.radix ? biFromHex(c[e]) : biFromString(c[e], a.radix),
g = a.barrett.powMod(h, a.d),
f = 0; f <= biHighIndex(g); ++f)
d += String.fromCharCode(255 & g.digits[f], g.digits[f] >> 8);
return 0 == d.charCodeAt(d.length - 1) && (d = d.substring(0, d.length - 1)),
d
}
function setMaxDigits(a) {
maxDigits = a,
ZERO_ARRAY = new Array(maxDigits);
for (var b = 0; b < ZERO_ARRAY.length; b++)
ZERO_ARRAY[b] = 0;
bigZero = new BigInt,
bigOne = new BigInt,
bigOne.digits[0] = 1
}
function BigInt(a) {
this.digits = "boolean" == typeof a && 1 == a ? null : ZERO_ARRAY.slice(0),
this.isNeg = !1
}
function biFromDecimal(a) {
for (var d, e, f, b = "-" == a.charAt(0), c = b ? 1 : 0; c < a.length && "0" == a.charAt(c); )
++c;
if (c == a.length)
d = new BigInt;
else {
for (e = a.length - c,
f = e % dpl10,
0 == f && (f = dpl10),
d = biFromNumber(Number(a.substr(c, f))),
c += f; c < a.length; )
d = biAdd(biMultiply(d, lr10), biFromNumber(Number(a.substr(c, dpl10)))),
c += dpl10;
d.isNeg = b
}
return d
}
function biCopy(a) {
var b = new BigInt(!0);
return b.digits = a.digits.slice(0),
b.isNeg = a.isNeg,
b
}
function biFromNumber(a) {
var c, b = new BigInt;
for (b.isNeg = 0 > a,
a = Math.abs(a),
c = 0; a > 0; )
b.digits[c++] = a & maxDigitVal,
a >>= biRadixBits;
return b
}
function reverseStr(a) {
var c, b = "";
for (c = a.length - 1; c > -1; --c)
b += a.charAt(c);
return b
}
function biToString(a, b) {
var d, e, c = new BigInt;
for (c.digits[0] = b,
d = biDivideModulo(a, c),
e = hexatrigesimalToChar[d[1].digits[0]]; 1 == biCompare(d[0], bigZero); )
d = biDivideModulo(d[0], c),
digit = d[1].digits[0],
e += hexatrigesimalToChar[d[1].digits[0]];
return (a.isNeg ? "-" : "") + reverseStr(e)
}
function biToDecimal(a) {
var c, d, b = new BigInt;
for (b.digits[0] = 10,
c = biDivideModulo(a, b),
d = String(c[1].digits[0]); 1 == biCompare(c[0], bigZero); )
c = biDivideModulo(c[0], b),
d += String(c[1].digits[0]);
return (a.isNeg ? "-" : "") + reverseStr(d)
}
function digitToHex(a) {
var b = 15
, c = "";
for (i = 0; 4 > i; ++i)
c += hexToChar[a & b],
a >>>= 4;
return reverseStr(c)
}
function biToHex(a) {
var d, b = "";
for (biHighIndex(a),
d = biHighIndex(a); d > -1; --d)
b += digitToHex(a.digits[d]);
return b
}
function charToHex(a) {
var h, b = 48, c = b + 9, d = 97, e = d + 25, f = 65, g = 90;
return h = a >= b && c >= a ? a - b : a >= f && g >= a ? 10 + a - f : a >= d && e >= a ? 10 + a - d : 0
}
function hexToDigit(a) {
var d, b = 0, c = Math.min(a.length, 4);
for (d = 0; c > d; ++d)
b <<= 4,
b |= charToHex(a.charCodeAt(d));
return b
}
function biFromHex(a) {
var d, e, b = new BigInt, c = a.length;
for (d = c,
e = 0; d > 0; d -= 4,
++e)
b.digits[e] = hexToDigit(a.substr(Math.max(d - 4, 0), Math.min(d, 4)));
return b
}
function biFromString(a, b) {
var g, h, i, j, c = "-" == a.charAt(0), d = c ? 1 : 0, e = new BigInt, f = new BigInt;
for (f.digits[0] = 1,
g = a.length - 1; g >= d; g--)
h = a.charCodeAt(g),
i = charToHex(h),
j = biMultiplyDigit(f, i),
e = biAdd(e, j),
f = biMultiplyDigit(f, b);
return e.isNeg = c,
e
}
function biDump(a) {
return (a.isNeg ? "-" : "") + a.digits.join(" ")
}
function biAdd(a, b) {
var c, d, e, f;
if (a.isNeg != b.isNeg)
b.isNeg = !b.isNeg,
c = biSubtract(a, b),
b.isNeg = !b.isNeg;
else {
for (c = new BigInt,
d = 0,
f = 0; f < a.digits.length; ++f)
e = a.digits[f] + b.digits[f] + d,
c.digits[f] = 65535 & e,
d = Number(e >= biRadix);
c.isNeg = a.isNeg
}
return c
}
function biSubtract(a, b) {
var c, d, e, f;
if (a.isNeg != b.isNeg)
b.isNeg = !b.isNeg,
c = biAdd(a, b),
b.isNeg = !b.isNeg;
else {
for (c = new BigInt,
e = 0,
f = 0; f < a.digits.length; ++f)
d = a.digits[f] - b.digits[f] + e,
c.digits[f] = 65535 & d,
c.digits[f] < 0 && (c.digits[f] += biRadix),
e = 0 - Number(0 > d);
if (-1 == e) {
for (e = 0,
f = 0; f < a.digits.length; ++f)
d = 0 - c.digits[f] + e,
c.digits[f] = 65535 & d,
c.digits[f] < 0 && (c.digits[f] += biRadix),
e = 0 - Number(0 > d);
c.isNeg = !a.isNeg
} else
c.isNeg = a.isNeg
}
return c
}
function biHighIndex(a) {
for (var b = a.digits.length - 1; b > 0 && 0 == a.digits[b]; )
--b;
return b
}
function biNumBits(a) {
var e, b = biHighIndex(a), c = a.digits[b], d = (b + 1) * bitsPerDigit;
for (e = d; e > d - bitsPerDigit && 0 == (32768 & c); --e)
c <<= 1;
return e
}
function biMultiply(a, b) {
var d, h, i, k, c = new BigInt, e = biHighIndex(a), f = biHighIndex(b);
for (k = 0; f >= k; ++k) {
for (d = 0,
i = k,
j = 0; e >= j; ++j,
++i)
h = c.digits[i] + a.digits[j] * b.digits[k] + d,
c.digits[i] = h & maxDigitVal,
d = h >>> biRadixBits;
c.digits[k + e + 1] = d
}
return c.isNeg = a.isNeg != b.isNeg,
c
}
function biMultiplyDigit(a, b) {
var c, d, e, f;
for (result = new BigInt,
c = biHighIndex(a),
d = 0,
f = 0; c >= f; ++f)
e = result.digits[f] + a.digits[f] * b + d,
result.digits[f] = e & maxDigitVal,
d = e >>> biRadixBits;
return result.digits[1 + c] = d,
result
}
function arrayCopy(a, b, c, d, e) {
var g, h, f = Math.min(b + e, a.length);
for (g = b,
h = d; f > g; ++g,
++h)
c[h] = a[g]
}
function biShiftLeft(a, b) {
var e, f, g, h, c = Math.floor(b / bitsPerDigit), d = new BigInt;
for (arrayCopy(a.digits, 0, d.digits, c, d.digits.length - c),
e = b % bitsPerDigit,
f = bitsPerDigit - e,
g = d.digits.length - 1,
h = g - 1; g > 0; --g,
--h)
d.digits[g] = d.digits[g] << e & maxDigitVal | (d.digits[h] & highBitMasks[e]) >>> f;
return d.digits[0] = d.digits[g] << e & maxDigitVal,
d.isNeg = a.isNeg,
d
}
function biShiftRight(a, b) {
var e, f, g, h, c = Math.floor(b / bitsPerDigit), d = new BigInt;
for (arrayCopy(a.digits, c, d.digits, 0, a.digits.length - c),
e = b % bitsPerDigit,
f = bitsPerDigit - e,
g = 0,
h = g + 1; g < d.digits.length - 1; ++g,
++h)
d.digits[g] = d.digits[g] >>> e | (d.digits[h] & lowBitMasks[e]) << f;
return d.digits[d.digits.length - 1] >>>= e,
d.isNeg = a.isNeg,
d
}
function biMultiplyByRadixPower(a, b) {
var c = new BigInt;
return arrayCopy(a.digits, 0, c.digits, b, c.digits.length - b),
c
}
function biDivideByRadixPower(a, b) {
var c = new BigInt;
return arrayCopy(a.digits, b, c.digits, 0, c.digits.length - b),
c
}
function biModuloByRadixPower(a, b) {
var c = new BigInt;
return arrayCopy(a.digits, 0, c.digits, 0, b),
c
}
function biCompare(a, b) {
if (a.isNeg != b.isNeg)
return 1 - 2 * Number(a.isNeg);
for (var c = a.digits.length - 1; c >= 0; --c)
if (a.digits[c] != b.digits[c])
return a.isNeg ? 1 - 2 * Number(a.digits[c] > b.digits[c]) : 1 - 2 * Number(a.digits[c] < b.digits[c]);
return 0
}
function biDivideModulo(a, b) {
var f, g, h, i, j, k, l, m, n, o, p, q, r, s, c = biNumBits(a), d = biNumBits(b), e = b.isNeg;
if (d > c)
return a.isNeg ? (f = biCopy(bigOne),
f.isNeg = !b.isNeg,
a.isNeg = !1,
b.isNeg = !1,
g = biSubtract(b, a),
a.isNeg = !0,
b.isNeg = e) : (f = new BigInt,
g = biCopy(a)),
new Array(f,g);
for (f = new BigInt,
g = a,
h = Math.ceil(d / bitsPerDigit) - 1,
i = 0; b.digits[h] < biHalfRadix; )
b = biShiftLeft(b, 1),
++i,
++d,
h = Math.ceil(d / bitsPerDigit) - 1;
for (g = biShiftLeft(g, i),
c += i,
j = Math.ceil(c / bitsPerDigit) - 1,
k = biMultiplyByRadixPower(b, j - h); -1 != biCompare(g, k); )
++f.digits[j - h],
g = biSubtract(g, k);
for (l = j; l > h; --l) {
for (m = l >= g.digits.length ? 0 : g.digits[l],
n = l - 1 >= g.digits.length ? 0 : g.digits[l - 1],
o = l - 2 >= g.digits.length ? 0 : g.digits[l - 2],
p = h >= b.digits.length ? 0 : b.digits[h],
q = h - 1 >= b.digits.length ? 0 : b.digits[h - 1],
f.digits[l - h - 1] = m == p ? maxDigitVal : Math.floor((m * biRadix + n) / p),
r = f.digits[l - h - 1] * (p * biRadix + q),
s = m * biRadixSquared + (n * biRadix + o); r > s; )
--f.digits[l - h - 1],
r = f.digits[l - h - 1] * (p * biRadix | q),
s = m * biRadix * biRadix + (n * biRadix + o);
k = biMultiplyByRadixPower(b, l - h - 1),
g = biSubtract(g, biMultiplyDigit(k, f.digits[l - h - 1])),
g.isNeg && (g = biAdd(g, k),
--f.digits[l - h - 1])
}
return g = biShiftRight(g, i),
f.isNeg = a.isNeg != e,
a.isNeg && (f = e ? biAdd(f, bigOne) : biSubtract(f, bigOne),
b = biShiftRight(b, i),
g = biSubtract(b, g)),
0 == g.digits[0] && 0 == biHighIndex(g) && (g.isNeg = !1),
new Array(f,g)
}
function biDivide(a, b) {
return biDivideModulo(a, b)[0]
}
function biModulo(a, b) {
return biDivideModulo(a, b)[1]
}
function biMultiplyMod(a, b, c) {
return biModulo(biMultiply(a, b), c)
}
function biPow(a, b) {
for (var c = bigOne, d = a; ; ) {
if (0 != (1 & b) && (c = biMultiply(c, d)),
b >>= 1,
0 == b)
break;
d = biMultiply(d, d)
}
return c
}
function biPowMod(a, b, c) {
for (var d = bigOne, e = a, f = b; ; ) {
if (0 != (1 & f.digits[0]) && (d = biMultiplyMod(d, e, c)),
f = biShiftRight(f, 1),
0 == f.digits[0] && 0 == biHighIndex(f))
break;
e = biMultiplyMod(e, e, c)
}
return d
}
function BarrettMu(a) {
this.modulus = biCopy(a),
this.k = biHighIndex(this.modulus) + 1;
var b = new BigInt;
b.digits[2 * this.k] = 1,
this.mu = biDivide(b, this.modulus),
this.bkplus1 = new BigInt,
this.bkplus1.digits[this.k + 1] = 1,
this.modulo = BarrettMu_modulo,
this.multiplyMod = BarrettMu_multiplyMod,
this.powMod = BarrettMu_powMod
}
function BarrettMu_modulo(a) {
var i, b = biDivideByRadixPower(a, this.k - 1), c = biMultiply(b, this.mu), d = biDivideByRadixPower(c, this.k + 1), e = biModuloByRadixPower(a, this.k + 1), f = biMultiply(d, this.modulus), g = biModuloByRadixPower(f, this.k + 1), h = biSubtract(e, g);
for (h.isNeg && (h = biAdd(h, this.bkplus1)),
i = biCompare(h, this.modulus) >= 0; i; )
h = biSubtract(h, this.modulus),
i = biCompare(h, this.modulus) >= 0;
return h
}
function BarrettMu_multiplyMod(a, b) {
var c = biMultiply(a, b);
return this.modulo(c)
}
function BarrettMu_powMod(a, b) {
var d, e, c = new BigInt;
for (c.digits[0] = 1,
d = a,
e = b; ; ) {
if (0 != (1 & e.digits[0]) && (c = this.multiplyMod(c, d)),
e = biShiftRight(e, 1),
0 == e.digits[0] && 0 == biHighIndex(e))
break;
d = this.multiplyMod(d, d)
}
return c
}
var maxDigits, ZERO_ARRAY, bigZero, bigOne, dpl10, lr10, hexatrigesimalToChar, hexToChar, highBitMasks, lowBitMasks, biRadixBase = 2, biRadixBits = 16, bitsPerDigit = biRadixBits, biRadix = 65536, biHalfRadix = biRadix >>> 1, biRadixSquared = biRadix * biRadix, maxDigitVal = biRadix - 1, maxInteger = 9999999999999998;
setMaxDigits(20),
dpl10 = 15,
lr10 = biFromNumber(1e15),
hexatrigesimalToChar = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"),
hexToChar = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"),
highBitMasks = new Array(0,32768,49152,57344,61440,63488,64512,65024,65280,65408,65472,65504,65520,65528,65532,65534,65535),
lowBitMasks = new Array(0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535); function a(a) {
var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";
for (d = 0; a > d; d += 1)
e = Math.random() * b.length,
e = Math.floor(e),
c += b.charAt(e);
return c
}
function b(a, b) {
var c = CryptoJS.enc.Utf8.parse(b)
, d = CryptoJS.enc.Utf8.parse("0102030405060708")
, e = CryptoJS.enc.Utf8.parse(a)
, f = CryptoJS.AES.encrypt(e, c, {
iv: d,
mode: CryptoJS.mode.CBC
});
return f.toString()
}
function c(a, b, c) {
var d, e;
return setMaxDigits(131),
d = new RSAKeyPair(b,"",c),
e = encryptedString(d, a)
}
function d(d, e, f, g) {
var h = {}
, i = a(16);
return h.encText = b(d, g),
h.encText = b(h.encText, i),
h.encSecKey = c(i, e, f),
h
}
function e(a, b, d, e) {
var f = {};
return f.encText = c(a + e, b, d),
f
}
window.asrsea = d,
window.ecnonasr = e pa_e='010001'
pa_f='00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7'
pa_g='0CoJUm6Qyw8W8jud' pa_i='vIh9NqhrNQYqF3rD'
get_like_encText=function(){
pa_d='{"id":"7053185814","offset":"0","total":"true","limit":"1000","n":"1000","csrf_token":"880738687515b74fb700788c52270b8b"}'
h_encText=b(pa_d, pa_g)
like_encText = b(h_encText,pa_i); return like_encText;
}
console.log(get_like_encText())
get_like_encSecKey=function(){
pd_d='{"moduleName":"preload","csrf_token":"880738687515b74fb700788c52270b8b"}'
like_encSecKey = c(pa_i,pa_e,pa_f); return like_encSecKey;
}
console.log(get_like_encSecKey()) pa_i="etalO0jto4hGfdDj"
get_list_encText=function(s){
pa_d='{"hlpretag":"<span class=\\"s-fc7\\">","hlposttag":"</span>","id":"65766","s":"'+s+'","type":"1","offset":"0","total":"true","limit":"30","csrf_token":"c08dc13fbcff3a4a9285ed4250812a22"}'
h_encText=b(pa_d, pa_g)
list_encText = b(h_encText,pa_i); return list_encText;
} get_list_encSecKey=function(){
pd_d='{"logs":"[{\\"action\\":\\"mobile_monitor\\",\\"json\\":{\\"meta._ver\\":2,\\"meta._dataName\\":\\"pip_lyric_monitor\\",\\"action\\":\\"render\\",\\"userAgent\\":\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.52\\",\\"chromeVersion\\":106,\\"resourceId\\":5253801,\\"resourceType\\":\\"song\\"}}]","csrf_token":"c08dc13fbcff3a4a9285ed4250812a22"}'
list_encSecKey = c(pa_i,pa_e,pa_f); return list_encSecKey;
} get_encText=function(id){
pa_d='{"ids":"['+id+']","level":"standard","encodeType":"aac","csrf_token":"c08dc13fbcff3a4a9285ed4250812a22"}'
h_encText=b(pa_d, pa_g)
encText = b(h_encText,pa_i); return encText;
} get_encSecKey=function(){
pd_d='{"logs":"[{\\"action\\":\\"mobile_monitor\\",\\"json\\":{\\"meta._ver\\":2,\\"meta._dataName\\":\\"pip_lyric_monitor\\",\\"action\\":\\"render\\",\\"userAgent\\":\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.52\\",\\"chromeVersion\\":106,\\"resourceId\\":5253801,\\"resourceType\\":\\"song\\"}}]","csrf_token":"c08dc13fbcff3a4a9285ed4250812a22"}'
encSecKey = c(pa_i,pa_e,pa_f); return encSecKey;
}

实现效果

利用爬虫js逆向破解网易云制作播放器的更多相关文章

  1. C#网易云音乐播放器

    效果图: •实现教程: 打开VStudio 2015 #新建一个windows界面工程然后按我的界面来添加控件代码如下 namespace NeteaseMuisc { partial class M ...

  2. 爬虫综合大作业——网易云音乐爬虫 & 数据可视化分析

    作业要求来自于https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075 爬虫综合大作业 选择一个热点或者你感兴趣的主题. 选择爬取的对象 ...

  3. python3爬虫应用--爬取网易云音乐(两种办法)

    一.需求 好久没有碰爬虫了,竟不知道从何入手.偶然看到一篇知乎的评论(https://www.zhihu.com/question/20799742/answer/99491808),一时兴起就也照葫 ...

  4. python学习之爬虫(一) ——————爬取网易云歌词

    接触python也有一段时间了,一提到python,可能大部分pythoner都会想到爬虫,没错,今天我们的话题就是爬虫!作为一个小学生,关于爬虫其实本人也只是略懂,怀着"Done is b ...

  5. Python爬虫入门教程 21-100 网易云课堂课程数据抓取

    写在前面 今天咱们抓取一下网易云课堂的课程数据,这个网站的数据量并不是很大,我们只需要使用requests就可以快速的抓取到这部分数据了. 你第一步要做的是打开全部课程的地址,找出爬虫规律, 地址如下 ...

  6. Python的几个爬虫代码整理(网易云、微信、淘宝、今日头条)

    整理了一下网易云歌曲评论抓取.分析好友信息抓取.淘宝宝贝抓取.今日头条美图抓取的一些代码 抓取网易云评论 进入歌曲界面: http://music.163.com/#/song?id=45318582 ...

  7. 这个爬虫JS逆向加密任务,你还不来试试?逆向入门级,适合一定爬虫基础的人

    友情提示:在博客园更新比较慢,有兴趣的关注知识图谱与大数据公众号吧.这次选择苏宁易购登录密码加密,如能调试出来代表你具备了一定的JS逆向能力,初学者建议跟着内容调试一波,尽量独自将JS代码抠出来,实在 ...

  8. 原生js制作播放器

    以前 就想做一个播放器,一直没狠下心来,今天终于狠下心来,把这个做出来了(因为有点无聊) 做这个播放器  也百度了一下, 你叫我做,我肯定做不出来, 就算用jquery  我也做不出来. 以前也用过a ...

  9. 用H5和js写一个移动端自定义播放器

    前言 由于html5自带的播放器样式不怎么好看,大多数人都是自己写一个来满足业务需求.这一次的需求如下: 1.不要上一曲下一曲 2.有进度条和播放暂停按钮 3.有时间显示 demo实现功能 1.进度条 ...

  10. JS写一个漂亮的音乐播放器

    先放上效果图: 正如图中所展示的播放器那样,我们用HTML+CSS+JS将这个效果实现出来. HTML页面布局 <div class="music"> <div ...

随机推荐

  1. java8接口新特性:default、static

    java8之前接口中的方法默认类型都是public abstract,也就是抽象方法,具体实现都交给实现类.而java8对接口功能做了增强,增加了default方法和static方法,也就是说从jav ...

  2. 中国科学院计算所:从 NFS 到 JuiceFS,大模型训推平台存储演进之路

    中科院计算所在建设大模型训练与推理平台过程中,模型规模与数据集数量呈爆发式增长.最初采用简单的裸机存储方案,但很快面临数据孤岛.重复冗余.管理混乱和资源利用不均等问题,于是升级到了 NFS 系统.然而 ...

  3. B1009 说反话

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小 ...

  4. AI工程师跑路了-怎么办?

    ​ 从雪山飞狐到百年孤独 百无聊赖中翻开了又一本金庸的小说<雪山飞狐>,江湖侠气,快意恩仇瞬间跃然纸上,唯有最后胡斐那一刀才让读者回到了现实.之前刚读了<明朝那些事儿>,最后重 ...

  5. React Native开发鸿蒙Next---react-native-cameraroll在ArkTS下的接入报错

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  6. Django中的文件操作

    一.静态文件的加载 1.使用步骤 ①.在工程目录下创建static目录,创建css/js/images等目录,并添加相关资源 ②.在settings.py中配置STATICFILES_DIRS STA ...

  7. 从困境到突破,EasyMR 集群迁移助力大数据底座信创国产化

    在大数据时代,企业对数据的依赖程度越来越高.然而,随着业务的不断发展和技术的快速迭代,大数据平台的集群迁移已成为企业数据中台发展途中无法回避的需求.在大数据平台发展初期,国内数据中台市场主要以国外开源 ...

  8. 无监控,不运维!深入浅出介绍ChengYing监控设计和使用

    监控系统俗称「第三只眼」,几乎是我们每天都会打交道的系统,它也一直是IT系统中的核心组成部分,负责问题的发现以及辅助性的定位. ChengYing作为一站式全自动化全生命周期大数据平台运维管家,自然也 ...

  9. dij费用流/Johnson Reweighting

    dij费用流/Johnson Reweighting 我们一般敲的费用流都是套\(SPFA\)的\(dinic\),这是因为会有负边权,\(dij\)做不了,考虑能不能动点手脚使得我们的边权变成正的 ...

  10. Docker网络使用说明

    一.Docker网络访问 Docker网卡 查看Docker桥接网卡docker0 ifconfig 二.Docker随机端口映射 随机端口映射举例 #-d 表示在后台运行容器并输出容器ID #-P ...