在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和请求参数,并根据需要处理返回的结果

注意事项此源仅支持tvbox的js1以及c#版drpy的js0暂不支持drpy官方py版的js0 注入全局方法方便globalThisgetTime = functionlet ts= Mathroundnew DategetTime1000toString;log获取时间戳+ts;return tsglobalThisgetHeaders= functioninputtslet tkstr=in

原文地址: http://www.cveoy.top/t/topic/h70X 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录