This commit is contained in:
Default
2025-04-21 22:32:40 +08:00
parent 52236ab6f7
commit f21ece4de1
8 changed files with 204 additions and 80 deletions

View File

@@ -1,14 +1,18 @@
{site:forgelist count="3" d_key="d_key" d_val="novel" cache_life="1000"}
{site:helper func="initHomeTKD" /}
<!-- {site:forgelist count="3" d_key="d_key" d_val="novel" cache_life="1000"}
<li>
Index: {$d_key}
Title: {$novel.n_forge_title}
Author: {$novel.n_name_pinyin}
</li>
{/site:forgelist}
{/site:forgelist} -->
<!-- {novel:ranklist count="10" sort_type="total" n_status="wanjie" n_sex="man" d_key="d_key" d_val="novel" cache_life="1000"}
<li>
{php}var_dump($novel){/php}
Index: {$d_key}
Title: {$novel.n_name}
Author: {$novel.n_category}

View File

@@ -262,4 +262,16 @@ class SiteContext
return $arrResult;
}
/**
* 视图反向控制器(注释函数),在视图开头调用,用来初始化一些操作。这里尽量不要复杂逻辑。这是个样例
*
* @return void
*/
public function initHomeTKD()
{
ConverterMovel::setVal([
'strSiteName' => $this->DomainModel->d_name,
]);
}
}

View File

@@ -74,6 +74,26 @@ class Scheduler
*/
public function crawlFull()
{
$Site = $this->getSite();
$arrVSourceId = [];
$arrVSourceId[] = ['v_source_id' => 66281];
$arrAllVideoInfoPage = $Site->getVideoInfoPageList($arrVSourceId);
foreach ($arrAllVideoInfoPage as $VideoInfoPage) {
$arrVideo = $VideoInfoPage->getVideo();
print_r($arrVideo);
}
return;
$intLimit = 10;
$Site = $this->getSite();
@@ -91,12 +111,11 @@ class Scheduler
];
$arrVideoPageList = $Site->getVideoPageList($arrFilter);
foreach ($arrVideoPageList as $VideoPage) {
$arrAllVideoPager = $VideoPage->getVideoPager();
$arrVideoPager = $arrVideoPageList[0]->getVideoPager();
$arrVSourceId = [];
foreach ($arrAllVideoPager['list'] as $arrVideoPager) {
foreach ($arrVideoPager['list'] as $arrVideoPager) {
$arrVSourceId[] = ['v_source_id' => (int)$arrVideoPager['vod_id']];
}
@@ -105,18 +124,24 @@ class Scheduler
$arrVideo = $VideoInfoPage->getVideo();
print_r($arrVideo);
}
// foreach ($arrVideoPageList as $VideoPage) {
// $arrAllVideoPager = $VideoPage->getVideoPager();
// $arrVSourceId = [];
// foreach ($arrAllVideoPager['list'] as $arrVideoPager) {
// $arrVSourceId[] = ['v_source_id' => (int)$arrVideoPager['vod_id']];
// }
// $arrAllVideoInfoPage = $Site->getVideoInfoPageList($arrVSourceId);
// foreach ($arrAllVideoInfoPage as $VideoInfoPage) {
// $arrVideo = $VideoInfoPage->getVideo();
// print_r($arrVideo);
// }
// }
}
}
}
$arrCover = [];
if ($arrCover) {
// $Site->downRemoteImgToLocal($arrCover);
}
return;
}
}

View File

@@ -68,18 +68,8 @@ class Site
],
'headers' => [
'User-Agent' => 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Accept-Language' => 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Referer' => $this->strDomain,
'Connection' => 'keep-alive',
'sec-ch-ua' => '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"',
'sec-ch-ua-mobile' => '?1',
'sec-ch-ua-platform' => '"Android"',
'sec-fetch-dest' => 'document',
'sec-fetch-mode' => 'navigate',
'sec-fetch-site' => 'same-origin',
'sec-fetch-user' => '?1',
'upgrade-insecure-requests' => '1',
],
'pool_size' => 20,
'verify' => false,
@@ -261,7 +251,7 @@ class Site
*/
public function getVideoUri(int $intVSourceId): string
{
return sprintf('/inc/api_mac10.php?ac=detail&tds=%s', $intVSourceId);
return sprintf('/inc/api_mac10.php?ac=detail&ids=%s', $intVSourceId);
}
/**
@@ -279,17 +269,12 @@ class Site
$arrPromises = [];
foreach ($arrFilter as $intKey => $arrItem) {
$arrFilter[$intKey]['uri'] = $this->getVideoUri($arrItem['v_source_id']);
$arrPromises[$intKey] = $arrFilter[$intKey]['uri'];
$arrPromises[$intKey] = $this->getClient()->getAsync($arrFilter[$intKey]['uri']);
}
print_r($arrFilter);
$arrResults = Promise\Utils::settle($arrPromises)->wait();
var_dump($arrResults);
return [];
$arrSuccessfulResults = array_filter($arrResults, function ($arrResult) {
return $arrResult['state'] === 'fulfilled';
});
@@ -297,8 +282,6 @@ class Site
foreach ($arrSuccessfulResults as $intKey => $arrResult) {
$Response = $arrResult['value'];
var_dump($arrResult);
$strContent = $Response->getBody()->getContents();;
$VideoInfoPage = $this->getVideoInfoPage($this, $arrFilter[$intKey]['uri']);

View File

@@ -54,6 +54,16 @@ class VideoInfoPage extends BasePage
if (empty($this->arrVideo)) {
$this->arrVideo = json_decode($this->getContent(), true);
$this->arrVideo = $this->arrVideo['list'][0];
$this->arrVideo['vod_play_url'] = str_replace('#', '$', $this->arrVideo['vod_play_url']);
$this->arrVideo['vod_play_url'] = explode('$', $this->arrVideo['vod_play_url']);
$this->arrVideo['vod_play_url'] = array_chunk($this->arrVideo['vod_play_url'], 2);
foreach ($this->arrVideo['vod_play_url'] as $intKey => $arrVal) {
$this->arrVideo['vod_play_url'][$intKey] = [
'name' => $arrVal[0],
'url' => $arrVal[1],
];
}
}
return $this->arrVideo;

View File

@@ -7,7 +7,7 @@ use think\template\TagLib;
class Novel extends TagLib
{
protected $tags = [
'list' => ['attr' => 'limit,n_category,sort_type,n_status,n_sex,key,diff_key,cache_life,d_key,d_val', 'close' => 1],
'list' => ['attr' => 'count,n_category,sort_type,n_status,n_sex,diff_key,cache_life,d_key,d_val', 'close' => 1],
'pager' => ['attr' => 'page,limit,n_category,sort_type,n_status,n_sex,key,diff_key,cache_life,d_key,d_val,p_val,func,export_name', 'close' => 1],
'pagerexp' => ['attr' => 'page,limit,n_category,sort_type,n_status,n_sex,key,diff_key,cache_life,d_key,d_val,p_val,func,export_name', 'close' => 0],
'info' => ['attr' => 'n_id,n_key', 'close' => 0],
@@ -15,6 +15,8 @@ class Novel extends TagLib
'status' => ['attr' => 'd_key,d_val'],
'sex' => ['attr' => 'd_key,d_val'],
'category' => ['attr' => 'd_key,d_val,n_sex'],
'ranklist' => ['attr' => 'count,sort_type,n_status,n_sex,diff_key,cache_life,d_key,d_val', 'close' => 1],
];
private function customBuildVar($mixedArgs)
@@ -27,8 +29,67 @@ class Novel extends TagLib
}
/**
* novel 自定义标签
* tagRankList
*
* @param array $tag
* @param string $content
* @return void
*/
public function tagRankList($tag, $content)
{
$count = $tag['count'] ?? '10';
$sort_type = $tag['sort_type'] ?? "";
$n_status = $tag['n_status'] ?? "all";
$n_sex = $tag['n_sex'] ?? "all";
$diff_key = $tag['diff_key'] ?? "";
$cache_life = $tag['cache_life'] ?? '0';
$d_key = $tag['d_key'] ?? 'd_key';
$d_val = $tag['d_val'] ?? 'd_val';
$sort_type = $this->customBuildVar($sort_type);
$n_status = $this->customBuildVar($n_status);
$n_sex = $this->customBuildVar($n_sex);
$diff_key = $this->customBuildVar($diff_key);
$cache_life = $this->customBuildVar($cache_life);
$arrDataName = randomString(5);
$strParse = <<<EOT
<?php
\${$arrDataName} = app(\\app\\services\\NovelService::class)->getRankList([
'count' => {$count},
'sort_type' => {$sort_type},
'n_status' => {$n_status},
'n_sex' => {$n_sex},
'diff_key' => {$diff_key},
'cache_life' => {$cache_life}
]);
if (!empty(\${$arrDataName}) && is_array(\${$arrDataName})):
?>
EOT;
$strParse .= <<<EOT
<?php foreach (\${$arrDataName} as \${$d_key} => \${$d_val}): ?>
EOT;
$strParse .= $content;
$strParse .= <<<EOT
<?php endforeach; ?>
<?php endif; ?>
EOT;
return $strParse;
}
/**
* tagPagerExp
*
* @param array $tag
* @param string $content
* @return void
*/
public function tagPagerExp($tag, $content)
{
@@ -36,7 +97,11 @@ class Novel extends TagLib
}
/**
* novel 自定义标签
* tagPager
*
* @param array $tag
* @param string $content
* @return void
*/
public function tagPager($tag, $content)
{

View File

@@ -20,6 +20,7 @@ class Site extends TagLib
'replace' => ['attr' => 'code,diff', 'close' => 0],
'forgelist' => ['attr' => 'count,diff_key,cache_life,d_key,d_val', 'close' => 1],
'helper' => ['attr' => 'func', 'close' => 0],
];
private function customBuildVar($mixedArgs)
@@ -31,6 +32,26 @@ class Site extends TagLib
}
}
/**
* 小说详情URL生成器
*
* @param array $n_id
* @return string
*/
public function tagHelper($tag)
{
$strFunc = (string)$tag['func'];
// $strFunc = $this->customBuildVar($strFunc);
$strParse = <<<EOD
<?php
app(\\app\\services\\SiteContext::class)->{$strFunc}();
?>
EOD;
return $strParse;
}
/**
* tagRankList
@@ -297,11 +318,6 @@ EOD;
return $strParse;
}
/**
* 内容替换
*

View File

@@ -374,4 +374,13 @@ resData = [
</li>
{/site:forgelist}
# 14、 视图反向控制器(注释函数),在视图开头调用,用来初始化一些操作。这里尽量不要复杂逻辑
# 传参与默认值(传参用下面的变量名,名称不需要$符号, 值的话如果用第三方变量作为值,需要带$符号)
$func # SiteContext 里面的方法名
# 样例
{site:helper func="initHomeTKD" /}
```