虽然已经找到别的方法代替了,但是我不喜欢其它的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
之后我随便点开一个名字不同的视频,接下的全部播放的都是这个。
您能帮我看看代码哪里出现问题了吗?十分无比的万分感谢了!