最新
版块
发主题
搜索
我的

请问,如何把自己做好的网站做成lson接口?

hui122 8月前 3511

就是量子 非凡这种json接口




目的是把自己的网站资源制作成json接口后,供给tvbox,以便在电视盒子上观看节目。

目前已经把量子和非凡的接口集成到了自定义接口中,但是我想再添加一个自己网站的接口,以供更好的视觉享受。

官方目前好像没有提供类似的API接口。该怎么做呢?能否透漏一下细节?谢谢。

最新回复 (5)
  • 海洋 8月前
    0 引用 2
    不需要网站提供接口,tvbox有自己的获取办法,具体看一去查看下tvbox的接口教程。
  • hui122 8月前
    0 引用 3


    虽然已经找到别的方法代替了,但是我不喜欢其它的cms,就喜欢本站的。

    现在就差一个问题了,就可以把网站做成json接口,您能帮我看看吗?

    zyapi.php原版代码:

    [code]

    <?php
    /******************************
    海洋CMS
    功能:资源发布zyAPI模块
    版本:1.0
    开发:海洋
    ******************************/

    header('Content-Type: application/json; charset=UTF-8');

    require_once("include/common.php");
    require_once("include/main.class.php");
    require_once("data/config.cache.inc.php");

    // 判断是否开启api服务
    $isopenapi = file_get_contents("data/admin/isapi.txt");
    if ($isopenapi == "0") {
        echo json_encode(["code" => 0, "msg" => "服务已关闭"]);
        exit;
    }

    $app_apipagenum = 20; // 每页显示条数
    $action = addslashes($_GET['ac']);
    $rtype = addslashes($_GET['t']);
    $rpage = addslashes($_GET['pg']);
    $rkey = addslashes($_GET['wd']);
    $rday = addslashes($_GET['h']);
    $ids = addslashes($_GET['ids']);

    if (!isNum($rtype)) { $rtype = 0; } else { $rtype = intval($rtype); }
    if (!isNum($rpage)) { $rpage = 1; } else { $rpage = intval($rpage); }
    if ($rpage < 1) { $rpage = 1; }
    if (!isNum($rday)) { $rday = 0; } else { $rday = intval($rday); }

    $app_apiver = "5.0";

    switch($action) {
        case "videolist":
            cj();
            break;
        default:
            vlist();
            break;
    }

    // 分类列表获取函数
    function get_type_list() {
        global $dsql;
        $classList = [];
        $sql = "SELECT tid AS type_id, upid AS type_pid, tname AS type_name FROM sea_type ORDER BY tid ASC";
        $dsql->SetQuery($sql);
        $dsql->Execute('type_list');
        while ($row = $dsql->GetObject('type_list')) {
            $classList[] = [
                "type_id" => (int)$row->type_id,
                "type_pid" => (int)$row->type_pid,
                "type_name" => $row->type_name
            ];
        }
        return $classList;
    }

    function cj() {
        global $dsql, $rtype, $rpage, $rkey, $rday, $action, $app_apiver, $app_apipagenum, $cfg_basehost, $ids;
        $response = [
            "code" => 1,
            "msg" => "数据列表",
            "page" => $rpage,
            "limit" => $app_apipagenum,
            "list" => [],
            "class" => get_type_list() // 追加分类
        ];

        $sql = "SELECT d.*, p.body AS v_playdata, p.body1 AS v_playdata1, t.tname
                FROM sea_data d
                LEFT JOIN sea_type t ON t.tid = d.tid
                LEFT JOIN sea_playdata p ON p.v_id = d.v_id
                WHERE d.v_recycled = 0 ";
        $sql1 = "SELECT COUNT(*) AS dd FROM sea_data WHERE v_recycled = 0 ";
       
        if ($ids != "") {
            $ids = addslashes($ids);
            $sql .= " AND d.v_id IN (" . $ids . ")";
            $sql1 .= " AND v_id IN (" . $ids . ")";
        }

        if ($rtype > 0) {
            $sql .= " AND d.tid = " . $rtype;
            $sql1 .= " AND tid = " . $rtype;
        }

        if ($rday > 0) {
            $whereStr = " AND d.v_addtime > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL " . $rday . " HOUR))";
            $sql .= $whereStr;
            $sql1 .= $whereStr;
        }

        $row1 = $dsql->GetOne($sql1);
        $nums = is_array($row1) ? $row1['dd'] : 0;
        $pagecount = ceil($nums / $app_apipagenum);
       
        $sql .= " LIMIT " . ($app_apipagenum * ($rpage - 1)) . "," . $app_apipagenum;
        $dsql->SetQuery($sql);
        $dsql->Execute('video_c');

        // 在cj()函数的循环中修改:
    while ($row = $dsql->GetObject('video_c')) {
        $response['list'][] = [
            "vod_id" => $row->v_id,
            "vod_name" => $row->v_name,
            "type_id" => $row->tid,
            "type_name" => $row->tname,
            "vod_time" => MyDate('Y-m-d H:i:s', $row->v_addtime),
            "vod_remarks" => $row->v_len . " Mins",
            // 修改以下两行
            "vod_play_from" => "量子云",  // 明确两个来源名称
            "vod_play_url" => processPlayData($row->v_playdata),
            "vod_pic" => $row->v_pic
        ];
    }

        $response['pagecount'] = $pagecount;
        $response['total'] = $nums;
        echo json_encode($response, JSON_UNESCAPED_UNICODE);
    }

    function vlist() {
        global $dsql, $rtype, $rpage, $rkey, $rday, $action, $app_apiver, $app_apipagenum, $cfg_basehost;
       
        $response = [
            "code" => 1,
            "msg" => "数据列表",
            "page" => $rpage,
            "limit" => $app_apipagenum,
            "list" => [],
            "class" => get_type_list()
        ];

        $sql = "SELECT d.v_id, d.v_name, d.v_state, d.v_note, d.v_pic, d.tid, d.v_addtime, p.body AS v_playdata, p.body1 AS v_playdata1, t.tname
                FROM sea_data d
                LEFT JOIN sea_type t ON t.tid = d.tid
                LEFT JOIN sea_playdata p ON p.v_id = d.v_id
                WHERE d.v_recycled = 0 ";

        $sql1 = "SELECT COUNT(*) AS dd FROM sea_data WHERE v_recycled = 0 ";

        if ($rtype > 0) {
            $sql .= " AND d.tid = " . $rtype;
            $sql1 .= " AND tid = " . $rtype;
        }

        if ($rkey != "") {
            $sql .= " AND d.v_name LIKE '%" . $rkey . "%' ";
            $sql1 .= " AND v_name LIKE '%" . $rkey . "%' ";
        }

        $sql .= " ORDER BY d.v_addtime DESC";
       
        $row1 = $dsql->GetOne($sql1);
        $nums = is_array($row1) ? $row1['dd'] : 0;
        $pagecount = ceil($nums / $app_apipagenum);

        $sql .= " LIMIT " . ($app_apipagenum * ($rpage - 1)) . "," . $app_apipagenum;
        $dsql->SetQuery($sql);
        $dsql->Execute('video_list');

        while ($row = $dsql->GetObject('video_list')) {
            $vod_pic = $row->v_pic; // 正确赋值图片字段
            $vod_playdata = $row->v_playdata; // 正确赋值播放数据

            $response['list'][] = [
                "vod_id" => $row->v_id,
                "vod_name" => $row->v_name,
                "type_id" => $row->tid,
                "type_name" => $row->tname,
                "vod_time" => MyDate('Y-m-d H:i:s', $row->v_addtime),
                "vod_remarks" => $row->v_note,
                "vod_pic" => $vod_pic,
                "vod_play_from" => "量子云",
                "vod_play_url" => processPlayData($vod_playdata),
                "vod_playdata" => $vod_playdata
            ];
        }

        $response['pagecount'] = $pagecount;
        $response['total'] = $nums;
        echo json_encode($response, JSON_UNESCAPED_UNICODE);
    }


    function processPlayData($data) {
        if (empty($data)) return "";
        $episodes = explode('#', $data);
        $processed = [];
        foreach ($episodes as $ep) {
            $parts = explode('$', $ep);
            if (count($parts) >= 2) {
                // 提取干净的剧集名和URL(去除可能的来源前缀)
                $name = trim(end(explode('#', $parts[0])));  // 处理类似 "量子云#第02集" 的情况
                $url = trim($parts[1]);
                $processed[] = $name . '$' . $url;
            }
        }
        return implode('#', $processed);
    }

    function isnum($varnum) {
        $string_var = "0123456789";
        for ($i = 0; $i < strlen($varnum); $i++) {
            if (strpos($string_var, $varnum[$i]) === false) {
                return false;
            }
        }
        return true;
    }
    ?>

    [/code]


    修改后的json接口代码zyapi.php

    [code]

    <?php
    /******************************
    海洋CMS
    功能:资源发布zyAPI模块
    版本:1.0
    开发:海洋
    ******************************/

    header('Content-Type: application/json; charset=UTF-8');

    require_once("include/common.php");
    require_once("include/main.class.php");
    require_once("data/config.cache.inc.php");

    // 判断是否开启api服务
    $isopenapi = file_get_contents("data/admin/isapi.txt");
    if ($isopenapi == "0") {
        echo json_encode(["code" => 0, "msg" => "服务已关闭"]);
        exit;
    }

    $app_apipagenum = 20; // 每页显示条数
    $action = addslashes($_GET['ac']);
    $rtype = addslashes($_GET['t']);
    $rpage = addslashes($_GET['pg']);
    $rkey = addslashes($_GET['wd']);
    $rday = addslashes($_GET['h']);
    $ids = addslashes($_GET['ids']);

    if (!isNum($rtype)) { $rtype = 0; } else { $rtype = intval($rtype); }
    if (!isNum($rpage)) { $rpage = 1; } else { $rpage = intval($rpage); }
    if ($rpage < 1) { $rpage = 1; }
    if (!isNum($rday)) { $rday = 0; } else { $rday = intval($rday); }

    $app_apiver = "5.0";

    switch($action) {
        case "videolist":
            cj();
            break;
        default:
            vlist();
            break;
    }

    // 分类列表获取函数
    function get_type_list() {
        global $dsql;
        $classList = [];
        $sql = "SELECT tid AS type_id, upid AS type_pid, tname AS type_name FROM sea_type ORDER BY tid ASC";
        $dsql->SetQuery($sql);
        $dsql->Execute('type_list');
        while ($row = $dsql->GetObject('type_list')) {
            $classList[] = [
                "type_id" => (int)$row->type_id,
                "type_pid" => (int)$row->type_pid,
                "type_name" => $row->type_name
            ];
        }
        return $classList;
    }

    function cj() {
        global $dsql, $rtype, $rpage, $rkey, $rday, $action, $app_apiver, $app_apipagenum, $cfg_basehost, $ids;
        $response = [
            "code" => 1,
            "msg" => "数据列表",
            "page" => $rpage,
            "limit" => $app_apipagenum,
            "list" => [],
            "class" => get_type_list() // 追加分类
        ];

        $sql = "SELECT d.*, p.body AS v_playdata, p.body1 AS v_playdata1, t.tname
                FROM sea_data d
                LEFT JOIN sea_type t ON t.tid = d.tid
                LEFT JOIN sea_playdata p ON p.v_id = d.v_id
                WHERE d.v_recycled = 0 ";
        $sql1 = "SELECT COUNT(*) AS dd FROM sea_data WHERE v_recycled = 0 ";
       
        if ($ids != "") {
            $ids = addslashes($ids);
            $sql .= " AND d.v_id IN (" . $ids . ")";
            $sql1 .= " AND v_id IN (" . $ids . ")";
        }

        if ($rtype > 0) {
            $sql .= " AND d.tid = " . $rtype;
            $sql1 .= " AND tid = " . $rtype;
        }

        if ($rday > 0) {
            $whereStr = " AND d.v_addtime > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL " . $rday . " HOUR))";
            $sql .= $whereStr;
            $sql1 .= $whereStr;
        }

        $row1 = $dsql->GetOne($sql1);
        $nums = is_array($row1) ? $row1['dd'] : 0;
        $pagecount = ceil($nums / $app_apipagenum);
       
        $sql .= " LIMIT " . ($app_apipagenum * ($rpage - 1)) . "," . $app_apipagenum;
        $dsql->SetQuery($sql);
        $dsql->Execute('video_c');

        // 在cj()函数的循环中修改:
    while ($row = $dsql->GetObject('video_c')) {
        $response['list'][] = [
            "vod_id" => $row->v_id,
            "vod_name" => $row->v_name,
            "type_id" => $row->tid,
            "type_name" => $row->tname,
            "vod_time" => MyDate('Y-m-d H:i:s', $row->v_addtime),
            "vod_remarks" => $row->v_len . " Mins",
            // 修改以下两行
            "vod_play_from" => "量子云",  // 明确两个来源名称
            "vod_play_url" => processPlayData($row->v_playdata),
            "vod_pic" => $row->v_pic
        ];
    }

        $response['pagecount'] = $pagecount;
        $response['total'] = $nums;
        echo json_encode($response, JSON_UNESCAPED_UNICODE);
    }

    function vlist() {
        global $dsql, $rtype, $rpage, $rkey, $rday, $action, $app_apiver, $app_apipagenum, $cfg_basehost;
       
        $response = [
            "code" => 1,
            "msg" => "数据列表",
            "page" => $rpage,
            "limit" => $app_apipagenum,
            "list" => [],
            "class" => get_type_list()
        ];

        $sql = "SELECT d.v_id, d.v_name, d.v_state, d.v_note, d.v_pic, d.tid, d.v_addtime, p.body AS v_playdata, p.body1 AS v_playdata1, t.tname
                FROM sea_data d
                LEFT JOIN sea_type t ON t.tid = d.tid
                LEFT JOIN sea_playdata p ON p.v_id = d.v_id
                WHERE d.v_recycled = 0 ";

        $sql1 = "SELECT COUNT(*) AS dd FROM sea_data WHERE v_recycled = 0 ";

        if ($rtype > 0) {
            $sql .= " AND d.tid = " . $rtype;
            $sql1 .= " AND tid = " . $rtype;
        }

        if ($rkey != "") {
            $sql .= " AND d.v_name LIKE '%" . $rkey . "%' ";
            $sql1 .= " AND v_name LIKE '%" . $rkey . "%' ";
        }

        $sql .= " ORDER BY d.v_addtime DESC";
       
        $row1 = $dsql->GetOne($sql1);
        $nums = is_array($row1) ? $row1['dd'] : 0;
        $pagecount = ceil($nums / $app_apipagenum);

        $sql .= " LIMIT " . ($app_apipagenum * ($rpage - 1)) . "," . $app_apipagenum;
        $dsql->SetQuery($sql);
        $dsql->Execute('video_list');

        while ($row = $dsql->GetObject('video_list')) {
            $vod_pic = $row->v_pic; // 正确赋值图片字段
            $vod_playdata = $row->v_playdata; // 正确赋值播放数据

            $response['list'][] = [
                "vod_id" => $row->v_id,
                "vod_name" => $row->v_name,
                "type_id" => $row->tid,
                "type_name" => $row->tname,
                "vod_time" => MyDate('Y-m-d H:i:s', $row->v_addtime),
                "vod_remarks" => $row->v_note,
                "vod_pic" => $vod_pic,
                "vod_play_from" => "量子云",
                "vod_play_url" => processPlayData($vod_playdata),
                "vod_playdata" => $vod_playdata
            ];
        }

        $response['pagecount'] = $pagecount;
        $response['total'] = $nums;
        echo json_encode($response, JSON_UNESCAPED_UNICODE);
    }


    function processPlayData($data) {
        if (empty($data)) return "";
        $episodes = explode('#', $data);
        $processed = [];
        foreach ($episodes as $ep) {
            $parts = explode('$', $ep);
            if (count($parts) >= 2) {
                // 提取干净的剧集名和URL(去除可能的来源前缀)
                $name = trim(end(explode('#', $parts[0])));  // 处理类似 "量子云#第02集" 的情况
                $url = trim($parts[1]);
                $processed[] = $name . '$' . $url;
            }
        }
        return implode('#', $processed);
    }

    function isnum($varnum) {
        $string_var = "0123456789";
        for ($i = 0; $i < strlen($varnum); $i++) {
            if (strpos($string_var, $varnum[$i]) === false) {
                return false;
            }
        }
        return true;
    }
    ?>

    [/code]



    原版显示的是xml接口,修改版显示的是json接口

    问题:调用这个json接口后,tvbox显示加载成功,首页也显示出了完整的列表。但是播放视频全部都是同一个视频。

    比如第一个视频是:海洋cms

    之后我随便点开一个名字不同的视频,接下的全部播放的都是这个。

    您能帮我看看代码哪里出现问题了吗?十分无比的万分感谢了!


  • hui122 8月前
    0 引用 4

    完整代码在附件里

    接口地址:http://域名/api.php

    需要xml接口就用zyapi.php  需要json接口就用api.php

    后续看有什么问题再修复看看吧。感谢!

    上传的附件:
    • api.php
      · 上传时间:2025-05-08 | 下载次数:300 次 | 文件大小:13.53K
  • 0 引用 5

    能在APP上播放就行,影视啊,TVBOX之类的,LZ这个我试了下,能显示,搜索和筛选好像不能用

    本人小白一枚,感谢LZ分享

  • nohacks 2月前
    0 引用 6
    tvbox可以支持XML格式呀 ,直接使用海洋的zyapi.php就可以,格式选xml
返回