2024-08-31 01:03:37 +08:00

122 lines
4.4 KiB
PHP
Executable File

<?php
/**
* 图片请求转发;
* https://api.kodcloud.com/#explorer&pathFile=%2Fwww%2Fwwwroot%2Fapi.kodcloud.com%2Fplugins%2FplatformKod%2Fcontroller%2Ftools%2FwallpageApi.class.php
*/
class userViewImage extends Controller{
public function __construct(){
parent::__construct();
}
// type=show;[page=xx]; type=search;[words=xx,page=xx]
public static $allowCache = 1;
public function request($load){
$apiArr = $this->loadApi();
$type = $this->in['type'] == 'search' ? 'search':'show';
if(!is_array($apiArr) || !is_array($apiArr[$type]) ){
show_json('Api config error!',false);
}
$api = $apiArr[$type];
$search = _get($this->in,'search','');
$page = intval(_get($this->in,'page','1'));
$pageMax= intval(_get($api['parse'],'pageTotalSet',0));
$page = $page <= 0 ? 1: (($pageMax && $page >= $pageMax) ? $pageMax : $page);
$pageValue = $api['parse']['pageOffset'] ? intval($api['parse']['pageOffset'] * $page) : $page;
$replaceTo = array($pageValue,rawurlencode($search));
$url = str_replace(array('{{page}}','{{search}}'),$replaceTo,$api['url']);
$cacheKey = "wallpageImageApi-".md5($url);
$result = Cache::get($cacheKey);
if(is_array($result) && self::$allowCache){show_json($result,true);}
$header = is_array($api['header']) ? $api['header']: false;
$res = url_request($url,'GET',false,$header,false,false,30);
$result = $this->imageParse($res['data'],$api);
if(!$result){show_json("Request data error!",false);}
$result['pageInfo']['page'] = $page;
Cache::set($cacheKey,$result,600);
show_json($result,true);
}
private function loadApi(){
$url = $GLOBALS['config']['settings']['kodApiServer'];
if(!$url) return false;
$result = Cache::get("wallpageImageApi");
if(is_array($result) && self::$allowCache) return $result;
$res = url_request($url.'wallpage/api','GET',false,false,false,false,30);
$json = json_decode(_get($res,'data',''),true);
if(!$json || !$json['code'] || !is_array($json['data'])) return false;
Cache::set("wallpageImageApi",$json['data'],3600);
return $json['data'];
}
private function imageParse(&$body,$api){
if( strstr($body,'charset=gb2312') ||
strstr($body,'charset=gbk')){
$body = iconv_to($body,'gbk','utf-8');
}
$parse = $api['parse'];
$list = array();
$pageInfo = array(
'pageTotal' => _get($parse,'pageTotalSet',''),
'totalNum' => _get($parse,'totalNumSet',''),
);
$urlAdd = $parse['urlAdd'] ? $parse['urlAdd']: '';
if($parse['type'] == 'json'){
$json = json_decode($body,true);
$listData = $parse['arr'] ? _get($json,$parse['arr'],array()) : $json;
if(!$listData) return false;
foreach ($listData as $item) {
$list[] = array(
'link' => $urlAdd._get($item,$parse['link']),
'thumb' => _get($item,$parse['thumb']),
'title' => _get($item,$parse['title'])
);
}
$pageInfo['pageTotal'] = _get($json,$parse['pageTotal'],$pageInfo['pageTotal']);
$pageInfo['totalNum'] = _get($json,$parse['totalNum'], $pageInfo['totalNum']);
return array('list'=>$list,'pageInfo'=>$pageInfo);
}
if(!$parse['link'] || !$body) return false;
$this->matchSet('link',$parse,$body,$list,true);
$this->matchSet('thumb',$parse,$body,$list,true);
$this->matchSet('title',$parse,$body,$list,true);
$this->matchSet('pageTotal',$parse,$body,$pageInfo);
$this->matchSet('totalNum',$parse,$body,$pageInfo);
return array('list'=>$list,'pageInfo'=>$pageInfo);
}
private function matchSet($key,$parse,$body,&$data,$isList=false){
$isArr = in_array($key,array('thumb','title'));
$reg = $parse[$key] ? $parse[$key] : ($isArr ? $parse['link']:'');
$regAt = $parse[$key.'Reg'];
$regReplace = $parse[$key.'Replace'];
if(!$reg && !$regAt) return;
$match = preg_match_all('/'.$reg.'/',$body,$matchRes);//pr($matchRes);exit;
if(!$match || !is_array($matchRes[0])) return;
if(!$isList){ // 单个值处理;
$regAt = str_replace('{{last}}',count($matchRes[0]) - 1,$regAt);
$data[$key] = intval(_get($matchRes,$regAt));
return;
}
// 多个值处理;
$listMatch = _get($matchRes,$regAt);
foreach ($listMatch as $i => $val){
$value = $val;
if(!$data[$i]){$data[$i] = array();}
if(is_array($regReplace) && !$regReplace[0]){
$value = str_replace($regReplace[1],$regReplace[2],$value);
}
if(is_array($regReplace) && $regReplace[0]){
$value = preg_replace('/'.$regReplace[1].'/',$regReplace[2],$value);
}
$data[$i][$key] = $value;
}
}
}