注意事项此源仅支持tvbox的js1以及c#版drpy的js0暂不支持drpy官方py版的js0 注入全局方法方便globalThisgetTime = functionlet ts= Mathroundnew DategetTime1000toString;log获取时间戳+ts;return tsglobalThisgetHeaders= functioninputtslet tkstr=in
在PHP中使用以上的JS代码,可以通过使用第三方库V8Js来实现。V8Js是一个将V8 JavaScript引擎嵌入PHP的扩展,可以在PHP中执行JavaScript代码。
以下是使用V8Js扩展实现对搜索接口、列表接口和详情获取接口的请求的示例代码:
<?php
// 引入V8Js扩展
require_once 'v8js.php';
// 创建V8Js实例
$v8 = new V8Js();
// 定义JS代码
$jsCode = '
// 注意事项:此源仅支持tvbox的js1以及c#版drpy的js0,暂不支持drpy官方py版的js0
// 注入全局方法,方便
globalThis.getTime = function(){
let ts = Math.round(new Date().getTime()/1000).toString();
return ts;
};
globalThis.getHeaders = function(input, ts){
let tkstr = input.split("?")[1].split("&").map(function(it){
return it.split("=")[1];
}).join("");
tkstr = input.split("?")[0].replace("https://api.tyun77.cn", "") + tkstr + ts + "XSpeUFjJ";
let TK = md5(tkstr);
let headers = {
"User-Agent": "okhttp/3.12.0",
"TK": TK
};
return headers;
};
var rule = {
title: "酷云77",
host: "https://api.tyun77.cn",
homeUrl: "/api.php/provide/homeBlock?type_id=0",
searchUrl: "/api.php/provide/searchVideo?searchName=**",
searchable: 2,
quickSearch: 1,
filterable: 1,
multi: 1,
url: "/api.php/provide/searchFilter?devid=453CA5D864457C7DB4D0EAA93DE96E66&package=com.sevenVideo.app.android&pagenum=fypage&pagesize=24&version=&sj=$ts&type_id=fyclass",
detailUrl: "/api.php/provide/videoDetail?devid=453CA5D864457C7DB4D0EAA93DE96E66&ids=fyid&package=com.sevenVideo.app.android&version=",
filter_url: "year={{fl.y}}&category={{fl.scat}}&area={{fl.a}}",
headers: {
"User-Agent": "okhttp/3.12.0"
},
timeout: 5000,
class_name: "全部&电影&电视剧&综艺&动漫",
class_url: "0&1&2&3&4",
limit: 20,
play_parse: true,
play_json: 0,
lazy: "",
推荐: "json:data.blocks;contents;title;videoCover;msg;id",
double: true,
一级: `js:
var d = [];
let ts = getTime();
input = input.replace("$ts", ts);
let html = request(input, {
headers: getHeaders(input, ts)
});
html = JSON.parse(html);
html.data.result.forEach(function(it){
d.push({
title: it.title,
img: it.videoCover,
desc: it.msg,
url: it.id
});
});
setResult(d);
`,
二级: `js:
var d = [];
VOD = {
vod_id: input
};
let ts = getTime();
try {
input = input + "&sj=" + ts;
let html = request(input, {
headers: getHeaders(input, ts)
});
html = JSON.parse(html);
let node = html.data;
VOD = {
vod_id: node["id"],
vod_name: node["videoName"],
vod_pic: node["videoCover"],
type_name: node["subCategory"],
vod_year: node["year"],
vod_area: node["area"],
vod_remarks: node["msg"],
vod_actor: node["actor"],
vod_director: node["director"],
vod_content: node["brief"].strip()
};
let tid = input.split("ids=")[1].split("&")[0];
let listUrl = "https://api.tyun77.cn/api.php/provide/videoPlaylist?devid=453CA5D864457C7DB4D0EAA93DE96E66&ids=" + tid + "&package=com.sevenVideo.app.android&version=&sj=" + ts;
html = request(listUrl, {
headers: getHeaders(listUrl, ts)
});
html = JSON.parse(html);
let episodes = html.data.episodes;
let playMap = {};
if (typeof play_url === "undefined") {
var play_url = "";
}
play_url = play_url.replace("&play_url=", "&type=json&play_url=");
episodes.forEach(function(ep) {
let playurls = ep["playurls"];
playurls.forEach(function(playurl) {
let source = playurl["playfrom"];
if (!playMap.hasOwnProperty(source)) {
playMap[source] = [];
}
playMap[source].push(playurl["title"].strip() + "$" + play_url + urlencode(playurl["playurl"]));
});
});
let playFrom = [];
let playList = [];
Object.keys(playMap).forEach(function(key) {
playFrom.push(key);
playList.push(playMap[key].join("#"));
});
let vod_play_from = playFrom.join("$$$");
let vod_play_url = playList.join("$$$");
VOD["vod_play_from"] = vod_play_from;
VOD["vod_play_url"] = vod_play_url;
} catch (e) {
log("获取二级详情页发生错误:" + e.message);
}
`,
搜索: "json:data;videoName;videoCover;msg;id"
};
// 定义获取时间戳的函数
$timeFunc = '
function getTime() {
let ts = Math.round(new Date().getTime() / 1000).toString();
return ts;
}
';
// 定义获取请求头的函数
$headersFunc = '
function getHeaders(input, ts) {
let tkstr = input.split("?")[1].split("&").map(function(it){
return it.split("=")[1];
}).join("");
tkstr = input.split("?")[0].replace("https://api.tyun77.cn", "") + tkstr + ts + "XSpeUFjJ";
let TK = md5(tkstr);
let headers = {
"User-Agent": "okhttp/3.12.0",
"TK": TK
};
return headers;
}
';
// 注入时间戳和请求头的函数
$v8->executeString($timeFunc);
$v8->executeString($headersFunc);
// 定义搜索接口请求函数
function searchVideo($searchName) {
global $v8, $jsCode;
$url = str_replace('**', urlencode($searchName), $jsCode['searchUrl']);
$ts = $v8->executeString('getTime()');
$headers = $v8->executeString('getHeaders("' . $url . '", "' . $ts . '")');
$result = $v8->executeString('JSON.stringify(request("' . $url . '", { headers: ' . $headers . ' }))');
return json_decode($result, true);
}
// 定义列表接口请求函数
function searchFilter($fl, $fypage) {
global $v8, $jsCode;
$url = str_replace(array('{{fl.y}}', '{{fl.scat}}', '{{fl.a}}', 'fypage'), array($fl['y'], $fl['scat'], $fl['a'], $fypage), $jsCode['url']);
$ts = $v8->executeString('getTime()');
$headers = $v8->executeString('getHeaders("' . $url . '", "' . $ts . '")');
$result = $v8->executeString('JSON.stringify(request("' . $url . '", { headers: ' . $headers . ' }))');
return json_decode($result, true);
}
// 定义详情获取接口请求函数
function videoDetail($ids) {
global $v8, $jsCode;
$url = str_replace('fyid', $ids, $jsCode['detailUrl']);
$ts = $v8->executeString('getTime()');
$headers = $v8->executeString('getHeaders("' . $url . '", "' . $ts . '")');
$result = $v8->executeString('JSON.stringify(request("' . $url . '", { headers: ' . $headers . ' }))');
return json_decode($result, true);
}
// 调用搜索接口请求函数
$searchName = 'keyword';
$searchResult = searchVideo($searchName);
var_dump($searchResult);
// 调用列表接口请求函数
$fl = array('y' => '2022', 'scat' => '1', 'a' => '2');
$fypage = 1;
$searchFilterResult = searchFilter($fl, $fypage);
var_dump($searchFilterResult);
// 调用详情获取接口请求函数
$ids = '12345';
$videoDetailResult = videoDetail($ids);
var_dump($videoDetailResult);
在上述示例代码中,我们首先引入了V8Js扩展,然后创建了一个V8Js实例。接下来,我们定义了JS代码和获取时间戳、请求头的函数,并使用$v8->executeString()方法执行了这些代码。
然后,我们定义了搜索接口请求函数searchVideo()、列表接口请求函数searchFilter()和详情获取接口请求函数videoDetail()。这些函数使用V8Js实例执行JS代码,生成相应的URL和请求头,并使用request()函数发送请求,最后返回请求结果。
最后,我们调用了搜索接口请求函数、列表接口请求函数和详情获取接口请求函数,并打印了返回的结果。
请根据实际情况修改URL和请求参数,并根据需要处理返回的结果
原文地址: http://www.cveoy.top/t/topic/h70X 著作权归作者所有。请勿转载和采集!