提交 b1548e17 编写于 作者: H hjdhnx

搞了一堆没用的东西

上级 6a95b43f
<?php
error_reporting(0);
if (!file_exists('Cache/qq')) {mkdir('Cache/qq', 0777, true);}
$url = $_GET["url"];
echo json_encode(VQQ::parse($url));
class VQQ
{
public static function parse($url) {
$content = file_get_contents($url);
preg_match('#"drm":(0|1|2),#iU',$content,$isdrm);
preg_match('#<title>(.*?)<\/title>#iU',$content,$name);
$drm = $isdrm[1];
preg_match('#cid=(\w+)&vid=(\w+)["|&]#',$content,$id);
$cid = empty($id[1])? 0 :$id[1];
$vid = $id[2];
if (!$vid) {
preg_match('#&vid=(\w+)["|&]#',$content,$id);
$vid = $id[1];
$cid = '';
}
$ep_file= 'Cache/qq/'.$vid.'.m3u8';
if (!file_exists($ep_file)||filemtime($ep_file)+10800 < time()){
if ($drm != 0) { //是否付费
$cookie = file_get_contents("qqck.txt");;//这里写你的cookie
return self::h5($vid,$cookie);
} else{
$cookie = file_get_contents("qqck.txt");;//这里写你的cookie
return self::h5($vid,$cookie);
}
}else{
$vurl = 'http://'.$_SERVER['HTTP_HOST'].'/'.$ep_file;
$videoinfo['code'] = 200;
$videoinfo['success'] = 1;
$videoinfo['url'] = $vurl;
$videoinfo['type'] = 'hls';
$videoinfo['player'] = "dplayer";
$videoinfo['cache'] = "1";
}
return $videoinfo;
}
public static function h5($vid,$cookie){
$api = 'https://h5vv6.video.qq.com/getinfo?encver=2&defn=fhd&platform=10801&otype=ojson&sdtfrom=v4138&appVer=7&dtype=3&vid='.$vid.'&newnettype=4';
$body = self::gh5($api,$cookie);
$data = json_decode($body,true);
$vi = $data["vl"]["vi"][0];
$ui = $vi["ul"]["ui"];
$url = $ui[3]["url"];
$hls = $ui[3]['hls']['pt'];
$vurl = $url.$hls;
if($vurl ==''||$vurl ==null){ return ['code' => '404','url' => 'null']; }
$data = file_get_contents($vurl);
$lines = preg_split('/[\r\n]+/s', $data);//按行进行分割字符串
$durations = array();
$urls = array();
$bool = true;
$targetduration = "";
foreach ($lines as $value) {
if(!empty(strstr($value,"#EXT-X-TARGETDURATION:"))){//多码率
$targetduration = $value;
}else if(!empty(strstr($value,"#EXTINF:"))){//单码率
$durations[count($durations)] = $value;
$bool = true;
}else if(!empty($value)&&substr($value,0,1)!="#"){
if($bool){
$urls[count($urls)] = $value;
}
}
}
$url = preg_replace('/(http:\/\/(.*?)\/(.*?)\/(.*?)\/)/i','https://omts.tc.qq.com/',$url);
$m3u8 = "#EXTM3U\n#EXT-X-VERSION:3\n";
$m3u8 .= empty($targetduration)?"#EXT-X-TARGETDURATION:7200\n" : $targetduration."\n";
foreach ($durations as $key => $value) {
$m3u8 .= $value."\n".$url.$urls[$key]."\n";
}
$m3u8 = str_replace('&ver=4','',$m3u8);
$m3u8 .="#EXT-X-ENDLIST";
$ep_file= 'Cache/qq/'.$vid.'.m3u8';
file_put_contents($ep_file, $m3u8);
$vvurl = 'http://'.$_SERVER['HTTP_HOST'].'/'.$ep_file;
$videoinfo['success'] = 1;
$videoinfo['code'] = 200;
$videoinfo['url'] = $vvurl;
$videoinfo['type'] = 'hls';
$videoinfo['player'] = "dplayer";
return $videoinfo;
}
public static function gh5($url,$cookie){
$header = array(
'Host: h5vv6.video.qq.com',
'Accept: */*',
'Content-Type: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Connection: keep-alive',
'Cookie: '.$cookie,
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36',
'Referer: https://servicewechat.com/wxa75efa648b60994b/69/page-frame.html',
'Accept-Language: zh-CN,zh;q=0.9',
);
$curl = curl_init();
//初始化 curl
curl_setopt($curl, CURLOPT_URL, $url);
//要访问网页 URL 地址
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//设定是否输出页面内容
curl_setopt($curl, CURLOPT_REFERER,$url) ;
//伪装网页来源 URL
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
//当Location:重定向时,自动设置header中的Referer:信息
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
//数据传输的最大允许时间
curl_setopt($curl, CURLOPT_HEADER, 0);
//不返回 header 部分
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//返回字符串,而非直接输出到屏幕上
curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1);
//跟踪爬取重定向页面
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, '0');
//不检查 SSL 证书来源
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, '0');
//不检查 证书中 SSL 加密算法是否存在
curl_setopt($curl, CURLOPT_ENCODING, '');
//解决网页乱码问题
//curl_setopt($curl, CURLOPT_COOKIE, '');
//从字符串传参来提交cookies
$data = curl_exec($curl);
//运行 curl,请求网页并返回结果
curl_close($curl);
//关闭 curl
return $data;
}
}
?>
var document = {
URL: "https://v.qq.com/x/cover/bzfkv5se8qaqel2/j002024w2wg.html",
referrer: ""
}
var window = {
document: document,
navigator: {
userAgent: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
appCodeName: "Mozilla",
appName: "Netscape",
platform: "Win32"
},
};
function w() {
Fa = new Int8Array(Ea),
Ha = new Int16Array(Ea),
Ja = new Int32Array(Ea),
Ga = new Uint8Array(Ea),
Ia = new Uint16Array(Ea),
Ka = new Uint32Array(Ea),
La = new Float32Array(Ea),
Ma = new Float64Array(Ea);
}
function d(a) {
var b = Oa;
return Oa = Oa + a + 15 & -16,
b
}
function e(a, b) {
b || (b = Da);
var c = a = Math.ceil(a / b) * b;
return c
}
function i(a, b, c, d, e){
function f(a) {
return "string" === b ? k(a) : "boolean" === b ? Boolean(a) : a
}
var i = wasmobject.exports._getckey //h(a)
, j = []
, l = 0;
// if (g("array" !== b, 'Return type should not be "array".'),
// d)
if (d)
for (var m = 0; m < d.length; m++) {
var n = $a[c[m]];
// n ? (0 === l && (l = Ub()),
n ? (0 === l && (l = Ub()),
j[m] = n(d[m])) : j[m] = d[m]
}
var o = i.apply(null, j);
return o = f(o),
0 !== l && Tb(l),
o
}
function k(a, b) {
if (0 === b || !a)
return "";
for (var c, d = 0, e = 0; ; ) {
// if (g(a + e < db),
if (
c = Ga[a + e >> 0],
d |= c,
0 == c && !b)
break;
if (e++,
b && e == b)
break
}
b || (b = e);
var f = "";
if (d < 128) {
for (var h, i = 1024; b > 0; )
h = String.fromCharCode.apply(String, Ga.subarray(a, a + Math.min(b, i))),
f = f ? f + h : h,
a += i,
b -= i;
return f
}
return m(a)
}
function o(a, b, c) {
return n(a, Ga, b, c)
}
function n(a, b, c, d) {
if (!(d > 0))
return 0;
for (var e = c, f = c + d - 1, g = 0; g < a.length; ++g) {
var h = a.charCodeAt(g);
if (h >= 55296 && h <= 57343) {
var i = a.charCodeAt(++g);
h = 65536 + ((1023 & h) << 10) | 1023 & i
}
if (h <= 127) {
if (c >= f)
break;
b[c++] = h
} else if (h <= 2047) {
if (c + 1 >= f)
break;
b[c++] = 192 | h >> 6,
b[c++] = 128 | 63 & h
} else if (h <= 65535) {
if (c + 2 >= f)
break;
b[c++] = 224 | h >> 12,
b[c++] = 128 | h >> 6 & 63,
b[c++] = 128 | 63 & h
} else if (h <= 2097151) {
if (c + 3 >= f)
break;
b[c++] = 240 | h >> 18,
b[c++] = 128 | h >> 12 & 63,
b[c++] = 128 | h >> 6 & 63,
b[c++] = 128 | 63 & h
} else if (h <= 67108863) {
if (c + 4 >= f)
break;
b[c++] = 248 | h >> 24,
b[c++] = 128 | h >> 18 & 63,
b[c++] = 128 | h >> 12 & 63,
b[c++] = 128 | h >> 6 & 63,
b[c++] = 128 | 63 & h
} else {
if (c + 5 >= f)
break;
b[c++] = 252 | h >> 30,
b[c++] = 128 | h >> 24 & 63,
b[c++] = 128 | h >> 18 & 63,
b[c++] = 128 | h >> 12 & 63,
b[c++] = 128 | h >> 6 & 63,
b[c++] = 128 | 63 & h
}
}
return b[c] = 0,
c - e
}
function Tb(){
return wasmobject.exports.stackRestore.apply(null, arguments)
}
function Ub(){
return wasmobject.exports.stackSave.apply(null, arguments)
}
function Sb(){
return wasmobject.exports.stackAlloc.apply(null, arguments)
}
function Pb(){
return wasmobject.exports._malloc.apply(null, arguments)
}
function P() { // function 20( )
function p(a) {
for (var b = 0, c = 0; c < a.length; ++c) {
var d = a.charCodeAt(c);
d >= 55296 && d <= 57343 && (d = 65536 + ((1023 & d) << 10) | 1023 & a.charCodeAt(++c)),
d <= 127 ? ++b : b += d <= 2047 ? 2 : d <= 65535 ? 3 : d <= 2097151 ? 4 : d <= 67108863 ? 5 : 6
}
return b
}
function a(a) {
return a ? a.length > 48 ? a.substr(0, 48) : a : ""
}
function b() {
var b = document.URL
, c = window.navigator.userAgent.toLowerCase()
, d = "";
document.referrer.length > 0 && (d = document.referrer);
try {
0 == d.length && opener.location.href.length > 0 && (d = opener.location.href)
} catch (e) {}
var f = window.navigator.appCodeName
, g = window.navigator.appName
, h = window.navigator.platform;
return b = a(b),
d = a(d),
c = a(c),
b + "|" + c + "|" + d + "|" + f + "|" + g + "|" + h
}
var c = b()
, d = p(c) + 1
, e = Pb(d);
return o(c, e, d + 1),
e
}
function C() {
return db
}
var $a = {
string: function(a) {
var b = 0;
if (null !== a && void 0 !== a && 0 !== a) {
var c = (a.length << 2) + 1;
b = Sb(c),
o(a, b, c)
}
return b
},
array: function(a) {
var b = Sb(a.length);
return K(a, b),
b
},
};
//////////////////////////////// init global var
var Da = 16;
var Ea, Fa, Ga, Ha, Ia, Ja, Ka, La, Ma, Na, Oa, Pa, Qa, Ra, Sa, Ta, Ua, Va = {
"f64-rem": function(a, b) {
return a % b
},
"debugger": function() {}
}, Wa = (new Array(0), 1024) ;
Na = Oa = Qa = Ra = Sa = Ta = Ua = 0,
Pa = !1;
var cb = 5242880 , db = 16777216, ab = 65536;
var wasmMemory = new WebAssembly.Memory({
initial: db / ab,
maximum: db / ab
});
Ea = wasmMemory.buffer;
w();
Ja[0] = 1668509029;
Ha[1] = 25459;
var eb = []
, fb = []
, gb = []
, hb = []
, ib = !1
, jb = !1;
Na = Wa,
Oa = Na + 6928,
fb.push();
Oa += 16;
Ua = d(4),
Qa = Ra = e(Oa),
Sa = Qa + cb,
Ta = e(Sa),
Ja[Ua >> 2] = Ta,
Pa = !0;
////////////////////////////////// wasm env ///////////////////////////////////////
var fun_ = function(){};
wasm_env = {
abort: fun_,
assert: fun_,
enlargeMemory: fun_,
getTotalMemory: C,
abortOnCannotGrowMemory: fun_,
abortStackOverflow: fun_,
nullFunc_ii: fun_,
nullFunc_iiii: fun_,
nullFunc_v: fun_,
nullFunc_vi: fun_,
nullFunc_viiii: fun_,
nullFunc_viiiii: fun_,
nullFunc_viiiiii: fun_,
invoke_ii: fun_,
invoke_iiii: fun_,
invoke_v: fun_,
invoke_vi: fun_,
invoke_viiii: fun_,
invoke_viiiii: fun_,
invoke_viiiiii: fun_,
__ZSt18uncaught_exceptionv: fun_,
___cxa_find_matching_catch: fun_,
___gxx_personality_v0: fun_,
___lock: fun_,
___resumeException: fun_,
___setErrNo: fun_,
___syscall140: fun_,
___syscall146: fun_,
___syscall54: fun_,
___syscall6: fun_,
___unlock: fun_,
_abort: fun_,
_emscripten_memcpy_big: fun_,
_get_unicode_str: P, // function 20( ) => P( )
flush_NO_FILESYSTEM: fun_,
DYNAMICTOP_PTR: 7968, //Ua
tempDoublePtr: 7952, //rb
STACKTOP: 7984, //Ra
STACK_MAX: 5250864, //Sa
memoryBase: 1024,
tableBase: 0,
memory: wasmMemory,
table: new WebAssembly.Table({
initial: 99,
maximum: 99,
element: "anyfunc"
})
};
var importObject = {
'env': wasm_env,
'asm2wasm': {
"f64-rem": function(a, b) {
return a % b
},
"debugger": function() {}
},
'global': {
NaN: NaN,
Infinity: 1 / 0
},
"global.Math": Math,
// "parent": {};
};
///////////////////////////////// load wasm ///////////////////////////////////////
const fs = require('fs');
var wasm_data = fs.readFileSync('./js/tx-ckey.wasm')
var buffer = new Uint8Array(wasm_data);
var wasmobject = new WebAssembly.Instance(new WebAssembly.Module(buffer), importObject);
// function setnavigator(URL, referrer, userAgent, appCodeName, appName, platform){
// navigator = {
// userAgent: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
// appCodeName: "Mozilla",
// appName: "Netscape",
// platform: "Win32"
// };
// window.navigator = navigator;
//
// }
function setdocument(URL, referrer){
document.URL = URL;
document.referrer = referrer;
}
// encryptVer = "9.1"
function getckey(platform, appVer, vid, empty_str="", guid, tm){
var _args = [platform, appVer, vid, empty_str="", guid, tm];
var c = ['number', 'string', 'string', 'string', 'string', 'number'];
return i('getckey', 'string', c, _args, undefined)
}
// playerID, guid
function createGUID(a) {
a = a || 32;
for (var b = "", c = 1; c <= a; c++) {
var d = Math.floor(16 * Math.random()).toString(16);
b += d
}
return b
}
\ No newline at end of file
import requests
import re
import json
class AcFun:
def __init__(self, url):
self.url = url
self.headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬"
}
def start(self):
res = requests.get(self.url, headers=self.headers)
json_info = json.loads(re.findall("window.pageInfo =(.*?);", res.text)[0].split("=", 1)[-1].strip())
print(json_info)
return json_info
if __name__ == '__main__':
AcFun().start()
import execjs
import requests
import re
import time
class DouYu:
def __init__(self, room_id):
self.room_id = room_id
self.int_time = int(time.time())
self.did = "3966acse00dd10qer895bdca00031601"
def get_ub98484234(self):
res = requests.get(f"https://www.douyu.com/{self.room_id}").text
ub98484234 = re.findall("(function ub98484234.*?})var", res)[0]
var = re.findall("var\sv\s=\s(.*?)[.]slice", ub98484234)[0]
var1 = re.findall(f"(var {var}=.*?);", res)[0]
return f"var CryptoJS = require('crypto-js');{var1};{ub98484234}"
def get_sign(self):
js = execjs.compile(self.get_ub98484234())
res = js.call("ub98484234", self.room_id, self.did, self.int_time)
return res.split("sign=")[-1]
def get_params(self):
return {
'v': f'2201{time.strftime("%Y%m%d", time.localtime())}',
'did': self.did,
'tt': self.int_time,
'sign': self.get_sign(),
'cdn': "tct-h5",
'rate': '0',
'ver': 'Douyu_221041305',
'iar': '0',
'ive': '1',
'hevc': '0',
'fa': '1',
}
def start(self):
res = requests.post(f"https://www.douyu.com/lapi/live/getH5Play/{self.room_id}", data=self.get_params()).json()
print(res)
if __name__ == '__main__':
DouYu().start()
The MIT License (MIT)
Copyright © 2021 jym66
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
import base64
import requests
import uuid
import time
class MGTV:
def __init__(self, url):
self.url = url
def get_video_id(self):
return self.url.split("/", 5)[-1].split(".")[0]
def get_pm2(self):
did = "e6e13014-393b-43e7-b6be-2323e4960939"
suuid = uuid.uuid4()
pno = "1030"
# tk2 = self.encode_tk2(did, pno)
params = {
"did": did,
"suuid": suuid,
"cxid": "",
"tk2": self.encode_tk2(did, pno),
"type": "pch5",
"video_id": self.get_video_id(),
"_support": "10000000",
"auth_mode": "1",
"src": "",
"abroad": "",
}
res = requests.get("https://pcweb.api.mgtv.com/player/video", params=params).json()
return res['data']['atc']['pm2']
def encode_tk2(self, did="e6e13014-393b-43e7-b6be-2323e4960939", pno="1030"):
tk2 = bytes(f"did={did}|pno={pno}|ver=0.3.0301|clit={int(time.time())}".encode())
tk2 = base64.b64encode(tk2).decode().replace("/\+/g", "_").replace("/\//g", "~").replace("/=/g", "-")
tk2 = list(' '.join(tk2).split())
tk2.reverse()
return "".join(tk2)
def start(self):
params = {
"_support": "10000000",
"tk2": self.encode_tk2(),
"pm2": self.get_pm2(),
"video_id": self.get_video_id(),
"type": "pch5",
"auth_mode": "1",
"src": "",
"abroad": "",
}
res = requests.get("https://pcweb.api.mgtv.com/player/getSource", params=params).json()
print(res)
return res
if __name__ == '__main__':
MGTV().start()
<div align=center>
<img src="https://img13.360buyimg.com/ddimg/jfs/t1/189154/38/14327/8587/60f9919fE32787d11/a5edcec999f67853.png" width="400px"/>
</div>
<h1 align="center">
Dlink_Parse
</h1>
<p align="center">
一个解析下载各大视频平台的工具集🧰
</p>
<p align="center">
<a href="https://github.com/jym66/Dlink_Parse/blob/master/LICENSE"><img src="https://img.shields.io/github/license/jym66/Dlink_Parse?style=flat" alt="License"></a>
<a><img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg"/></a>
<a><img src="https://img.shields.io/badge/Powered%20by-Xcode-blue"/></a>
</p>
### 如果对你有帮助欢迎 STAR 🌟
### 本项目只是解密出视频下载地址的算法签名,不包括下载视频及视频解密(不保证长期有效)😂
#### 部分代码从js中截取,依赖 [nodejs](https://nodejs.org/) 运行🛠️
####
### 🎬视频网站
| 名称 | 说明 | 是否需要nodejs | 源代码 |
| ---- | ---- | ---- | ---- |
| [腾讯](https://v.qq.com/) | [cKey算法来自这里](https://github.com/ZSAIm/iqiyi-parser/blob/master/js/tencent.js) | ✅ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/tencent.py) |
| [优酷](https://www.youku.com/) |记得带上cookie | ❌ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/youku.py) |
| [哔哩哔哩](https://www.bilibili.com/) |可以用ffmpeg合并音视频 | ❌ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/bilibili.py) |
| [抖音](https://www.iesdouyin.com/) | 需要无水印可以把 链接 playwm 换成play | ❌ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/douyin.py) |
| [抖音直播](https://www.iesdouyin.com/) | | ❌ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/douyin_live.py) |
| [芒果TV](https://www.mgtv.com) | | ❌ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/MGTV.py) |
| [爱奇艺](https://www.iqiyi.com/) | [算法来自这里](https://github.com/ZSAIm/iqiyi-parser/blob/master/js/iqiyi_2019-08.js) | ✅ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/iqiyi.py) |
| [PP视频](https://v.pptv.com/) | 需要 CryptoJS | ✅ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/pptv.py) |
| [咪咕视频](https://www.miguvideo.com/) | | ❌ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/migu.py) |
| [AcFun](https://www.acfun.cn/) | | ❌ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/AcFun.py) |
| [腾讯课堂](https://ke.qq.com/) |需要带上Cookie | ❌ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/ke_qq.py) |
| [好看视频](https://haokan.baidu.com/) | | ❌ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/haokan.py) |
| [西瓜视频](https://www.ixigua.com/) | 视频链接和音频链接用base64解码| ✅ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/xigua.py) |
### 🎵音乐网站
| 名称 | 说明 | 是否需要nodejs | 源代码 |
| ---- | ---- | ---- | ---- |
| [QQ音乐](https://y.qq.com/) | | ✅ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/qqmusic.py) |
| [网易云音乐](https://music.163.com/) | | ❌ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/music163.py) |
| [酷我音乐](http://www.kuwo.cn/) | 算法来自App| ❌ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/kuwoMusic.py) |
| [酷狗音乐](https://www.kugou.com/) | | ❌ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/kugou.py) |
### 🎙️直播网站
| 名称 | 说明 | 是否需要nodejs | 源代码 |
| ---- | ---- | ---- | ---- |
| [斗鱼](https://www.douyu.com/) | | ✅ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/DouYu.py) |
| [虎牙](https://www.huya.com/) | | ❌ | [SourceCode](https://github.com/jym66/Dlink_Parse/blob/master/huya.py) |
本软件用于任何其他非法目的,作者将不为您承担任何责任。
import requests
import re
class Bili:
def __init__(self, url):
self.url = url
self.headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬"
}
def start(self):
res = requests.get(self.url)
result = re.findall("window.__playinfo__=(.*?)</script>", res.text)
print(result[0])
return result[0]
if __name__ == '__main__':
Bili().start()
import requests
class DouYin:
def __init__(self, url):
self.url = url
self.headers = {
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/89.0.4389.114 Safari/537.36 "
}
def get_mid(self):
res = requests.get(self.url, headers=self.headers)
return res.url.split("/", 6)[-2]
def start(self):
url = f"https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={self.get_mid()}"
res = requests.get(url, headers=self.headers)
print(res.json())
return res.json()
if __name__ == '__main__':
DouYin().start()
import requests
import re
class douYinLive:
def __init__(self, url):
self.url = url
self.headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬"
}
def parse(self, html):
return re.findall('flv_pull_url":(.*?})', html)[0]
def start(self):
res = requests.get(self.url, headers=self.headers)
print(self.parse(res.text))
if __name__ == '__main__':
douYinLive().start()
import requests
import re
import json
class haokan:
def __init__(self, url):
self.url = url
self.headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬",
}
def getJson(self, text):
res = re.findall("PRELOADED_STATE__\s=\s(.*?);", text)[0]
res = json.loads(res)
return res
def start(self):
res = requests.get(self.url, headers=self.headers).text
return self.getJson(res)
if __name__ == '__main__':
haokan().start()
import requests
import re
from base64 import b64decode
import json
class huya:
def __init__(self, url):
self.url = url
def decodeStream(self, stream):
return b64decode(stream).decode()
def start(self):
res = requests.get(self.url).text
hyplay = re.findall('hyPlayerConfig\s=\s(.*?});', res, re.S)
stream = json.loads(self.decodeStream(eval(hyplay[0])['stream']).replace("amp;", ""))
print(stream)
return stream
if __name__ == '__main__':
huya().start()
import requests
import execjs
import re
import time
from urllib.parse import quote, unquote
class iqiyi:
def __init__(self, url):
self.url = url
self.headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬"
}
self.authkey = self.load_auth_js()
self.cmd5js = self.load_cmd5x_js()
def load_auth_js(self):
return execjs.compile(open("./js/iqiyi.js").read())
def load_cmd5x_js(self):
return execjs.compile(open("./js/cmd5x.js").read())
def get_tvid(self):
res = requests.get(self.url, headers=self.headers)
# print(res.text)
tvid = re.findall("tvid=(.*?)&aid", res.text)[0]
vid = re.findall('"vid":"(.*?)",', res.text)[0]
# print(tvid)
return tvid, vid
def join_params(self):
tvid, vid = self.get_tvid()
_time = int(time.time() * 1000)
params = {
"tvid": tvid,
"bid": "300",
"vid": vid,
"src": "01080031010000000000",
"vt": "0",
"rs": "1",
"uid": "",
"ori": "pcw",
"ps": "1",
"k_uid": "1bf80ab6e72de7ab4a42f4db91bd530b",
"pt": "0",
"d": "0",
"s": "",
"lid": "",
"cf": "",
"ct": "",
"authKey": self.authkey.call("auth", self.authkey.call("auth", "") + f"{_time}{tvid}"),
"k_tag": "1",
"ost": "undefined",
"ppt": "undefined",
"dfp": "a16da00a581aa149139fe169e3914993e4ff9cb705a50e3a41fc7927f988f2cb3e",
"locale": "zh_cn",
"prio": quote('{"ff":"f4v","code":2}'),
"pck": "",
"k_err_retries": "0",
"up": "",
"qd_v": "2",
"tm": _time,
"qdy": "a",
"qds": "0",
"k_ft1": "706436220846084",
"k_ft4": "36283952406532",
"k_ft5": "1",
"bop": quote(
'{"version":"10.0","dfp":"a16da00a581aa149139fe169e3914993e4ff9cb705a50e3a41fc7927f988f2cb3e"}'),
"ut": "0"
}
temp = "/dash?"
for k, v in params.items():
temp += k + "=" + str(v) + "&"
vf = self.cmd5js.call("parse_vf", temp[:-1])
params['vf'] = vf
# requests 会再次进行url编码,所以一开始怎么弄都不对!!!!这里要解码!!
params["bop"] = unquote(params["bop"])
params["prio"] = unquote(params["prio"])
return params
def start(self):
params = self.join_params()
res = requests.get("https://cache.video.iqiyi.com/dash", params=params, headers=self.headers)
print(res.text)
if __name__ == '__main__':
iqiyi().start()
此差异已折叠。
var document = {
URL: "https://v.qq.com/x/cover/bzfkv5se8qaqel2/j002024w2wg.html",
referrer: ""
}
var window = {
document: document,
navigator: {
userAgent: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
appCodeName: "Mozilla",
appName: "Netscape",
platform: "Win32"
},
};
function w() {
Fa = new Int8Array(Ea),
Ha = new Int16Array(Ea),
Ja = new Int32Array(Ea),
Ga = new Uint8Array(Ea),
Ia = new Uint16Array(Ea),
Ka = new Uint32Array(Ea),
La = new Float32Array(Ea),
Ma = new Float64Array(Ea);
}
function d(a) {
var b = Oa;
return Oa = Oa + a + 15 & -16,
b
}
function e(a, b) {
b || (b = Da);
var c = a = Math.ceil(a / b) * b;
return c
}
function i(a, b, c, d, e){
function f(a) {
return "string" === b ? k(a) : "boolean" === b ? Boolean(a) : a
}
var i = wasmobject.exports._getckey //h(a)
, j = []
, l = 0;
// if (g("array" !== b, 'Return type should not be "array".'),
// d)
if (d)
for (var m = 0; m < d.length; m++) {
var n = $a[c[m]];
// n ? (0 === l && (l = Ub()),
n ? (0 === l && (l = Ub()),
j[m] = n(d[m])) : j[m] = d[m]
}
var o = i.apply(null, j);
return o = f(o),
0 !== l && Tb(l),
o
}
function k(a, b) {
if (0 === b || !a)
return "";
for (var c, d = 0, e = 0; ; ) {
// if (g(a + e < db),
if (
c = Ga[a + e >> 0],
d |= c,
0 == c && !b)
break;
if (e++,
b && e == b)
break
}
b || (b = e);
var f = "";
if (d < 128) {
for (var h, i = 1024; b > 0; )
h = String.fromCharCode.apply(String, Ga.subarray(a, a + Math.min(b, i))),
f = f ? f + h : h,
a += i,
b -= i;
return f
}
return m(a)
}
function o(a, b, c) {
return n(a, Ga, b, c)
}
function n(a, b, c, d) {
if (!(d > 0))
return 0;
for (var e = c, f = c + d - 1, g = 0; g < a.length; ++g) {
var h = a.charCodeAt(g);
if (h >= 55296 && h <= 57343) {
var i = a.charCodeAt(++g);
h = 65536 + ((1023 & h) << 10) | 1023 & i
}
if (h <= 127) {
if (c >= f)
break;
b[c++] = h
} else if (h <= 2047) {
if (c + 1 >= f)
break;
b[c++] = 192 | h >> 6,
b[c++] = 128 | 63 & h
} else if (h <= 65535) {
if (c + 2 >= f)
break;
b[c++] = 224 | h >> 12,
b[c++] = 128 | h >> 6 & 63,
b[c++] = 128 | 63 & h
} else if (h <= 2097151) {
if (c + 3 >= f)
break;
b[c++] = 240 | h >> 18,
b[c++] = 128 | h >> 12 & 63,
b[c++] = 128 | h >> 6 & 63,
b[c++] = 128 | 63 & h
} else if (h <= 67108863) {
if (c + 4 >= f)
break;
b[c++] = 248 | h >> 24,
b[c++] = 128 | h >> 18 & 63,
b[c++] = 128 | h >> 12 & 63,
b[c++] = 128 | h >> 6 & 63,
b[c++] = 128 | 63 & h
} else {
if (c + 5 >= f)
break;
b[c++] = 252 | h >> 30,
b[c++] = 128 | h >> 24 & 63,
b[c++] = 128 | h >> 18 & 63,
b[c++] = 128 | h >> 12 & 63,
b[c++] = 128 | h >> 6 & 63,
b[c++] = 128 | 63 & h
}
}
return b[c] = 0,
c - e
}
function Tb(){
return wasmobject.exports.stackRestore.apply(null, arguments)
}
function Ub(){
return wasmobject.exports.stackSave.apply(null, arguments)
}
function Sb(){
return wasmobject.exports.stackAlloc.apply(null, arguments)
}
function Pb(){
return wasmobject.exports._malloc.apply(null, arguments)
}
function P() { // function 20( )
function p(a) {
for (var b = 0, c = 0; c < a.length; ++c) {
var d = a.charCodeAt(c);
d >= 55296 && d <= 57343 && (d = 65536 + ((1023 & d) << 10) | 1023 & a.charCodeAt(++c)),
d <= 127 ? ++b : b += d <= 2047 ? 2 : d <= 65535 ? 3 : d <= 2097151 ? 4 : d <= 67108863 ? 5 : 6
}
return b
}
function a(a) {
return a ? a.length > 48 ? a.substr(0, 48) : a : ""
}
function b() {
var b = document.URL
, c = window.navigator.userAgent.toLowerCase()
, d = "";
document.referrer.length > 0 && (d = document.referrer);
try {
0 == d.length && opener.location.href.length > 0 && (d = opener.location.href)
} catch (e) {}
var f = window.navigator.appCodeName
, g = window.navigator.appName
, h = window.navigator.platform;
return b = a(b),
d = a(d),
c = a(c),
b + "|" + c + "|" + d + "|" + f + "|" + g + "|" + h
}
var c = b()
, d = p(c) + 1
, e = Pb(d);
return o(c, e, d + 1),
e
}
function C() {
return db
}
var $a = {
string: function(a) {
var b = 0;
if (null !== a && void 0 !== a && 0 !== a) {
var c = (a.length << 2) + 1;
b = Sb(c),
o(a, b, c)
}
return b
},
array: function(a) {
var b = Sb(a.length);
return K(a, b),
b
},
};
//////////////////////////////// init global var
var Da = 16;
var Ea, Fa, Ga, Ha, Ia, Ja, Ka, La, Ma, Na, Oa, Pa, Qa, Ra, Sa, Ta, Ua, Va = {
"f64-rem": function(a, b) {
return a % b
},
"debugger": function() {}
}, Wa = (new Array(0), 1024) ;
Na = Oa = Qa = Ra = Sa = Ta = Ua = 0,
Pa = !1;
var cb = 5242880 , db = 16777216, ab = 65536;
var wasmMemory = new WebAssembly.Memory({
initial: db / ab,
maximum: db / ab
});
Ea = wasmMemory.buffer;
w();
Ja[0] = 1668509029;
Ha[1] = 25459;
var eb = []
, fb = []
, gb = []
, hb = []
, ib = !1
, jb = !1;
Na = Wa,
Oa = Na + 6928,
fb.push();
Oa += 16;
Ua = d(4),
Qa = Ra = e(Oa),
Sa = Qa + cb,
Ta = e(Sa),
Ja[Ua >> 2] = Ta,
Pa = !0;
////////////////////////////////// wasm env ///////////////////////////////////////
var fun_ = function(){};
wasm_env = {
abort: fun_,
assert: fun_,
enlargeMemory: fun_,
getTotalMemory: C,
abortOnCannotGrowMemory: fun_,
abortStackOverflow: fun_,
nullFunc_ii: fun_,
nullFunc_iiii: fun_,
nullFunc_v: fun_,
nullFunc_vi: fun_,
nullFunc_viiii: fun_,
nullFunc_viiiii: fun_,
nullFunc_viiiiii: fun_,
invoke_ii: fun_,
invoke_iiii: fun_,
invoke_v: fun_,
invoke_vi: fun_,
invoke_viiii: fun_,
invoke_viiiii: fun_,
invoke_viiiiii: fun_,
__ZSt18uncaught_exceptionv: fun_,
___cxa_find_matching_catch: fun_,
___gxx_personality_v0: fun_,
___lock: fun_,
___resumeException: fun_,
___setErrNo: fun_,
___syscall140: fun_,
___syscall146: fun_,
___syscall54: fun_,
___syscall6: fun_,
___unlock: fun_,
_abort: fun_,
_emscripten_memcpy_big: fun_,
_get_unicode_str: P, // function 20( ) => P( )
flush_NO_FILESYSTEM: fun_,
DYNAMICTOP_PTR: 7968, //Ua
tempDoublePtr: 7952, //rb
STACKTOP: 7984, //Ra
STACK_MAX: 5250864, //Sa
memoryBase: 1024,
tableBase: 0,
memory: wasmMemory,
table: new WebAssembly.Table({
initial: 99,
maximum: 99,
element: "anyfunc"
})
};
var importObject = {
'env': wasm_env,
'asm2wasm': {
"f64-rem": function(a, b) {
return a % b
},
"debugger": function() {}
},
'global': {
NaN: NaN,
Infinity: 1 / 0
},
"global.Math": Math,
// "parent": {};
};
///////////////////////////////// load wasm ///////////////////////////////////////
const fs = require('fs');
var wasm_data = fs.readFileSync('./js/tx-ckey.wasm')
var buffer = new Uint8Array(wasm_data);
var wasmobject = new WebAssembly.Instance(new WebAssembly.Module(buffer), importObject);
// function setnavigator(URL, referrer, userAgent, appCodeName, appName, platform){
// navigator = {
// userAgent: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36",
// appCodeName: "Mozilla",
// appName: "Netscape",
// platform: "Win32"
// };
// window.navigator = navigator;
//
// }
function setdocument(URL, referrer){
document.URL = URL;
document.referrer = referrer;
}
// encryptVer = "9.1"
function getckey(platform, appVer, vid, empty_str="", guid, tm){
var _args = [platform, appVer, vid, empty_str="", guid, tm];
var c = ['number', 'string', 'string', 'string', 'string', 'number'];
return i('getckey', 'string', c, _args, undefined)
}
// playerID, guid
function createGUID(a) {
a = a || 32;
for (var b = "", c = 1; c <= a; c++) {
var d = Math.floor(16 * Math.random()).toString(16);
b += d
}
return b
}
\ No newline at end of file
function i(e, t, n, i, a, o, s) {
return r(t & n | ~t & i, e, t, a, o, s)
}
function a(e, t, n, i, a, o, s) {
return r(t & i | n & ~i, e, t, a, o, s)
}
function o(e, t, n, i, a, o, s) {
return r(t ^ n ^ i, e, t, a, o, s)
}
function r(e, t, n, r, i, a) {
return c(function(e, t) {
return e << t | e >>> 32 - t
}(c(c(t, e), c(r, a)), i), n)
}
function c(e, t) {
var n = (65535 & e) + (65535 & t);
return (e >> 16) + (t >> 16) + (n >> 16) << 16 | 65535 & n
}
function s(e, t, n, i, a, o, s) {
return r(n ^ (t | ~i), e, t, a, o, s)
}
function auth (e) {
return function(e) {
for (var t = "0123456789abcdef", n = "", r = 0; r < 4 * e.length; r++)
n += t.charAt(e[r >> 2] >> r % 4 * 8 + 4 & 15) + t.charAt(e[r >> 2] >> r % 4 * 8 & 15);
return n
}(function(e, t) {
e[t >> 5] |= 128 << t % 32,
e[14 + (t + 64 >>> 9 << 4)] = t;
for (var n = 1732584193, r = -271733879, u = -1732584194, d = 271733878, l = 0; l < e.length; l += 16) {
var f = n
, h = r
, p = u
, _ = d;
n = i(n, r, u, d, e[l + 0], 7, -680876936),
d = i(d, n, r, u, e[l + 1], 12, -389564586),
u = i(u, d, n, r, e[l + 2], 17, 606105819),
r = i(r, u, d, n, e[l + 3], 22, -1044525330),
n = i(n, r, u, d, e[l + 4], 7, -176418897),
d = i(d, n, r, u, e[l + 5], 12, 1200080426),
u = i(u, d, n, r, e[l + 6], 17, -1473231341),
r = i(r, u, d, n, e[l + 7], 22, -45705983),
n = i(n, r, u, d, e[l + 8], 7, 1770035416),
d = i(d, n, r, u, e[l + 9], 12, -1958414417),
u = i(u, d, n, r, e[l + 10], 17, -42063),
r = i(r, u, d, n, e[l + 11], 22, -1990404162),
n = i(n, r, u, d, e[l + 12], 7, 1804603682),
d = i(d, n, r, u, e[l + 13], 12, -40341101),
u = i(u, d, n, r, e[l + 14], 17, -1502002290),
n = a(n, r = i(r, u, d, n, e[l + 15], 22, 1236535329), u, d, e[l + 1], 5, -165796510),
d = a(d, n, r, u, e[l + 6], 9, -1069501632),
u = a(u, d, n, r, e[l + 11], 14, 643717713),
r = a(r, u, d, n, e[l + 0], 20, -373897302),
n = a(n, r, u, d, e[l + 5], 5, -701558691),
d = a(d, n, r, u, e[l + 10], 9, 38016083),
u = a(u, d, n, r, e[l + 15], 14, -660478335),
r = a(r, u, d, n, e[l + 4], 20, -405537848),
n = a(n, r, u, d, e[l + 9], 5, 568446438),
d = a(d, n, r, u, e[l + 14], 9, -1019803690),
u = a(u, d, n, r, e[l + 3], 14, -187363961),
r = a(r, u, d, n, e[l + 8], 20, 1163531501),
n = a(n, r, u, d, e[l + 13], 5, -1444681467),
d = a(d, n, r, u, e[l + 2], 9, -51403784),
u = a(u, d, n, r, e[l + 7], 14, 1735328473),
n = o(n, r = a(r, u, d, n, e[l + 12], 20, -1926607734), u, d, e[l + 5], 4, -378558),
d = o(d, n, r, u, e[l + 8], 11, -2022574463),
u = o(u, d, n, r, e[l + 11], 16, 1839030562),
r = o(r, u, d, n, e[l + 14], 23, -35309556),
n = o(n, r, u, d, e[l + 1], 4, -1530992060),
d = o(d, n, r, u, e[l + 4], 11, 1272893353),
u = o(u, d, n, r, e[l + 7], 16, -155497632),
r = o(r, u, d, n, e[l + 10], 23, -1094730640),
n = o(n, r, u, d, e[l + 13], 4, 681279174),
d = o(d, n, r, u, e[l + 0], 11, -358537222),
u = o(u, d, n, r, e[l + 3], 16, -722521979),
r = o(r, u, d, n, e[l + 6], 23, 76029189),
n = o(n, r, u, d, e[l + 9], 4, -640364487),
d = o(d, n, r, u, e[l + 12], 11, -421815835),
u = o(u, d, n, r, e[l + 15], 16, 530742520),
n = s(n, r = o(r, u, d, n, e[l + 2], 23, -995338651), u, d, e[l + 0], 6, -198630844),
d = s(d, n, r, u, e[l + 7], 10, 1126891415),
u = s(u, d, n, r, e[l + 14], 15, -1416354905),
r = s(r, u, d, n, e[l + 5], 21, -57434055),
n = s(n, r, u, d, e[l + 12], 6, 1700485571),
d = s(d, n, r, u, e[l + 3], 10, -1894986606),
u = s(u, d, n, r, e[l + 10], 15, -1051523),
r = s(r, u, d, n, e[l + 1], 21, -2054922799),
n = s(n, r, u, d, e[l + 8], 6, 1873313359),
d = s(d, n, r, u, e[l + 15], 10, -30611744),
u = s(u, d, n, r, e[l + 6], 15, -1560198380),
r = s(r, u, d, n, e[l + 13], 21, 1309151649),
n = s(n, r, u, d, e[l + 4], 6, -145523070),
d = s(d, n, r, u, e[l + 11], 10, -1120210379),
u = s(u, d, n, r, e[l + 2], 15, 718787259),
r = s(r, u, d, n, e[l + 9], 21, -343485551),
n = c(n, f),
r = c(r, h),
u = c(u, p),
d = c(d, _)
}
return Array(n, r, u, d)
}(function(e) {
for (var t = Array(), n = 0; n < 8 * e.length; n += 8)
t[n >> 5] |= (255 & e.charCodeAt(n / 8)) << n % 32;
return t
}(e), 8 * e.length))
}
\ No newline at end of file
var CryptoJS = require("crypto-js");
// const msg = "type=mhpptv&appId=pptv.web.h5&appPlt=web&appVer=1.0.4&channel=sn.cultural&sdkVer=1.5.0&cid=23764751&allowFt=0,1,2,3&rf=0&ppi=302c393939&o=www.google.com&ahl_ver=1&ahl_random=56512723466a41555e402b327439736b&ahl_signa=9d6e29f58acde65886d26d364cb0c57145e57fcd8f430fdd3abea0795477937a&vvId=a88a33b5-5644-9435-6e95-b5f34b20c3d6&version=1&https=true&streamFormat=3"
// key = CryptoJS.enc.Hex.parse("3B4E7F4B13980C603A2936C5C3C304C85B823D8A581AA18A"); // key
// iv = CryptoJS.enc.Hex.parse("8C92E8813637F416");
function encrypted (msg, key, iv) {
return CryptoJS.TripleDES.encrypt(msg, CryptoJS.enc.Hex.parse(key), {
iv: CryptoJS.enc.Hex.parse(iv),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
}).toString();
}
function getRandomWithLen () {
for (var t = "", i = 0; i < 16; i++) {
var n = 93 * Math.random() + 33 >> 0;
t += String.fromCharCode(n)
}
return t
}
function toHexStr (e) {
for (var t = "", i = 0; i < e.length; i++)
t += e.charCodeAt(i).toString(16);
return t
}
// function getSignatureWithKey(e){
// var t = toHexStr(e);
// console.log(t)
// return stringify(t)
// }
// function stringify(e){
// for (var t = e.words, i = e.sigBytes, n = [], a = 0; a < i; a++) {
// var r = t[a >>> 2] >>> 24 - a % 4 * 8 & 255;
// n.push((r >>> 4).toString(16)),
// n.push((15 & r).toString(16))
// }
// return n.join("")
// }
// function parse(e){
// for (var t = e.length, i = [], n = 0; n < t; n += 2)
// i[n >>> 3] |= parseInt(e.substr(n, 2), 16) << 24 - n % 8 * 4;
// return new s.init(i,t / 2)
// }
function get3rdKeyRandom(){
var t = "mhpptv"
, i = getRandomWithLen()
, n = i;
i += t + "-1V8oo0Or1f047NaiMTxK123LMFuINTNeI";
var a = toHexStr(i);
return {
random_hex: encodeHex(n),
signature_hex: a
}
}
function encodeHex(e) {
for (var t = "", i = e.length, n = 0; n < i; ++n) {
var a = e.charCodeAt(n);
t += "0123456789abcdef"[a >> 4],
t += "0123456789abcdef"[15 & a]
}
return t
}
// const msg = "type=mhpptv&appId=pptv.web.h5&appPlt=web&appVer=1.0.4&channel=sn.cultural&sdkVer=1.5.0&cid=23764751&allowFt=0,1,2,3&rf=0&ppi=302c393939&o=www.google.com&ahl_ver=1&ahl_random=2c6944735c676e643244406266524a7c&ahl_signa=2c6944735c676e643244406266524a7c6d68707074762d3156386f6f304f7231663034374e61694d54784b3132334c4d4675494e544e6549&vvId=1ca862ac-d8eb-4ddd-86a3-daa958004eee&version=1&https=true&streamFormat=3"
// key = "3B4E7F4B13980C603A2936C5C3C304C85B823D8A581AA18A"
// iv = "8C92E8813637F416"
// console.log(encrypted(msg, key, iv).toString())
// console.log(get3rdKeyRandom())
\ No newline at end of file
function aa (n, t) {
"object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (n = n || self).getSecuritySign = t()
return t()
}
bb = function () {
"use strict";
var n = function() {
if ("undefined" != typeof self)
return self;
if ("undefined" != typeof window)
return window;
if ("undefined" != typeof global)
return global;
throw new Error("unable to locate global object")
}();
n.__sign_hash_20200305 = function(n) {
function l(n, t) {
var o = (65535 & n) + (65535 & t);
return (n >> 16) + (t >> 16) + (o >> 16) << 16 | 65535 & o
}
function r(n, t, o, e, u, p) {
return l((i = l(l(t, n), l(e, p))) << (r = u) | i >>> 32 - r, o);
var i, r
}
function g(n, t, o, e, u, p, i) {
return r(t & o | ~t & e, n, t, u, p, i)
}
function a(n, t, o, e, u, p, i) {
return r(t & e | o & ~e, n, t, u, p, i)
}
function s(n, t, o, e, u, p, i) {
return r(t ^ o ^ e, n, t, u, p, i)
}
function v(n, t, o, e, u, p, i) {
return r(o ^ (t | ~e), n, t, u, p, i)
}
function t(n) {
return function(n) {
var t, o = "";
for (t = 0; t < 32 * n.length; t += 8)
o += String.fromCharCode(n[t >> 5] >>> t % 32 & 255);
return o
}(function(n, t) {
n[t >> 5] |= 128 << t % 32,
n[14 + (t + 64 >>> 9 << 4)] = t;
var o, e, u, p, i, r = 1732584193, f = -271733879, h = -1732584194, c = 271733878;
for (o = 0; o < n.length; o += 16)
r = g(e = r, u = f, p = h, i = c, n[o], 7, -680876936),
c = g(c, r, f, h, n[o + 1], 12, -389564586),
h = g(h, c, r, f, n[o + 2], 17, 606105819),
f = g(f, h, c, r, n[o + 3], 22, -1044525330),
r = g(r, f, h, c, n[o + 4], 7, -176418897),
c = g(c, r, f, h, n[o + 5], 12, 1200080426),
h = g(h, c, r, f, n[o + 6], 17, -1473231341),
f = g(f, h, c, r, n[o + 7], 22, -45705983),
r = g(r, f, h, c, n[o + 8], 7, 1770035416),
c = g(c, r, f, h, n[o + 9], 12, -1958414417),
h = g(h, c, r, f, n[o + 10], 17, -42063),
f = g(f, h, c, r, n[o + 11], 22, -1990404162),
r = g(r, f, h, c, n[o + 12], 7, 1804603682),
c = g(c, r, f, h, n[o + 13], 12, -40341101),
h = g(h, c, r, f, n[o + 14], 17, -1502002290),
r = a(r, f = g(f, h, c, r, n[o + 15], 22, 1236535329), h, c, n[o + 1], 5, -165796510),
c = a(c, r, f, h, n[o + 6], 9, -1069501632),
h = a(h, c, r, f, n[o + 11], 14, 643717713),
f = a(f, h, c, r, n[o], 20, -373897302),
r = a(r, f, h, c, n[o + 5], 5, -701558691),
c = a(c, r, f, h, n[o + 10], 9, 38016083),
h = a(h, c, r, f, n[o + 15], 14, -660478335),
f = a(f, h, c, r, n[o + 4], 20, -405537848),
r = a(r, f, h, c, n[o + 9], 5, 568446438),
c = a(c, r, f, h, n[o + 14], 9, -1019803690),
h = a(h, c, r, f, n[o + 3], 14, -187363961),
f = a(f, h, c, r, n[o + 8], 20, 1163531501),
r = a(r, f, h, c, n[o + 13], 5, -1444681467),
c = a(c, r, f, h, n[o + 2], 9, -51403784),
h = a(h, c, r, f, n[o + 7], 14, 1735328473),
r = s(r, f = a(f, h, c, r, n[o + 12], 20, -1926607734), h, c, n[o + 5], 4, -378558),
c = s(c, r, f, h, n[o + 8], 11, -2022574463),
h = s(h, c, r, f, n[o + 11], 16, 1839030562),
f = s(f, h, c, r, n[o + 14], 23, -35309556),
r = s(r, f, h, c, n[o + 1], 4, -1530992060),
c = s(c, r, f, h, n[o + 4], 11, 1272893353),
h = s(h, c, r, f, n[o + 7], 16, -155497632),
f = s(f, h, c, r, n[o + 10], 23, -1094730640),
r = s(r, f, h, c, n[o + 13], 4, 681279174),
c = s(c, r, f, h, n[o], 11, -358537222),
h = s(h, c, r, f, n[o + 3], 16, -722521979),
f = s(f, h, c, r, n[o + 6], 23, 76029189),
r = s(r, f, h, c, n[o + 9], 4, -640364487),
c = s(c, r, f, h, n[o + 12], 11, -421815835),
h = s(h, c, r, f, n[o + 15], 16, 530742520),
r = v(r, f = s(f, h, c, r, n[o + 2], 23, -995338651), h, c, n[o], 6, -198630844),
c = v(c, r, f, h, n[o + 7], 10, 1126891415),
h = v(h, c, r, f, n[o + 14], 15, -1416354905),
f = v(f, h, c, r, n[o + 5], 21, -57434055),
r = v(r, f, h, c, n[o + 12], 6, 1700485571),
c = v(c, r, f, h, n[o + 3], 10, -1894986606),
h = v(h, c, r, f, n[o + 10], 15, -1051523),
f = v(f, h, c, r, n[o + 1], 21, -2054922799),
r = v(r, f, h, c, n[o + 8], 6, 1873313359),
c = v(c, r, f, h, n[o + 15], 10, -30611744),
h = v(h, c, r, f, n[o + 6], 15, -1560198380),
f = v(f, h, c, r, n[o + 13], 21, 1309151649),
r = v(r, f, h, c, n[o + 4], 6, -145523070),
c = v(c, r, f, h, n[o + 11], 10, -1120210379),
h = v(h, c, r, f, n[o + 2], 15, 718787259),
f = v(f, h, c, r, n[o + 9], 21, -343485551),
r = l(r, e),
f = l(f, u),
h = l(h, p),
c = l(c, i);
return [r, f, h, c]
}(function(n) {
var t, o = [];
for (o[(n.length >> 2) - 1] = void 0,
t = 0; t < o.length; t += 1)
o[t] = 0;
for (t = 0; t < 8 * n.length; t += 8)
o[t >> 5] |= (255 & n.charCodeAt(t / 8)) << t % 32;
return o
}(n), 8 * n.length))
}
function o(n) {
return t(unescape(encodeURIComponent(n)))
}
return function(n) {
var t, o, e = "0123456789abcdef", u = "";
for (o = 0; o < n.length; o += 1)
t = n.charCodeAt(o),
u += e.charAt(t >>> 4 & 15) + e.charAt(15 & t);
return u
}(o(n))
}
,
function r(f, h, c, l, g) {
g = g || [[this], [{}]];
for (var t = [], o = null, n = [function() {
return !0
}
, function() {}
, function() {
g.length = c[h++]
}
, function() {
g.push(c[h++])
}
, function() {
g.pop()
}
, function() {
var n = c[h++]
, t = g[g.length - 2 - n];
g[g.length - 2 - n] = g.pop(),
g.push(t)
}
, function() {
g.push(g[g.length - 1])
}
, function() {
g.push([g.pop(), g.pop()].reverse())
}
, function() {
g.push([l, g.pop()])
}
, function() {
g.push([g.pop()])
}
, function() {
var n = g.pop();
g.push(n[0][n[1]])
}
, function() {
g.push(g[g.pop()[0]][0])
}
, function() {
var n = g[g.length - 2];
n[0][n[1]] = g[g.length - 1]
}
, function() {
g[g[g.length - 2][0]][0] = g[g.length - 1]
}
, function() {
var n = g.pop()
, t = g.pop();
g.push([t[0][t[1]], n])
}
, function() {
var n = g.pop();
g.push([g[g.pop()][0], n])
}
, function() {
var n = g.pop();
g.push(delete n[0][n[1]])
}
, function() {
var n = [];
for (var t in g.pop())
n.push(t);
g.push(n)
}
, function() {
g[g.length - 1].length ? g.push(g[g.length - 1].shift(), !0) : g.push(void 0, !1)
}
, function() {
var n = g[g.length - 2]
, t = Object.getOwnPropertyDescriptor(n[0], n[1]) || {
configurable: !0,
enumerable: !0
};
t.get = g[g.length - 1],
Object.defineProperty(n[0], n[1], t)
}
, function() {
var n = g[g.length - 2]
, t = Object.getOwnPropertyDescriptor(n[0], n[1]) || {
configurable: !0,
enumerable: !0
};
t.set = g[g.length - 1],
Object.defineProperty(n[0], n[1], t)
}
, function() {
h = c[h++]
}
, function() {
var n = c[h++];
g[g.length - 1] && (h = n)
}
, function() {
throw g[g.length - 1]
}
, function() {
var n = c[h++]
, t = n ? g.slice(-n) : [];
g.length -= n,
g.push(g.pop().apply(l, t))
}
, function() {
var n = c[h++]
, t = n ? g.slice(-n) : [];
g.length -= n;
var o = g.pop();
g.push(o[0][o[1]].apply(o[0], t))
}
, function() {
var n = c[h++]
, t = n ? g.slice(-n) : [];
g.length -= n,
t.unshift(null),
g.push(new (Function.prototype.bind.apply(g.pop(), t)))
}
, function() {
var n = c[h++]
, t = n ? g.slice(-n) : [];
g.length -= n,
t.unshift(null);
var o = g.pop();
g.push(new (Function.prototype.bind.apply(o[0][o[1]], t)))
}
, function() {
g.push(!g.pop())
}
, function() {
g.push(~g.pop())
}
, function() {
g.push(typeof g.pop())
}
, function() {
g[g.length - 2] = g[g.length - 2] == g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2] === g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2] > g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2] >= g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2] << g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2] >> g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2] >>> g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2] + g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2] - g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2] * g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2] / g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2] % g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2] | g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2] & g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2] ^ g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2]in g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2]instanceof g.pop()
}
, function() {
g[g[g.length - 1][0]] = void 0 === g[g[g.length - 1][0]] ? [] : g[g[g.length - 1][0]]
}
, function() {
for (var e = c[h++], u = [], n = c[h++], t = c[h++], p = [], o = 0; o < n; o++)
u[c[h++]] = g[c[h++]];
for (var i = 0; i < t; i++)
p[i] = c[h++];
g.push(function n() {
var t = u.slice(0);
t[0] = [this],
t[1] = [arguments],
t[2] = [n];
for (var o = 0; o < p.length && o < arguments.length; o++)
0 < p[o] && (t[p[o]] = [arguments[o]]);
return r(f, e, c, l, t)
})
}
, function() {
t.push([c[h++], g.length, c[h++]])
}
, function() {
t.pop()
}
, function() {
return !!o
}
, function() {
o = null
}
, function() {
g[g.length - 1] += String.fromCharCode(c[h++])
}
, function() {
g.push("")
}
, function() {
g.push(void 0)
}
, function() {
g.push(null)
}
, function() {
g.push(!0)
}
, function() {
g.push(!1)
}
, function() {
g.length -= c[h++]
}
, function() {
g[g.length - 1] = c[h++]
}
, function() {
var n = g.pop()
, t = g[g.length - 1];
t[0][t[1]] = g[n[0]][0]
}
, function() {
var n = g.pop()
, t = g[g.length - 1];
t[0][t[1]] = n[0][n[1]]
}
, function() {
var n = g.pop()
, t = g[g.length - 1];
g[t[0]][0] = g[n[0]][0]
}
, function() {
var n = g.pop()
, t = g[g.length - 1];
g[t[0]][0] = n[0][n[1]]
}
, function() {
g[g.length - 2] = g[g.length - 2] < g.pop()
}
, function() {
g[g.length - 2] = g[g.length - 2] <= g.pop()
}
]; ; )
try {
for (; !n[c[h++]](); )
;
if (o)
throw o;
return g.pop()
} catch (n) {
var e = t.pop();
if (void 0 === e)
throw n;
o = n,
h = e[0],
g.length = e[1],
e[2] && (g[e[2]][0] = o)
}
}
(120731, 0, [21, 34, 50, 100, 57, 50, 102, 50, 98, 99, 101, 52, 54, 97, 52, 99, 55, 56, 52, 49, 57, 54, 57, 49, 56, 98, 102, 100, 100, 48, 48, 55, 55, 102, 2, 10, 3, 2, 9, 48, 61, 3, 9, 48, 61, 4, 9, 48, 61, 5, 9, 48, 61, 6, 9, 48, 61, 7, 9, 48, 61, 8, 9, 48, 61, 9, 9, 48, 4, 21, 427, 54, 2, 15, 3, 2, 9, 48, 61, 3, 9, 48, 61, 4, 9, 48, 61, 5, 9, 48, 61, 6, 9, 48, 61, 7, 9, 48, 61, 8, 9, 48, 61, 9, 9, 48, 61, 10, 9, 48, 61, 11, 9, 48, 61, 12, 9, 48, 61, 13, 9, 48, 61, 14, 9, 48, 61, 10, 9, 55, 54, 97, 54, 98, 54, 99, 54, 100, 54, 101, 54, 102, 54, 103, 54, 104, 54, 105, 54, 106, 54, 107, 54, 108, 54, 109, 54, 110, 54, 111, 54, 112, 54, 113, 54, 114, 54, 115, 54, 116, 54, 117, 54, 118, 54, 119, 54, 120, 54, 121, 54, 122, 54, 48, 54, 49, 54, 50, 54, 51, 54, 52, 54, 53, 54, 54, 54, 55, 54, 56, 54, 57, 13, 4, 61, 11, 9, 55, 54, 77, 54, 97, 54, 116, 54, 104, 8, 55, 54, 102, 54, 108, 54, 111, 54, 111, 54, 114, 14, 55, 54, 77, 54, 97, 54, 116, 54, 104, 8, 55, 54, 114, 54, 97, 54, 110, 54, 100, 54, 111, 54, 109, 14, 25, 0, 3, 4, 9, 11, 3, 3, 9, 11, 39, 3, 1, 38, 40, 3, 3, 9, 11, 38, 25, 1, 13, 4, 61, 12, 9, 55, 13, 4, 61, 13, 9, 3, 0, 13, 4, 4, 3, 13, 9, 11, 3, 11, 9, 11, 66, 22, 306, 4, 21, 422, 24, 4, 3, 14, 9, 55, 54, 77, 54, 97, 54, 116, 54, 104, 8, 55, 54, 102, 54, 108, 54, 111, 54, 111, 54, 114, 14, 55, 54, 77, 54, 97, 54, 116, 54, 104, 8, 55, 54, 114, 54, 97, 54, 110, 54, 100, 54, 111, 54, 109, 14, 25, 0, 3, 10, 9, 55, 54, 108, 54, 101, 54, 110, 54, 103, 54, 116, 54, 104, 15, 10, 40, 25, 1, 13, 4, 61, 12, 9, 6, 11, 3, 10, 9, 3, 14, 9, 11, 15, 10, 38, 13, 4, 61, 13, 9, 6, 11, 6, 5, 1, 5, 0, 3, 1, 38, 13, 4, 61, 0, 5, 0, 43, 4, 21, 291, 61, 3, 12, 9, 11, 0, 3, 9, 9, 49, 72, 0, 2, 3, 4, 13, 4, 61, 8, 9, 21, 721, 3, 2, 8, 3, 2, 9, 48, 61, 3, 9, 48, 61, 4, 9, 48, 61, 5, 9, 48, 61, 6, 9, 48, 61, 7, 9, 48, 4, 55, 54, 115, 54, 101, 54, 108, 54, 102, 8, 10, 30, 55, 54, 117, 54, 110, 54, 100, 54, 101, 54, 102, 54, 105, 54, 110, 54, 101, 54, 100, 32, 28, 22, 510, 4, 21, 523, 22, 4, 55, 54, 115, 54, 101, 54, 108, 54, 102, 8, 10, 0, 55, 54, 119, 54, 105, 54, 110, 54, 100, 54, 111, 54, 119, 8, 10, 30, 55, 54, 117, 54, 110, 54, 100, 54, 101, 54, 102, 54, 105, 54, 110, 54, 101, 54, 100, 32, 28, 22, 566, 4, 21, 583, 3, 4, 55, 54, 119, 54, 105, 54, 110, 54, 100, 54, 111, 54, 119, 8, 10, 0, 55, 54, 103, 54, 108, 54, 111, 54, 98, 54, 97, 54, 108, 8, 10, 30, 55, 54, 117, 54, 110, 54, 100, 54, 101, 54, 102, 54, 105, 54, 110, 54, 101, 54, 100, 32, 28, 22, 626, 4, 21, 643, 25, 4, 55, 54, 103, 54, 108, 54, 111, 54, 98, 54, 97, 54, 108, 8, 10, 0, 55, 54, 69, 54, 114, 54, 114, 54, 111, 54, 114, 8, 55, 54, 117, 54, 110, 54, 97, 54, 98, 54, 108, 54, 101, 54, 32, 54, 116, 54, 111, 54, 32, 54, 108, 54, 111, 54, 99, 54, 97, 54, 116, 54, 101, 54, 32, 54, 103, 54, 108, 54, 111, 54, 98, 54, 97, 54, 108, 54, 32, 54, 111, 54, 98, 54, 106, 54, 101, 54, 99, 54, 116, 27, 1, 23, 56, 0, 49, 444, 0, 0, 24, 0, 13, 4, 61, 8, 9, 55, 54, 95, 54, 95, 54, 103, 54, 101, 54, 116, 54, 83, 54, 101, 54, 99, 54, 117, 54, 114, 54, 105, 54, 116, 54, 121, 54, 83, 54, 105, 54, 103, 54, 110, 15, 21, 1126, 49, 2, 14, 3, 2, 9, 48, 61, 3, 9, 48, 61, 4, 9, 48, 61, 5, 9, 48, 61, 6, 9, 48, 61, 7, 9, 48, 61, 8, 9, 48, 61, 9, 9, 48, 61, 10, 9, 48, 61, 11, 9, 48, 61, 9, 9, 55, 54, 108, 54, 111, 54, 99, 54, 97, 54, 116, 54, 105, 54, 111, 54, 110, 8, 10, 30, 55, 54, 117, 54, 110, 54, 100, 54, 101, 54, 102, 54, 105, 54, 110, 54, 101, 54, 100, 32, 28, 22, 862, 21, 932, 21, 4, 55, 54, 108, 54, 111, 54, 99, 54, 97, 54, 116, 54, 105, 54, 111, 54, 110, 8, 55, 54, 104, 54, 111, 54, 115, 54, 116, 14, 55, 54, 105, 54, 110, 54, 100, 54, 101, 54, 120, 54, 79, 54, 102, 14, 55, 54, 121, 54, 46, 54, 113, 54, 113, 54, 46, 54, 99, 54, 111, 54, 109, 25, 1, 3, 0, 3, 1, 39, 32, 22, 963, 4, 55, 54, 67, 54, 74, 54, 66, 54, 80, 54, 65, 54, 67, 54, 114, 54, 82, 54, 117, 54, 78, 54, 121, 54, 55, 21, 974, 50, 4, 3, 12, 9, 11, 3, 8, 3, 10, 24, 2, 13, 4, 61, 10, 9, 3, 13, 9, 55, 54, 95, 54, 95, 54, 115, 54, 105, 54, 103, 54, 110, 54, 95, 54, 104, 54, 97, 54, 115, 54, 104, 54, 95, 54, 50, 54, 48, 54, 50, 54, 48, 54, 48, 54, 51, 54, 48, 54, 53, 15, 10, 22, 1030, 21, 1087, 22, 4, 3, 13, 9, 55, 54, 95, 54, 95, 54, 115, 54, 105, 54, 103, 54, 110, 54, 95, 54, 104, 54, 97, 54, 115, 54, 104, 54, 95, 54, 50, 54, 48, 54, 50, 54, 48, 54, 48, 54, 51, 54, 48, 54, 53, 15, 3, 9, 9, 11, 3, 3, 9, 11, 38, 25, 1, 13, 4, 61, 11, 9, 3, 12, 9, 11, 3, 10, 3, 53, 3, 37, 39, 24, 2, 13, 4, 4, 55, 54, 122, 54, 122, 54, 97, 3, 11, 9, 11, 38, 3, 10, 9, 11, 38, 0, 49, 771, 2, 1, 12, 9, 13, 8, 3, 12, 4, 4, 56, 0], n);
var t = n.__getSecuritySign;
return delete n.__getSecuritySign,t
}
function getSign(n){
return aa(this,bb)(n)
// return n
}
此差异已折叠。
import requests
import re
class KeQq:
def __init__(self, url):
self.url = url
self.headers = {
"Referer": "https://ke.qq.com/",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬",
"Cookie": ""
}
self.taid = re.findall("taid=(\d+)", self.url)[0]
self.vid = ""
def getParams(self):
vid = re.findall("vid=(\d+)", self.url)
if vid:
return self.url.split("#")[0].split("/")[-1], vid[0]
html = requests.get(self.url, headers=self.headers)
params = re.findall(f"data-tid=(\d+)\sdata-taid={self.taid}\sdata-vid=(\d+)", html.text)
return params[0]
def getSign(self):
term_id, fileId = self.getParams()
self.vid = fileId
res = requests.get("https://ke.qq.com/cgi-bin/qcloud/get_token", params={"term_id": term_id, "fileId": fileId},
headers=self.headers).json()
return res["result"]
def start(self):
params = self.getSign()
res = requests.get(f"https://playvideo.qcloud.com/getplayinfo/v2/1258712167/{self.vid}",
params=params, headers=self.headers)
print(res.text)
return res.json()
if __name__ == '__main__':
KeQq("").start()
import requests
import re
class kuaishou:
def __init__(self, url):
self.url = url
self.headers = {
"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Mobile Safari/537.36",
"Referer": self.url
}
def start(self):
json_data = requests.get(self.url, headers=self.headers, allow_redirects=True).text
res = re.findall('type="video/mp4" src="(.*?)"', json_data)[0]
print(res)
return res
if __name__ == '__main__':
kuaishou().start()
import requests
class KuGou:
def __init__(self, url):
self.url = url
self.headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬"
}
self.base = url.split("#")[-1].split("&")
self.hash = self.base[0].split("=")[-1]
self.album_id = self.base[1].split("=")[-1]
def start(self):
params = {
"r": "play/getdata",
"hash": self.hash,
"album_id": self.album_id,
"mid": "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456"
}
res = requests.get("https://wwwapi.kugou.com/yy/index.php?", params=params, headers=self.headers)
print(res.json())
return res.json()
if __name__ == '__main__':
KuGou().start()
from base64 import b64encode
import requests
class kwDES:
def __init__(self):
self.key = [121, 108, 122, 115, 120, 107, 119, 109]
def a1(self, iArr, i2, j2):
f8949d = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144,
524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456,
536870912,
1073741824, 2147483648, 4294967296, 8589934592, 17179869184, 34359738368, 68719476736, 137438953472,
274877906944, 549755813888, 1099511627776, 2199023255552, 4398046511104, 8796093022208,
17592186044416,
35184372088832, 70368744177664, 140737488355328, 281474976710656, 562949953421312, 1125899906842624,
2251799813685248, 4503599627370496, 9007199254740992, 18014398509481984, 36028797018963968,
72057594037927936, 144115188075855872, 288230376151711744, 576460752303423488, 1152921504606846976,
2305843009213693952, 4611686018427387904, -9223372036854775808]
j3 = 0
for i3 in range(i2):
if iArr[i3] >= 0 and (f8949d[iArr[i3]] & j2) != 0:
j3 |= f8949d[i3]
return j3
def a(self, j2, jArr):
m = [0, 1048577, 3145731]
l = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1]
k = [13, 16, 10, 23, 0, 4, -1, -1, 2, 27, 14, 5, 20, 9, -1, -1, 22, 18, 11, 3, 25, 7, -1, -1, 15, 6, 26, 19, 12,
1,
-1, -1, 40, 51, 30, 36, 46, 54, -1, -1, 29, 39, 50, 44, 32, 47, -1, -1, 43, 48, 38, 55, 33, 52, -1, -1, 45,
41,
49, 35, 28, 31, -1, -1]
j = [56, 48, 40, 32, 24, 16, 8, 0, 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35,
62,
54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 60, 52, 44, 36, 28, 20, 12, 4, 27, 19, 11, 3]
a2 = self.a1(j, 56, j2)
for i3 in range(16):
a2 = ((a2 & (~m[l[i3]])) >> l[i3]) | ((m[l[i3]] & a2) << (28 - l[i3]))
jArr[i3] = self.a1(k, 64, a2)
def a2(self, jArr, j2):
global v
s = [0] * 2
t = [0] * 8
f8953h = [15, 6, 19, 20, 28, 11, 27, 16, 0, 14, 22, 25, 4, 17, 30, 9, 1, 7, 23, 13, 31, 26, 2, 8, 18, 12, 29, 5,
21,
10, 3, 24]
f8950e = [57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55,
47,
39, 31, 23, 15, 7, 56, 48, 40, 32, 24, 16, 8, 0, 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28,
20,
12, 4, 62, 54, 46, 38, 30, 22, 14, 6]
f8951f = [31, 0, 1, 2, 3, 4, -1, -1, 3, 4, 5, 6, 7, 8, -1, -1, 7, 8, 9, 10, 11, 12, -1, -1, 11, 12, 13, 14, 15,
16,
-1, -1, 15, 16, 17, 18, 19, 20, -1, -1, 19, 20, 21, 22, 23, 24, -1, -1, 23, 24, 25, 26, 27, 28, -1,
-1,
27, 28, 29, 30, 31, 30, -1, -1]
f8952g = [[
14, 4, 3, 15, 2, 13, 5, 3,
13, 14, 6, 9, 11, 2, 0, 5,
4, 1, 10, 12, 15, 6, 9, 10,
1, 8, 12, 7, 8, 11, 7, 0,
0, 15, 10, 5, 14, 4, 9, 10,
7, 8, 12, 3, 13, 1, 3, 6,
15, 12, 6, 11, 2, 9, 5, 0,
4, 2, 11, 14, 1, 7, 8, 13, ], [
15, 0, 9, 5, 6, 10, 12, 9,
8, 7, 2, 12, 3, 13, 5, 2,
1, 14, 7, 8, 11, 4, 0, 3,
14, 11, 13, 6, 4, 1, 10, 15,
3, 13, 12, 11, 15, 3, 6, 0,
4, 10, 1, 7, 8, 4, 11, 14,
13, 8, 0, 6, 2, 15, 9, 5,
7, 1, 10, 12, 14, 2, 5, 9, ], [
10, 13, 1, 11, 6, 8, 11, 5,
9, 4, 12, 2, 15, 3, 2, 14,
0, 6, 13, 1, 3, 15, 4, 10,
14, 9, 7, 12, 5, 0, 8, 7,
13, 1, 2, 4, 3, 6, 12, 11,
0, 13, 5, 14, 6, 8, 15, 2,
7, 10, 8, 15, 4, 9, 11, 5,
9, 0, 14, 3, 10, 7, 1, 12, ], [
7, 10, 1, 15, 0, 12, 11, 5,
14, 9, 8, 3, 9, 7, 4, 8,
13, 6, 2, 1, 6, 11, 12, 2,
3, 0, 5, 14, 10, 13, 15, 4,
13, 3, 4, 9, 6, 10, 1, 12,
11, 0, 2, 5, 0, 13, 14, 2,
8, 15, 7, 4, 15, 1, 10, 7,
5, 6, 12, 11, 3, 8, 9, 14, ], [
2, 4, 8, 15, 7, 10, 13, 6,
4, 1, 3, 12, 11, 7, 14, 0,
12, 2, 5, 9, 10, 13, 0, 3,
1, 11, 15, 5, 6, 8, 9, 14,
14, 11, 5, 6, 4, 1, 3, 10,
2, 12, 15, 0, 13, 2, 8, 5,
11, 8, 0, 15, 7, 14, 9, 4,
12, 7, 10, 9, 1, 13, 6, 3, ], [
12, 9, 0, 7, 9, 2, 14, 1,
10, 15, 3, 4, 6, 12, 5, 11,
1, 14, 13, 0, 2, 8, 7, 13,
15, 5, 4, 10, 8, 3, 11, 6,
10, 4, 6, 11, 7, 9, 0, 6,
4, 2, 13, 1, 9, 15, 3, 8,
15, 3, 1, 14, 12, 5, 11, 0,
2, 12, 14, 7, 5, 10, 8, 13, ], [
4, 1, 3, 10, 15, 12, 5, 0,
2, 11, 9, 6, 8, 7, 6, 9,
11, 4, 12, 15, 0, 3, 10, 5,
14, 13, 7, 8, 13, 14, 1, 2,
13, 6, 14, 9, 4, 1, 2, 14,
11, 13, 5, 0, 1, 10, 8, 3,
0, 11, 3, 5, 9, 4, 15, 2,
7, 8, 12, 15, 10, 7, 6, 12, ], [
13, 7, 10, 0, 6, 9, 5, 15,
8, 4, 3, 10, 11, 14, 12, 5,
2, 11, 9, 6, 15, 12, 0, 3,
4, 1, 14, 13, 1, 2, 7, 8,
1, 2, 12, 15, 10, 4, 0, 3,
13, 14, 6, 9, 7, 8, 9, 6,
15, 1, 5, 12, 3, 10, 14, 5,
8, 7, 11, 0, 4, 13, 2, 11, ],
]
i = [39, 7, 47, 15, 55, 23, 63, 31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21, 61, 29, 36, 4, 44, 12,
52,
20, 60, 28, 35, 3, 43, 11, 51, 19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9, 49, 17, 57, 25, 32,
0,
40, 8, 48, 16, 56, 24]
p = self.a1(f8950e, 64, j2)
s[0] = int(p & 4294967295)
s[1] = int((p & -4294967296) >> 32)
for i2 in range(16):
r = s[1]
r = self.a1(f8951f, 64, r)
r ^= jArr[i2]
for i3 in range(8):
t[i3] = (255 & (r >> (i3 * 8)))
u = 0
i4 = 7
while 1:
w = i4
if w < 0:
break
u <<= 4
u |= f8952g[w][t[w]]
i4 = w - 1
r = u
r = self.a1(f8953h, 32, r)
q = s[0]
s[0] = s[1]
s[1] = q ^ r
v = s[0]
s[0] = s[1]
s[1] = v
p = ((s[0]) & 4294967295) | (((s[1]) << 32) & -4294967296)
p = self.a1(i, 64, p)
return p
def encrypt(self, msg):
j2 = 0
i4 = 0
i5 = len(msg) // 8
jArr = [0] * 16
jArr2 = [0] * i5
while i4 < 8:
j2 |= (self.key[i4]) << (i4 * 8)
i4 += 1
for i7 in range(i5):
for i8 in range(8):
jArr2[i7] = ((msg[(i7 * 8) + i8]) << (i8 * 8)) | jArr2[i7]
jArr3 = [0] * ((((i5 + 1) * 8) + 1) // 8)
self.a(j2, jArr)
for i9 in range(i5):
jArr3[i9] = self.a2(jArr, jArr2[i9])
i10 = len(msg) % 8
i11 = i5 * 8
i12 = len(msg) - i11
bArr5 = msg[i11:i11 + i12]
j3 = 0
for i13 in range(i10):
j3 |= int((bArr5[i13])) << (i13 * 8)
jArr3[i5] = self.a2(jArr, j3)
bArr3 = [0] * (len(jArr3) * 8)
i14 = 0
i15 = 0
while i14 < len(jArr3):
i16 = i15
for i17 in range(8):
bArr3[i16] = (255 & (jArr3[i14] >> (i17 * 8)))
i16 += 1
i14 += 1
i15 = i16
return b64encode(bytearray(bArr3)).decode()
class KuWo:
def __init__(self, musicurl):
self.url = "http://nmobi.kuwo.cn/mobi.s?f=kuwo&q="
self.rid = musicurl.split("/")[-1]
def start(self):
params = kwDES().encrypt(str("type=convert_url2&br=2000kflac&format=mp3|aac&sig=0&rid=" + self.rid).encode())
res = requests.get(self.url + params).text
print(res)
if __name__ == '__main__':
KuWo().start()
import requests
class migu:
def __init__(self, url):
self.url = url
self.headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬"
}
self.cid = self.get_cid_or_mgdbId()
def get_cid_or_mgdbId(self):
if 'cid' in self.url:
return self.url.split("?")[-1].split("=")[-1]
return self.mgdbId_cover_pid(self.url.split("?")[-1].split("=")[-1])
def get_params(self):
return {
"contId": self.cid,
}
def mgdbId_cover_pid(self, mgdbId):
url = f"https://app-sc.miguvideo.com/vms-worldcup/v3/basic-data/all-view-list/{mgdbId}/2/3000060800"
res = requests.get(url, headers=self.headers).json()['body']['replayList']
if len(res) > 1:
for k, i in enumerate(res):
print(f'{k}->{i["name"]}')
print("检测到多个视频请选择你要解析视频的序号-> ")
pid = res[int(input("==> "))]['pID']
return pid
def str_cover_list(self, str):
return list(str)
def get_ddCalcu(self, puData_url):
params_dict = {}
query_string = puData_url.split("?")[-1]
for i in query_string.split("&"):
temp = i.split("=")
params_dict[temp[0]] = temp[1]
puData_list = self.str_cover_list(params_dict['puData'])
p = 0
result = []
while (2 * p) < len(puData_list):
result.append(puData_list[len(puData_list) - p - 1])
if p < len(puData_list) - p - 1:
result.append(params_dict['puData'][p])
if p == 1:
result.append('e')
if p == 2:
result.append(self.str_cover_list(params_dict['timestamp'])[6])
if p == 3:
result.append(self.str_cover_list(params_dict['ProgramID'])[2])
if p == 4:
result.append(self.str_cover_list(params_dict['Channel_ID'])[
len(self.str_cover_list(params_dict['Channel_ID'])) - 4])
p += 1
return ''.join(result)
def calc_url(self, url):
ddCalcu = self.get_ddCalcu(url)
return f"{url}&ddCalcu={ddCalcu}"
def start(self):
res = requests.get("https://webapi.miguvideo.com/gateway/playurl/v3/play/playurl", params=self.get_params(),
headers=self.headers)
puData_url = res.json()['body']['urlInfo']['url']
url = self.calc_url(puData_url)
print(url)
if __name__ == '__main__':
migu().start()
from binascii import hexlify
import random
from Crypto.Cipher import AES
from base64 import b64encode
from Crypto.Util.Padding import pad
import requests
class music163:
def __init__(self, url):
self.url = url
self.headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬"
}
self.vid = self.url.split("id=")[-1]
self.second_key = "".join(
random.choices(list('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), k=16))
def get_data(self, vid):
return f'{{"ids":"[{vid}]","level":"standard","encodeType":"aac","csrf_token":""}}'
def get_params(self, key, iv, data):
cryptos = AES.new(key=key.encode(), mode=AES.MODE_CBC, iv=iv.encode())
cryptos1 = AES.new(key=self.second_key.encode(), mode=AES.MODE_CBC, iv=iv.encode())
first_data = b64encode(cryptos.encrypt(pad(data.encode(), 16)))
second_data = cryptos1.encrypt(pad(first_data, 16))
return b64encode(second_data).decode()
def get_encSecKey(self, key):
rs = pow(int(hexlify(key[::-1].encode('utf-8')), 16), 65537,
157794750267131502212476817800345498121872783333389747424011531025366277535262539913701806290766479189477533597854989606803194253978660329941980786072432806427833685472618792592200595694346872951301770580765135349259590167490536138082469680638514416594216629258349130257685001248172188325316586707301643237607)
return hex(rs)[2:]
def start(self):
params = {
"params": self.get_params("0CoJUm6Qyw8W8jud", "0102030405060708", self.get_data(self.vid)),
"encSecKey": self.get_encSecKey(self.second_key)
}
res = requests.post("https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token=", data=params,
headers=self.headers)
print(res.json())
return res.json()
if __name__ == '__main__':
music163().start()
import base64
import time
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5
from Crypto.PublicKey import RSA
import math
import random
import execjs
import uuid
import requests
import re
class PPTV:
def __init__(self,url):
self.url = "https://oneplay.api.pptv.com/ups-service/play"
self.video_url = url
self.pk = '\n'.join([
'-----BEGIN PUBLIC KEY-----',
'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqe6XLQF2JmXWgfh09t8TTZsOb6bnj+duiWw4G7pd5Uo1/DN7Xij3Tys9E7XBX0gdXKYI9j+6Fr45bM28fzl4AxUxnhzmbExRt1NJarDGMKo49ViRg1VbL+Wh9kRi+rAxBisdRiP2JEAL+Awqu80chZxxdyoI1k3fSLoZsv/PGkwolE71qsEM4BO1J9RWNp0wlNGqgR+bTwLKkoe7oiZaKaMsSBWNIBDkwgGKFJZzXMXMnqGsDmfbdi32j6hW9DdrxjCx/i9Nzahd1TWVnw9O1AHL5PD5kM3HzqkAewBu38sZxw8DSGYqG0fgVAQtiLHhlD/19F4NKxqL8IVCinMBHQIDAQAB',
'-----END PUBLIC KEY-----'
])
self.publicKey = RSA.importKey(self.pk)
self.js = execjs.compile(open("./js/pptv.js").read())
self.headers = {
"accept": "*/*",
"accept-encoding": "gzip, deflate, br",
"accept-language": "zh-CN,zh;q=0.9",
"cache-control": "no-cache",
"referer": "https://v.pptv.com/",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"
}
def getRamNumber(self, e):
t = ""
for i in range(e):
t += str(hex(math.floor(16 * random.random()))[2:])
return t.upper()
def encrypt(self, message):
cipher = Cipher_pkcs1_v1_5.new(self.publicKey)
cipher_text = base64.b64encode(cipher.encrypt(message))
return cipher_text
def get_cipher(self):
t = self.getRamNumber(48)
i = self.getRamNumber(16)
res = self.encrypt(f"{t},{i}".encode('utf8'))
encryptParams = self.get_3des(self.get_msg(), t, i)
return {"cipher": res.decode(), "encryptParams": encryptParams}
def get_3des(self, msg, key, iv):
return self.js.call("encrypted", msg, key, iv)
def get_msg(self):
js_result = self.js.call("get3rdKeyRandom")
type = 'mhpptv'
appId = 'pptv.web.h5'
appPlt = 'web'
appVer = '1.0.4'
channel = 'sn.cultural'
sdkVer = '1.5.0'
cid = self.get_cid()
allowFt = '0,1,2,3'
rf = '0'
ppi = '302c393939'
o = 'www.google.com'
ahl_ver = '1'
ahl_random = js_result['random_hex']
ahl_signa = js_result['signature_hex']
vvId = uuid.uuid4()
version = '1'
https = 'true'
streamFormat = 3
result = f"type={type}&appId={appId}&appPlt={appPlt}&appVer={appVer}&channel={channel}&sdkVer={sdkVer}&cid={cid}&allowFt={allowFt}&rf={rf}&ppi={ppi}&o={o}&ahl_ver={ahl_ver}&ahl_random={ahl_random}&ahl_signa={ahl_signa}&vvId={vvId}&version={version}&https={https}&streamFormat={streamFormat}"
return result
def get_cid(self):
res = requests.get(self.video_url, headers=self.headers).text
cid = re.findall('var webcfg = {"id":(.*?),', res)
return cid[0]
def get_sign(self):
return self.js.call("get3rdKeyRandom")
def start(self):
result = self.get_cipher()
params = {
"cipher": result.get("cipher"),
"encryptParams": result.get("encryptParams"),
"format": "jsonp",
"cb": f"getPlayEncode_{int(time.time())}"
}
res = requests.get(self.url, params=params, headers=self.headers)
print(res.text)
if __name__ == '__main__':
PPTV().start()
import requests
import execjs
from urllib.parse import quote
import json
import re
class qqmusic:
def __init__(self, url):
self.url = url
self.vid = ""
self.headers = {
"Content-Type": "application/x-www-form-urlencoded",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬"
}
self.js = execjs.compile(open("./js/qqmusic.js").read())
self.get_vid()
def get_vid(self):
res = requests.get(self.url).text
vid = re.findall('"songmid":"(.*?)",', res)[0]
self.vid = vid
def get_data(self):
return json.dumps({"req": {"module": "CDN.SrfCdnDispatchServer", "method": "GetCdnDispatch",
"param": {"guid": "12345678", "calltype": 0, "userip": ""}},
"req_0": {"module": "vkey.GetVkeyServer", "method": "CgiGetVkey",
"param": {"guid": "12345678", "songmid": [self.vid], "songtype": [0],
"loginflag": 1, "platform": "20"}},
"comm": {"format": "json", "ct": 24, "cv": 0}})
def join_url_params(self):
params = {
"sign": self.js.call("getSign", self.get_data()),
# "format": "json",
# "inCharset": "utf8",
# "outCharset": "utf-8",
# "notice": "0",
# "platform": "yqq.json",
# "needNewCode": "0",
"data": quote(str(self.get_data()))
}
return f'https://u.y.qq.com/cgi-bin/musics.fcg?sign={params["sign"]}&data={params["data"]}'
def start(self):
res = requests.get(self.join_url_params())
print(res.text)
return res.json()
if __name__ == '__main__':
qqmusic().start()
import requests
import re
class sohu:
def __init__(self, url):
self.url = url
self.headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬"
}
def get_vid(self):
res = requests.get(self.url, headers=self.headers)
vid = re.findall('var vid="(\d+)";', res.text)
if len(vid) > 0:
return vid[0]
return re.findall('data-vid="(\d+)"', res.text)[0]
def start(self):
params = {
"vid": self.get_vid(),
"ver": "21",
"ssl": "1",
"pflag": "pch5",
}
res = requests.get("https://hot.vrs.sohu.com/vrs_flash.action", params=params, headers=self.headers)
return res.json()
if __name__ == '__main__':
sohu().start()
import requests
import ujson
import time
import re
import execjs
from urllib.parse import quote
class tencent:
def __init__(self, url, timeout=None,cookie=''):
self.url = url
self.timeout = timeout or 2
self.headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬",
"cookie":cookie,
}
self.int_time = int(time.time())
self.cookie = cookie
self.cookie_dict = {}
self.parse_cookie()
def parse_cookie(self):
if self.cookie:
for i in self.cookie.split(";"):
kv = i.split("=")
self.cookie_dict[kv[0].strip()] = kv[1]
print(self.cookie_dict)
def get_vid(self):
vipUrl = self.url
vid = None
if vipUrl.find('v.qq.com/x/cover/') > -1:
_type = vipUrl.split("v.qq.com/x/cover/")[1].split(".html")[0]
if _type.find('/') > -1:
vid = _type.split("/")[1]
else:
r = requests.get(vipUrl, headers=self.headers)
html = r.text
vid = html.split('<link rel="canonical" href="https://v.qq.com/x/cover/')[1].split('/')[1].split('.')[0]
else:
if re.search('/page/.*\.html',vipUrl):
vid = vipUrl.split("/page/")[1].split(".html")[0]
else:
if vipUrl.find('&vid=') > -1:
vid = vipUrl.split("&vid=")[1].split("&")[0]
print(f'vid:{vid}')
return vid
def get_adparams(self):
pf = "in"
ad_type = quote("LD|KB|PVL")
pf_ex = "pc"
url = quote(self.url)
refer = quote("https://v.qq.com/")
ty = "web"
plugin = "1.0.0"
v = "3.5.57"
coverid = re.search("cover/(.*?).html", self.url).group(1)
coverid = coverid.split('/')[0]
# print(f'coverid:{coverid}')
vid = self.get_vid()
pt = ""
flowid = "f48222928272c7950a794ffbea32022c_10901"
vptag = quote("vptag=www_baidu_com|channel")
pu = "1"
chid = "0"
adaptor = "2"
dtype = "1"
live = "0"
resp_type = "json"
guid = "2634e72faf052aa51f98971b2a68718c"
req_type = 1
# from = "0"
appversion = "1.0.157"
uid = self.cookie_dict['vqq_vuserid']
tkn = self.cookie_dict['vqq_vusession']
lt = "qq"
platform = "10901"
opid = self.cookie_dict['vqq_openid']
atkn = self.cookie_dict['vqq_access_token']
appid = self.cookie_dict['vqq_appid']
tpid = "1"
result = f"pf={pf}&ad_type={ad_type}&pf_ex={pf_ex}&url={url}&refer={refer}&ty={ty}&plugin={plugin}&v={v}&coverid={coverid}&vid={vid}&pt={pt}&flowid={flowid}&vptag={vptag}&pu={pu}&chid={chid}&adaptor={adaptor}&dtype={dtype}&live={live}&resp_type={resp_type}&guid={guid}&req_type={req_type}&from=0&appversion={appversion}&" \
f"uid={uid}&tkn={tkn}&lt={lt}&platform={platform}&opid={opid}&atkn={atkn}&appid={appid}&tpid={tpid}"
return result
def get_vinfoparams(self):
spsrt = "1"
charge = "1"
defaultfmt = "auto"
otype = "ojson"
guid = "2634e72faf052aa51f98971b2a68718c"
# 随机数 + platform
flowid = "f48222928272c7950a794ffbea32022c_10901"
platform = "10901"
sdtfrom = "v1010"
defnpayver = "1"
appVer = "3.5.57"
host = "v.qq.com"
ehost = quote(self.url)
refer = "v.qq.com"
sphttps = "1"
tm = self.int_time
spwm = "4"
logintoken = quote(str({"main_login": self.cookie_dict['main_login'], "openid": self.cookie_dict['vqq_openid'],
"appid": self.cookie_dict['vqq_appid'],
"access_token": self.cookie_dict['vqq_access_token'],
"vuserid": self.cookie_dict['vqq_vuserid'],
"vusession": self.cookie_dict['vqq_vusession']}))
# print(f'logintoken:{logintoken}')
vid = self.get_vid()
defn = "fhd"
fhdswitch = "0"
show1080p = "1"
isHLS = "1"
dtype = "3"
sphls = "2"
spgzip = "1"
dlver = "2"
drm = "32"
hdcp = "1"
spau = "1"
spaudio = "15"
defsrc = "1"
encryptVer = "9.1"
cKey = self.get_cKey(platform, appVer, vid, guid, tm)
fp2p = "1"
spadseg = "3"
result = f"spsrt={spsrt}&charge={charge}&defaultfmt={defaultfmt}&otype={otype}&guid={guid}&flowid={flowid}&platform={platform}&sdtfrom={sdtfrom}&defnpayver={defnpayver}&appVer={appVer}&host={host}&ehost={ehost}&refer={refer}&sphttps={sphttps}&tm={tm}&spwm={spwm}&logintoken={logintoken}&vid={vid}&defn={defn}&fhdswitch={fhdswitch}&show1080p={show1080p}&isHLS={isHLS}&dtype={dtype}&sphls={sphls}&spgzip={spgzip}&dlver={dlver}&drm={drm}&hdcp={hdcp}&spau={spau}&spaudio={spaudio}&defsrc={defsrc}&encryptVer={encryptVer}&cKey={cKey}&fp2p={fp2p}&spadseg={spadseg}"
return result
def get_cKey(self, platform, version, vid, guid, tm):
file = './js/getck.js'
ctx = execjs.compile(open(file).read())
params = ctx.call("getckey", platform, version, vid, '', guid,
tm)
return params
def get_buid(self):
return "vinfoad"
def deal_data(self,data):
# print(data)
vinfo = ujson.loads(data['vinfo'])
vl = vinfo['vl']
urls = vl['vi'][0]['ul']['ui']
# print(urls)
try:
pt = urls[-1]['hls']['pt']
except:
pt = ''
url = urls[-1]['url']
realUrl = url + pt
print(realUrl)
return realUrl
def start(self):
ad_params = self.get_adparams()
vinfoparams = self.get_vinfoparams()
buid = self.get_buid()
params = {"buid": buid,
"adparam": ad_params,
"vinfoparam": vinfoparams}
# print(params)
res = requests.post("https://vd.l.qq.com/proxyhttp", headers=self.headers, json=params)
data = res.json()
return self.deal_data(data)
if __name__ == '__main__':
# 控制台执行 document.cookie 获取
cookie = """
pgv_pvid=5805499462; iip=0; RK=yQaYRyNLbG; ptcz=2a0d041daba2e1e3872184cd999e01bf90678c0e492c5900527c802251d224ad; tvfe_boss_uuid=53b5e88a3ebeba2c; ts_uid=8123938908; tvfe_search_uid=225c6955-d257-4d4a-97d0-cc327ffea211; txv_boss_uuid=95755769-e482-3a22-3e9f-6f8d842da1a7; pgv_pvi=1381712896; logTrackKey=613d40c3fea04aafb45fc9642dd67b99; video_platform=2; main_login=qq; vqq_vuserid=1260982452; vqq_openid=406CA2296D6A3B970597D6CF1605B6B7; vqq_appid=101483052; qq_nick=feng; pgv_info=ssid=s1368217315; pac_uid=1_434857005; vversion_name=8.2.95; video_guid=3419ca23530808d22bb278e881e46647; video_omgid=3419ca23530808d22bb278e881e46647; _qpsvr_localtk=0.710205836458567; compared_guid=bc772040638cf0da; vqq_access_token=88AEE1A8BC32318537BC7D81586E44A4; o_cookie=434857005; qv_als=vzJJwNyUEiCeDF1UA11662524934RoBNzA==; video_bucketid=4; fqm_pvqid=0a2a19f9-b09d-48d2-835a-cee916bdb63f; fqm_sessionid=a2c625f7-98e9-4d69-adb4-ad82846832bc; uin=o0434857005; skey=@rZMv3mYSR; tab_experiment_str=8752038#9047927#8752037#9040406#9099387; bucket_id=9231009; last_refresh_time=1666604352564; last_refresh_vuserid=1260982452; ts_refer=m.v.qq.com/; qq_head=http://thirdqq.qlogo.cn/g?b=sdk&k=llMfAicCbslpBk4funDukzg&s=100&t=318; vqq_vusession=sj85gfjn1ZL5jGI_RW5lLA.N; ptag=m_v_qq_com|channel; tab_experiment_data=exp_id=9099387&status=1; ts_last=v.qq.com/x/cover/m441e3rjq9kwpsc.html
""".strip()
# print(cookie)
# 斗罗大陆
url = 'https://v.qq.com/x/cover/m441e3rjq9kwpsc/c00442r6ry6.html'
# 复仇者联盟
url = 'https://v.qq.com/x/cover/v2098lbuihuqs11/m00314jtw6k.html'
vqq = tencent(url=url,cookie=cookie)
vqq.start()
\ No newline at end of file
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : vqq.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/10/24
import requests
import re
time_out = 2
cookie = """
pgv_pvid=5805499462; iip=0; RK=yQaYRyNLbG; ptcz=2a0d041daba2e1e3872184cd999e01bf90678c0e492c5900527c802251d224ad; tvfe_boss_uuid=53b5e88a3ebeba2c; ts_uid=8123938908; tvfe_search_uid=225c6955-d257-4d4a-97d0-cc327ffea211; txv_boss_uuid=95755769-e482-3a22-3e9f-6f8d842da1a7; pgv_pvi=1381712896; logTrackKey=613d40c3fea04aafb45fc9642dd67b99; video_platform=2; main_login=qq; vqq_vuserid=1260982452; vqq_openid=406CA2296D6A3B970597D6CF1605B6B7; vqq_appid=101483052; qq_nick=feng; pgv_info=ssid=s1368217315; pac_uid=1_434857005; vversion_name=8.2.95; video_guid=3419ca23530808d22bb278e881e46647; video_omgid=3419ca23530808d22bb278e881e46647; _qpsvr_localtk=0.710205836458567; compared_guid=bc772040638cf0da; vqq_access_token=88AEE1A8BC32318537BC7D81586E44A4; o_cookie=434857005; qv_als=vzJJwNyUEiCeDF1UA11662524934RoBNzA==; video_bucketid=4; fqm_pvqid=0a2a19f9-b09d-48d2-835a-cee916bdb63f; fqm_sessionid=a2c625f7-98e9-4d69-adb4-ad82846832bc; uin=o0434857005; skey=@rZMv3mYSR; tab_experiment_str=8752038#9047927#8752037#9040406#9099387; bucket_id=9231009; last_refresh_time=1666604352564; last_refresh_vuserid=1260982452; ts_refer=m.v.qq.com/; qq_head=http://thirdqq.qlogo.cn/g?b=sdk&k=llMfAicCbslpBk4funDukzg&s=100&t=318; vqq_vusession=sj85gfjn1ZL5jGI_RW5lLA.N; ptag=m_v_qq_com|channel; tab_experiment_data=exp_id=9099387&status=1; ts_last=v.qq.com/x/cover/m441e3rjq9kwpsc.html
""".strip()
headers = {
# "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36¬",
"User-Agent": "qqlive",
"cookie": cookie,
}
def get_vid(vipUrl):
vid = None
if vipUrl.find('v.qq.com/x/cover/') > -1:
_type = vipUrl.split("v.qq.com/x/cover/")[1].split(".html")[0]
if _type.find('/') > -1:
vid = _type.split("/")[1]
else:
r = requests.get(vipUrl, headers=headers)
html = r.text
vid = html.split('<link rel="canonical" href="https://v.qq.com/x/cover/')[1].split('/')[1].split('.')[0]
else:
if re.search('/page/.*\.html', vipUrl):
vid = vipUrl.split("/page/")[1].split(".html")[0]
else:
if vipUrl.find('&vid=') > -1:
vid = vipUrl.split("&vid=")[1].split("&")[0]
print(f'vid:{vid}')
return vid
def vqq_jx_rx(url):
# 1080P画质
vid = get_vid(url)
api = f"https://vv.video.qq.com/getinfo?defn=fhd&platform=10801&otype=ojson&sdtfrom=v4138&appVer=7&vid={vid}&newnettype=1&fhdswitch=1&show1080p=1&dtype=3&sphls=2"
print(api)
r = requests.get(api, headers=headers, timeout=time_out)
ret = r.json()
try:
urls = ret["vl"]["vi"][0]['ul']['ui']
# url = urls[-1]['url']
url = urls[0]['url']
realUrl = url
print(realUrl)
except:
print(ret)
def vqq_jx(url):
# 720P 画质
vid = get_vid(url)
api = f'https://vv.video.qq.com/getinfo?encver=2&defn=shd&platform=10801&otype=ojson&sdtfrom=v4138&appVer=7&dtype=3&vid={vid}&newnettype=1'
print(api)
r = requests.get(api,headers=headers,timeout=time_out)
ret = r.json()
try:
urls = ret["vl"]["vi"][0]['ul']['ui']
print(urls)
url = urls[-1]['url']
pt = urls[-1]['hls']['pt']
realUrl = url + pt
print(realUrl)
except:
print(ret)
if __name__ == '__main__':
# 斗罗大陆
url = 'https://v.qq.com/x/cover/m441e3rjq9kwpsc/c00442r6ry6.html'
# 复仇者联盟
url = 'https://v.qq.com/x/cover/v2098lbuihuqs11/m00314jtw6k.html'
vqq_jx(url)
# vqq_jx_rx(url)
\ No newline at end of file
import requests
import execjs
import re
class xigua:
def __init__(self, url):
self.url = url
if "wid_try=1" not in self.url:
self.url = self.url + "&wid_try=1"
self.headers = {
"referer": self.url,
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36",
}
self.nonce = self.getNonce()
def getNonce(self):
res = requests.get(self.url, headers=self.headers)
return res.cookies.get("__ac_nonce")
def getSign(self):
jscode = execjs.compile(open("./js/xigua.js").read())
ctx = jscode.call("getSign", self.nonce, self.url)
return f"__ac_nonce={self.nonce};__ac_signature={ctx};__ac_referer={self.url}"
def start(self):
self.headers.update({"cookie": self.getSign()})
html = requests.get(self.url, headers=self.headers)
res = re.findall("window._SSR_HYDRATED_DATA=(.*?)</script>", html.text)[0].replace("undefined", 'null')
print(res)
return res
if __name__ == '__main__':
xigua().start()
import time
import requests
import re
from hashlib import md5
import json
class YouKu:
def __init__(self, url):
self.url = "https://acs.youku.com/h5/mtop.youku.play.ups.appinfo.get/1.1/"
self.int_time = int(time.time()) * 1000
# self.vid = "XNTQwMTgxMTE2"
self.video_url = url
# 用于存储show_id,videoId
self.params = {}
self.get_current_showid()
self.cookie = ''
self.cookie_dict = {}
self.language = {
"ja": "日语",
"guoyu": "国语",
"default": "默认",
"yue": "粤语",
}
def get_current_showid(self):
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
}
res = requests.get(self.video_url, headers=headers).text
current_showid = re.findall("id_(.*?).html", res)[0]
# video_id = re.findall("videoId: '(\d+)'", res)[0]
self.params = {"show_id": current_showid}
def get_steal_params(self):
return json.dumps({
"ccode": "0502",
"client_ip": "192.168.1.1",
"utid": re.findall("cna=(.*?);", self.cookie)[0],
"client_ts": self.int_time,
"version": "2.1.63",
"ckey": "DIl58SLFxFNndSV1GFNnMQVYkx1PP5tKe1siZu/86PR1u/Wh1Ptd+WOZsHHWxysSfAOhNJpdVWsdVJNsfJ8Sxd8WKVvNfAS8aS8fAOzYARzPyPc3JvtnPHjTdKfESTdnuTW6ZPvk2pNDh4uFzotgdMEFkzQ5wZVXl2Pf1/Y6hLK0OnCNxBj3+nb0v72gZ6b0td+WOZsHHWxysSo/0y9D2K42SaB8Y/+aD2K42SaB8Y/+ahU+WOZsHcrxysooUeND",
})
def get_biz_params(self):
return json.dumps({
"vid": re.findall("id_(.*?).html", self.video_url)[0],
"play_ability": "16782592", # 写死在js里的
"current_showid": self.params["show_id"],
"preferClarity": "4", # 貌似是清晰度
"extag": "EXT-X-PRIVINF", # 写死在js里的
"master_m3u8": "1",
"media_type": "standard,subtitle",
"app_ver": "2.1.63",
"drm_type": "19",
"key_index": "web01",
})
def get_ad_params(self):
return json.dumps({
"vs": "1.0",
"pver": "2.1.63",
"sver": "2.0",
"site": 1,
"aw": "w",
"fu": 0,
"d": "0",
"bt": "pc",
"os": "mac",
"osv": "",
"dq": "auto",
"atm": "",
"partnerid": "null",
"wintype": "interior",
"isvert": 0,
"vip": 0,
"p": 1,
"rst": "mp4",
"needbf": 2,
"avs": "1.0",
})
def get_data(self):
return json.dumps({"steal_params": self.get_steal_params(), "biz_params": self.get_biz_params(),
"ad_params": self.get_ad_params()})
def join_params(self):
data = self.get_data()
return {
'jsv': '2.5.8',
'appKey': '24679788',
't': self.int_time,
'sign': md5(str(
re.findall("m_h5_tk=(.*?)_", self.cookie)[0] + "&" + str(self.int_time) + "&" + "24679788" + "&" + str(
data)).encode("utf8")).hexdigest(),
'api': 'mtop.youku.play.ups.appinfo.get',
'v': '1.1',
'timeout': '20000',
'YKPid': '20160317PLF000211',
'YKLoginRequest': 'true',
'AntiFlood': 'true',
'AntiCreep': 'true',
'type': 'jsonp',
'dataType': 'jsonp',
'callback': 'mtopjsonp3',
"data": f"{data}"
}
def loads_jsonp(self, _jsonp):
try:
return json.loads(re.match(".*?({.*}).*", _jsonp, re.S).group(1))
except:
raise ValueError('Invalid Input')
def start(self):
headers = {
"Accept": "*/*",
"Host": "acs.youku.com",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
"cookie": self.cookie,
"Referer": "https://v.youku.com/"
}
res = requests.get(self.url, params=self.join_params(), headers=headers)
print(res.text)
if __name__ == '__main__':
YouKu().start()
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册