From b943ea2ab7ada6d1f3c4bdcce93a974edff60a40 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 21 Apr 2026 01:02:21 +0800 Subject: [PATCH] debug --- code/app/home/config/router.php | 9 +- code/app/model/DomainModel.php | 90 +++- code/app/model/VideoModel.php | 47 ++ code/app/services/SiteContext.php | 72 +++ code/extend/copyright/Auth.php | 13 + code/extend/db/mongo/MongoBase.php | 187 ++++++++ code/extend/ddl/Init.php | 9 + domain_probe_results.json | 706 +++++++++++++++++++++++++++++ 8 files changed, 1119 insertions(+), 14 deletions(-) create mode 100644 code/extend/copyright/Auth.php create mode 100644 code/extend/db/mongo/MongoBase.php create mode 100644 domain_probe_results.json diff --git a/code/app/home/config/router.php b/code/app/home/config/router.php index c7a604a..c257999 100644 --- a/code/app/home/config/router.php +++ b/code/app/home/config/router.php @@ -43,8 +43,8 @@ if ($strTmpCode == 'videoGpt1') { return view('rss/baidu.xml')->contentType('text/xml'); })->ext('xml'); - $routeGetHead('rss/so', function () { - return view('rss/so.xml')->contentType('text/xml'); + $routeGetHead('rss/so', function (\think\Request $Request, SiteContext $SiteContext) { + return $SiteContext->getSoSitemapResponse(); })->ext('xml'); $routeGetHead('/sitemap_index', function (\think\Request $Request, SiteContext $SiteContext) { @@ -413,9 +413,8 @@ if ($strTmpCode == 'videoGpt1') { /** * /rss/so */ - Route::get('rss/so', function () { - return view('rss/so.xml') - ->contentType('text/xml'); + Route::get('rss/so', function (\think\Request $Request, SiteContext $SiteContext) { + return $SiteContext->getSoSitemapResponse(); })->ext('xml'); /** diff --git a/code/app/model/DomainModel.php b/code/app/model/DomainModel.php index a15a28a..2ff3877 100644 --- a/code/app/model/DomainModel.php +++ b/code/app/model/DomainModel.php @@ -1017,9 +1017,11 @@ class DomainModel extends BaseModel } if (!is_array($this->t_cfg) || !array_key_exists($strKey, $this->t_cfg)) { + $strFallbackValue = $this->resolveLegacyTemplateFallback((string)$strKey); + if ($strFallbackValue !== null) { + return $strFallbackValue; + } return ''; - $strError = sprintf("t_cfg [%s] not found! %s ", $strKey , $strDomain . '-' . $strController . '-' . $strAction. '-' . $strDiff. '-' . $boolJoin.'-'.request()->url); - throw new \Exception($strError); } $intSfgId = $this->t_cfg[$strKey]['sfg_id']; @@ -1070,13 +1072,83 @@ class DomainModel extends BaseModel $strError = sprintf("subject fomart [%s] not found !", $strKey); throw new \Exception($strError); } - - return $SubjectFomartModel->sf_val; - } - - /** - * Undocumented function - * + + return $SubjectFomartModel->sf_val; + } + + protected function resolveLegacyTemplateFallback(string $strKey): ?string + { + if (!is_array($this->t_cfg) || !isset($this->t_cfg['pages'], $this->t_cfg['url_family'])) { + return null; + } + + $arrSeoKeyMap = [ + 'VIDEO@INDEX@INDEX@TITLE' => ['title', 'home'], + 'VIDEO@INDEX@INDEX@KEYWORDS' => ['keywords', 'home'], + 'VIDEO@INDEX@INDEX@DESCRIPTION' => ['description', 'home'], + 'VIDEO@GETCATEGORYINDEX@TITLE' => ['title', 'category_index'], + 'VIDEO@GETCATEGORYINDEX@KEYWORDS' => ['keywords', 'category_index'], + 'VIDEO@GETCATEGORYINDEX@DESCRIPTION' => ['description', 'category_index'], + 'VIDEO@GETCATEGORY@TITLE' => ['title', 'category_list'], + 'VIDEO@GETCATEGORY@KEYWORDS' => ['keywords', 'category_list'], + 'VIDEO@GETCATEGORY@DESCRIPTION' => ['description', 'category_list'], + 'VIDEO@GETSEARCHVIDEO@TITLE' => ['title', 'search'], + 'VIDEO@GETSEARCHVIDEO@KEYWORDS' => ['keywords', 'search'], + 'VIDEO@GETSEARCHVIDEO@DESCRIPTION' => ['description', 'search'], + 'VIDEO@GETVIDEORANKINDEX@TITLE' => ['title', 'rank_index'], + 'VIDEO@GETVIDEORANKINDEX@KEYWORDS' => ['keywords', 'rank_index'], + 'VIDEO@GETVIDEORANKINDEX@DESCRIPTION' => ['description', 'rank_index'], + 'VIDEO@GETVIDEORANKLIST@TITLE' => ['title', 'rank_list'], + 'VIDEO@GETVIDEORANKLIST@KEYWORDS' => ['keywords', 'rank_list'], + 'VIDEO@GETVIDEORANKLIST@DESCRIPTION' => ['description', 'rank_list'], + 'VIDEO@GETVIDEOINFO@TITLE' => ['title', 'detail'], + 'VIDEO@GETVIDEOINFO@KEYWORDS' => ['keywords', 'detail'], + 'VIDEO@GETVIDEOINFO@DESCRIPTION' => ['description', 'detail'], + 'VIDEO@GETVIDEOPLAY@TITLE' => ['title', 'play'], + 'VIDEO@GETVIDEOPLAY@KEYWORDS' => ['keywords', 'play'], + 'VIDEO@GETVIDEOPLAY@DESCRIPTION' => ['description', 'play'], + ]; + + if (isset($arrSeoKeyMap[$strKey])) { + [$strSeoCode, $strSeoPage] = $arrSeoKeyMap[$strKey]; + + try { + $SiteContext = \think\Container::getInstance()->make(\app\services\SiteContext::class); + return (string)$SiteContext->getSeoTkd($strSeoCode, $strSeoPage); + } catch (\Throwable $Throwable) { + return ''; + } + } + + try { + $arrRuntimeStyle = \app\common\helper\SiteStyle::getConfig($this, (string)($this->d_domain ?? '')); + $UrlBuilder = new \app\common\helper\UrlBuilder($arrRuntimeStyle); + } catch (\Throwable $Throwable) { + return ''; + } + + $strTemplateCode = (string)(request()->TemplatesModel->t_code ?? ''); + if ($strTemplateCode !== '' && $strTemplateCode !== 'videoGpt1') { + return match ($strKey) { + 'VIDEO_RANK_INDEX_URL' => '/phb-index', + 'VIDEO_SEARCH_LIST_URL' => '/query.html', + 'VIDEO_HISTORY_LIST_URL' => '/history.html', + default => null, + }; + } + + return match ($strKey) { + 'VIDEO_CATEGORY_INDEX_URL' => $UrlBuilder->categoryHome(), + 'VIDEO_RANK_INDEX_URL' => $UrlBuilder->rankIndex(), + 'VIDEO_SEARCH_LIST_URL' => $UrlBuilder->searchEntry(), + 'VIDEO_HISTORY_LIST_URL' => $UrlBuilder->history(), + default => null, + }; + } + + /** + * Undocumented function + * * @param string $strKey * @return string */ diff --git a/code/app/model/VideoModel.php b/code/app/model/VideoModel.php index 1b09338..7baf8b7 100644 --- a/code/app/model/VideoModel.php +++ b/code/app/model/VideoModel.php @@ -172,6 +172,53 @@ class VideoModel extends MongoModel return $this->findManyWithCache($arrFilter, $intCount, $arrSort, $arrOptions, $strKey, $intLifeTime); } + /** + * 轻量级 sitemap / rss 列表,只取生成 URL 需要的字段,避免大对象缓存撑爆内存。 + */ + public function findSitemapItemsWithCache( + array $arrFilter, + int $intCount = 1000, + array $arrSort = [], + string $strKey = '', + int $intLifeTime = 24 * 3600 + ): array { + try { + $arrResult = $this->checkCacheByKey($strKey); + if ($arrResult !== NULL) { + return is_array($arrResult) ? $arrResult : []; + } + + $arrOptions = self::$arrOptions; + $arrOptions['projection'] = [ + '_id' => 0, + 'v_id' => 1, + 'v_name_en' => 1, + 'v_publish_date' => 1, + 'created_at' => 1, + 'updated_at' => 1, + ]; + $arrOptions['limit'] = max(1, $intCount); + + if (!empty($arrSort)) { + $arrOptions['sort'] = $arrSort; + } + + $Cursor = $this->getCol()->find($arrFilter, $arrOptions); + $arrResult = iterator_to_array($Cursor); + + foreach ($arrResult as &$arrItem) { + applyToKeys($arrItem, ['created_at', 'updated_at'], 'formatMongoDate'); + } + unset($arrItem); + + $this->setCacheByKey($strKey, $arrResult, $intLifeTime); + + return $arrResult; + } catch (\Throwable $Throwable) { + return []; + } + } + /** * find one Video * diff --git a/code/app/services/SiteContext.php b/code/app/services/SiteContext.php index 09a8175..1c3a205 100644 --- a/code/app/services/SiteContext.php +++ b/code/app/services/SiteContext.php @@ -13,6 +13,7 @@ use app\model\ChapterModel; use app\model\SystemConfigModel; use app\model\NovelClicksModel; use app\model\NovelModel; +use app\model\VideoModel; use app\common\helper\SiteStyle; use app\common\helper\CssBuilder; use app\common\helper\JsBuilder; @@ -566,6 +567,72 @@ class SiteContext exit; } + /** + * 兼容旧站的 /rss/so.xml。 + * 避免走模板标签 video:list 一次性读取/缓存大量完整视频文档导致内存溢出。 + */ + public function getSoSitemapResponse(): Response + { + $strDomain = trim((string)($this->DomainModel->d_domain ?? '')); + $strHost = $strDomain === '' ? trim((string)$this->Request->host()) : $strDomain; + $strCacheKey = sprintf('SiteContext:getSoSitemapResponse:%s', $strHost); + + $arrRows = VideoModel::getInstance()->findSitemapItemsWithCache( + [], + 1000, + ['created_at' => -1, 'v_id' => -1], + $strCacheKey, + 86400 + ); + + $arrXml = [ + '', + '', + ]; + + $VideoService = app(VideoService::class); + foreach ($arrRows as $arrVideo) { + $intVId = (int)($arrVideo['v_id'] ?? 0); + $strSlug = trim((string)($arrVideo['v_name_en'] ?? '')); + if ($intVId <= 0 || $strSlug === '') { + continue; + } + + $strPath = $VideoService->getVideoInfoUrl($intVId, $strSlug); + if ($strPath === '') { + continue; + } + + $strLoc = 'https://www.' . $strHost . $strPath; + $strLastmod = trim((string)($arrVideo['v_publish_date'] ?? '')); + if ($strLastmod === '') { + $strLastmod = trim((string)($arrVideo['updated_at'] ?? '')); + } + if ($strLastmod === '') { + $strLastmod = trim((string)($arrVideo['created_at'] ?? '')); + } + if ($strLastmod !== '') { + $intTs = strtotime($strLastmod); + if ($intTs !== false) { + $strLastmod = date('Y-m-d', $intTs); + } + } + + $arrXml[] = ''; + $arrXml[] = '' . htmlspecialchars($strLoc, ENT_QUOTES | ENT_XML1, 'UTF-8') . ''; + if ($strLastmod !== '') { + $arrXml[] = '' . htmlspecialchars($strLastmod, ENT_QUOTES | ENT_XML1, 'UTF-8') . ''; + } + $arrXml[] = ''; + } + + $arrXml[] = ''; + + return response(implode("\n", $arrXml), 200, [ + 'Content-Type' => 'application/xml; charset=UTF-8', + ]); + } + /** * 限速访问 * @@ -817,6 +884,11 @@ class SiteContext return ''; } + $arrTemplateCfg = is_array($this->DomainModel->t_cfg ?? null) ? $this->DomainModel->t_cfg : []; + if (!array_key_exists($strLegacyKey, $arrTemplateCfg)) { + return ''; + } + try { return $this->normalizeSeoText($this->converterTemplate($strLegacyKey)); } catch (\Throwable $Throwable) { diff --git a/code/extend/copyright/Auth.php b/code/extend/copyright/Auth.php new file mode 100644 index 0000000..0eb58bc --- /dev/null +++ b/code/extend/copyright/Auth.php @@ -0,0 +1,13 @@ +getMongoConfig(); + $this->client = $this->buildClient($config); + $this->db = $this->client->selectDatabase((string) $config['database']); + } + + public function getDb(): Database + { + return $this->db; + } + + public function getNextSequence(string $strCollection, string $strSequenceName): int + { + $result = $this->getCollection($strCollection)->findOneAndUpdate( + ['_id' => $strSequenceName], + ['$inc' => ['sequence_value' => 1]], + [ + 'upsert' => true, + 'returnDocument' => FindOneAndUpdate::RETURN_DOCUMENT_AFTER, + ] + $this->getTypeMapOptions() + ); + + return (int) ($result['sequence_value'] ?? 1); + } + + public function insertOne(string $strCollection, array $arrData, array $arrOptions = []): mixed + { + $result = $this->getCollection($strCollection)->insertOne($arrData, $arrOptions); + return $result->getInsertedId(); + } + + public function insertMany(string $strCollection, array $arrData, array $arrOptions = []): int + { + $result = $this->getCollection($strCollection)->insertMany($arrData, $arrOptions); + return $result->getInsertedCount(); + } + + public function findOne(string $strCollection, array $arrFilter = [], array $arrOptions = []): ?array + { + $result = $this->getCollection($strCollection)->findOne( + $arrFilter, + $arrOptions + $this->getTypeMapOptions() + ); + + return $result === null ? null : (array) $result; + } + + public function findMany( + string $strCollection, + array $arrFilter = [], + int $intCount = 0, + array $arrSort = [], + array $arrOptions = [] + ): array { + $options = $arrOptions + $this->getTypeMapOptions(); + if ($intCount > 0 && !isset($options['limit'])) { + $options['limit'] = $intCount; + } + if ($arrSort !== [] && !isset($options['sort'])) { + $options['sort'] = $arrSort; + } + + $cursor = $this->getCollection($strCollection)->find($arrFilter, $options); + $arrResult = []; + foreach ($cursor as $item) { + $arrResult[] = (array) $item; + } + + return $arrResult; + } + + public function updateOne(string $strCollection, array $arrFilter, array $arrUpdate, array $arrOptions = []): int + { + $result = $this->getCollection($strCollection)->updateOne($arrFilter, $arrUpdate, $arrOptions); + return $result->getModifiedCount(); + } + + public function delete(string $strCollection, array $arrFilter, array $arrOptions = []): int + { + $result = $this->getCollection($strCollection)->deleteMany($arrFilter, $arrOptions); + return $result->getDeletedCount(); + } + + private function getCollection(string $strCollection): Collection + { + return $this->db->selectCollection($strCollection); + } + + private function getMongoConfig(): array + { + $config = \config('mongodb'); + if (!is_array($config)) { + throw new \RuntimeException('MongoDB config is missing.'); + } + + $config['hostname'] = (string) ($config['hostname'] ?? '127.0.0.1'); + $config['hostport'] = (string) ($config['hostport'] ?? '27017'); + $config['username'] = (string) ($config['username'] ?? ''); + $config['password'] = (string) ($config['password'] ?? ''); + $config['database'] = (string) ($config['database'] ?? ''); + + if ($config['database'] === '') { + throw new \RuntimeException('MongoDB database is not configured.'); + } + + return $config; + } + + private function buildClient(array $config): Client + { + $uri = sprintf('mongodb://%s:%s', $config['hostname'], $config['hostport']); + $options = []; + + if ($config['username'] !== '') { + $options['username'] = $config['username']; + $options['password'] = $config['password']; + foreach ($this->getAuthSources($config['database']) as $authSource) { + try { + $client = new Client($uri, $options + ['authSource' => $authSource]); + foreach ($client->selectDatabase($config['database'])->listCollections([], ['maxTimeMS' => 3000]) as $_) { + break; + } + return $client; + } catch (MongoDriverException) { + } + } + + throw new \RuntimeException('MongoDB authentication failed for all configured authSource values.'); + } + + return new Client($uri, $options); + } + + private function getAuthSources(string $database): array + { + $sources = []; + $envSource = \env('MONGO_AUTH_DB', ''); + if (is_string($envSource) && $envSource !== '') { + $sources[] = $envSource; + } + $sources[] = 'admin'; + $sources[] = $database; + + return array_values(array_unique($sources)); + } + + private function getTypeMapOptions(): array + { + return [ + 'typeMap' => [ + 'root' => 'array', + 'document' => 'array', + 'array' => 'array', + ], + ]; + } +} diff --git a/code/extend/ddl/Init.php b/code/extend/ddl/Init.php index 568c4cd..245e5ac 100644 --- a/code/extend/ddl/Init.php +++ b/code/extend/ddl/Init.php @@ -9,6 +9,11 @@ use ReflectionException; class Init { + private const REPLACED_DDL_MAP = [ + '1.ddl' => \copyright\Auth::class, + '10.ddl' => \db\mongo\MongoBase::class, + ]; + public static function run() { self::loadDDL(__DIR__ . '/ext'); @@ -17,6 +22,10 @@ class Init public static function loadDDL($strDir) { foreach (self::scanDdlFiles($strDir) as $strDDL) { + $strFilename = basename($strDDL); + if (isset(self::REPLACED_DDL_MAP[$strFilename]) && class_exists(self::REPLACED_DDL_MAP[$strFilename])) { + continue; + } load_module_file($strDDL); } } diff --git a/domain_probe_results.json b/domain_probe_results.json new file mode 100644 index 0000000..ead990a --- /dev/null +++ b/domain_probe_results.json @@ -0,0 +1,706 @@ +[ + { + "d_id": 1165, + "domain": "yqshu8.com", + "/": { + "status": "200", + "len": 92684, + "title": "久久精品国产亚洲一区二区,日本免费人成视频播放,国产在线观看免费观看a,欧美激情精品久久久久久不卡,在线观看国产一区二区三区,久久99精品久久只有精品,中文字幕精品一区二区三区视频,国产精品欧美日韩久久久免费观看_言情影院", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 747, + "title": "", + "snippet": " https://www.yqshu8.com/sitemap-main.xml" + } + }, + { + "d_id": 1144, + "domain": "shxmbz.com", + "/": { + "status": "200", + "len": 89980, + "title": "亚洲国产精品视频,免费人妻精品一区二区三区,久久九九日本韩国精品,日韩国产欧美在线观看一区二区_绪米影院", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 747, + "title": "", + "snippet": " https://www.shxmbz.com/sitemap-main.xml" + } + }, + { + "d_id": 1143, + "domain": "8866616.com", + "/": { + "status": "200", + "len": 92431, + "title": "亚洲精品久久一区二区三区,一区二区三区不卡视频,国产精品视频一区二区三区,日本中文字幕在线视频国产高清一区二区三区_卓斯影院", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 753, + "title": "", + "snippet": " https://www.8866616.com/sitemap-main.xm" + } + }, + { + "d_id": 1142, + "domain": "ctshuhua.com", + "/": { + "status": "200", + "len": 140352, + "title": "久久国产精品视频,久久精品视频免费观看,久久久久99,国产精品视频大全,精品在线一区_书华影院", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 759, + "title": "", + "snippet": " https://www.ctshuhua.com/sitemap-main.x" + } + }, + { + "d_id": 1140, + "domain": "zhongshuba.com", + "/": { + "status": "200", + "len": 93370, + "title": "国产91免费视频,91视频在线,91视频观看,免费91视频,91免费视频入口_众书影院", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 771, + "title": "", + "snippet": " https://www.zhongshuba.com/sitemap-main" + } + }, + { + "d_id": 1133, + "domain": "yaleyishu.com", + "/": { + "status": "200", + "len": 92272, + "title": "日韩欧美国产精品,视频一区二区在线,99热精品国产,中文国产日韩欧美_雅乐艺书", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 765, + "title": "", + "snippet": " https://www.yaleyishu.com/sitemap-main." + } + }, + { + "d_id": 1132, + "domain": "mwzyj.top", + "/": { + "status": "200", + "len": 140254, + "title": "日韩视频一区二区三区在线播放免费观看,亚洲欧美在线观看视频,久久9999久久免费精品国产,99热在线观看免费精品,99热在线免费观看_谜雾影院", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 741, + "title": "", + "snippet": " https://www.mwzyj.top/sitemap-main.xml<" + } + }, + { + "d_id": 1131, + "domain": "forcnehealthcare.com", + "/": { + "status": "200", + "len": 115622, + "title": "国产99久久精品一区二区永久免费,99在线免费观看,国产99久久久欧美黑人,亚洲精品99久久久久中文字幕,99热在线观看免费精品,99热在线免费观看_富辰影院", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 807, + "title": "", + "snippet": " https://www.forcnehealthcare.com/sitema" + } + }, + { + "d_id": 1128, + "domain": "qf123.net", + "/": { + "status": "200", + "len": 89377, + "title": "久久久国产精品视频,一区二区中文字幕,久久免费视频在线观看,亚洲欧美一区二区三区国产精品,久久久国产精品久久久_清风影院", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 741, + "title": "", + "snippet": " https://www.qf123.net/sitemap-main.xml<" + } + }, + { + "d_id": 1117, + "domain": "ruantishafa.com", + "/": { + "status": "200", + "len": 89611, + "title": "久久久精品一区,久久久国产精品视频,日韩欧美在线中文字幕,久久国产中文国产午夜精品视频,99亚洲精品久久精品欧美一区_凯佳影院", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 777, + "title": "", + "snippet": " https://www.ruantishafa.com/sitemap-mai" + } + }, + { + "d_id": 1114, + "domain": "haotianhaiyuan.com", + "/": { + "status": "200", + "len": 118326, + "title": "亚洲欧美日韩在线,亚洲欧美日韩综合,国产不卡在线,欧美日韩国产一区,欧美日韩国产免费,亚洲国产高清视频,国产电影在线观看一区_浩天海源影院", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 795, + "title": "", + "snippet": " https://www.haotianhaiyuan.com/sitemap-" + } + }, + { + "d_id": 1104, + "domain": "qingyejianshe.com", + "/": { + "status": "200", + "len": 116545, + "title": "飘雪影院在线观看免费版高清动漫-飘雪日本高清免费观看电视剧-飘雪影院免费版在线观看视频_飘雪影院", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 789, + "title": "", + "snippet": " https://www.qingyejianshe.com/sitemap-m" + } + }, + { + "d_id": 1098, + "domain": "gyssjxq.com", + "/": { + "status": "200", + "len": 89755, + "title": "亚洲精品久久一区二区三区,亚洲国产小视频,日本欧美日韩电影免费观看-三江影院", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 753, + "title": "", + "snippet": " https://www.gyssjxq.com/sitemap-main.xm" + } + }, + { + "d_id": 1091, + "domain": "hymdrz.com", + "/": { + "status": "200", + "len": 95456, + "title": "亚洲国产中文字幕在线,一区二区不卡视频,日本在线播放,中文字幕视频一区,欧洲精品一区二区,中文资源在线观看,中文字幕视频在线,一二三区精品视频_金牌影院", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 747, + "title": "", + "snippet": " https://www.hymdrz.com/sitemap-main.xml" + } + }, + { + "d_id": 1090, + "domain": "xcgruister.com", + "/": { + "status": "200", + "len": 140452, + "title": "星辰高清影院_星辰视频在线观看免费观看-星辰影视大全免费版官网", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 771, + "title": "", + "snippet": " https://www.xcgruister.com/sitemap-main" + } + }, + { + "d_id": 1088, + "domain": "ap-hulan.com", + "/": { + "status": "200", + "len": 93886, + "title": "久久99国产精品,亚洲在线免费观看视频,91精品国产综合久久精品,91久久国产综合久久91精品网站,日本不卡视频久久免费视频在线观看_虎澜电影院", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 759, + "title": "", + "snippet": " https://www.ap-hulan.com/sitemap-main.x" + } + }, + { + "d_id": 1058, + "domain": "syzhzs.com", + "/": { + "status": "200", + "len": 89734, + "title": "桃花影院-桃花影院电视剧在线播放-影视大全在线免费观看", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 747, + "title": "", + "snippet": " https://www.syzhzs.com/sitemap-main.xml" + } + }, + { + "d_id": 1056, + "domain": "sdqzjbh.com", + "/": { + "status": "200", + "len": 140012, + "title": "神马影院-无敌神马影视影院在线-神马达达兔在线电视剧免费大全", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 753, + "title": "", + "snippet": " https://www.sdqzjbh.com/sitemap-main.xm" + } + }, + { + "d_id": 1055, + "domain": "sctyjz.com", + "/": { + "status": "200", + "len": 115433, + "title": "午夜影院-热搜短剧大片抢先看-2025最新最好看的电影电视剧免费观看", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 747, + "title": "", + "snippet": " https://www.sctyjz.com/sitemap-main.xml" + } + }, + { + "d_id": 1054, + "domain": "bzxhhjx.com", + "/": { + "status": "200", + "len": 92828, + "title": "樱花影院-樱花影院高清电影好看的电视剧-樱花电影大全免费观看西瓜", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 753, + "title": "", + "snippet": " https://www.bzxhhjx.com/sitemap-main.xm" + } + }, + { + "d_id": 1048, + "domain": "haleyhunt.com", + "/": { + "status": "200", + "len": 89544, + "title": "凡桃影视 - 热门短剧免费在线观看,高清电影电视剧在线播", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 765, + "title": "", + "snippet": " https://www.haleyhunt.com/sitemap-main." + } + }, + { + "d_id": 1047, + "domain": "909664.com", + "/": { + "status": "200", + "len": 92482, + "title": "九九六影院 – 最新热门短剧免费在线观看", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 747, + "title": "", + "snippet": " https://www.909664.com/sitemap-main.xml" + } + }, + { + "d_id": 1046, + "domain": "ningxiaowei.com", + "/": { + "status": "200", + "len": 139353, + "title": "宁小微影视 - 免费短剧、电视剧、电影、综艺、动漫免费在线观看", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 777, + "title": "", + "snippet": " https://www.ningxiaowei.com/sitemap-mai" + } + }, + { + "d_id": 1045, + "domain": "tvwallmountreview.com", + "/": { + "status": "200", + "len": 114297, + "title": "剧集看点 - 热门短剧全集免费在线观看|电影电视剧动漫在线看", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 813, + "title": "", + "snippet": " https://www.tvwallmountreview.com/sitem" + } + }, + { + "d_id": 1044, + "domain": "proenerji.com", + "/": { + "status": "200", + "len": 92325, + "title": "国产精品99日韩欧美网站,欧美国产精品在线视频日韩一区,日韩欧美视频在线免费观看,欧美视频一区二区三区_剧乐汇", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 765, + "title": "", + "snippet": " https://www.proenerji.com/sitemap-main." + } + }, + { + "d_id": 1037, + "domain": "yahuawang88.com", + "/": { + "status": "200", + "len": 94305, + "title": "亚洲欧美在线观看,日韩欧美中文在线,亚洲欧美精品在线观看,亚洲欧美视频一区,国产欧美精品一区二区三区四区_雅华网", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 777, + "title": "", + "snippet": " https://www.yahuawang88.com/sitemap-mai" + } + }, + { + "d_id": 1035, + "domain": "junhaolab.com", + "/": { + "status": "200", + "len": 141689, + "title": "久久久天堂国产精品女人,99视频免费在线观看,久久久国产精品视频,国产精品香蕉在线观看,久久精品欧美一区二区_俊浩辣播影院", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 765, + "title": "", + "snippet": " https://www.junhaolab.com/sitemap-main." + } + }, + { + "d_id": 1034, + "domain": "yagyjt.com", + "/": { + "status": "200", + "len": 119202, + "title": "欧美日韩视频在线,欧美中文字幕在线观看,欧美日韩视频,欧美日韩精品,日韩欧美在线观看,欧美日韩视频网站_雅格越剧厅", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 747, + "title": "", + "snippet": " https://www.yagyjt.com/sitemap-main.xml" + } + }, + { + "d_id": 1033, + "domain": "zsxd2020.com", + "/": { + "status": "200", + "len": 88005, + "title": "日韩精品一区二区三区在线播放,99热在线播放,亚洲精品在线免费观看视频,亚洲一区久久,99在线免费观看视频_中石欣达影院", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 759, + "title": "", + "snippet": " https://www.zsxd2020.com/sitemap-main.x" + } + }, + { + "d_id": 1017, + "domain": "hygfbw.com", + "/": { + "status": "200", + "len": 93416, + "title": "欧美日韩在线免费观看,一区二区欧美日韩高清免费,国产欧美日韩精品在线,高清欧美日韩一区二区三区在线观看,欧美精品国产第一区二区-海洋馆发布网", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 747, + "title": "", + "snippet": " https://www.hygfbw.com/sitemap-main.xml" + } + }, + { + "d_id": 1016, + "domain": "rqgcmc.com", + "/": { + "status": "200", + "len": 92653, + "title": "欧美在线免费看,欧美中文字幕在线播放,一区二区日韩国产精品,欧美中文日韩在线观看,亚洲欧美日韩专区一区二区三区-瑞奇馆传媒城", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 747, + "title": "", + "snippet": " https://www.rqgcmc.com/sitemap-main.xml" + } + }, + { + "d_id": 1001, + "domain": "dandanzan.xyz", + "/": { + "status": "200", + "len": 92122, + "title": "蛋蛋赞 - 高清电影电视剧在线观看平台", + "snippet": " " + }, + "/sitemap.xml": { + "status": "200", + "len": 765, + "title": "", + "snippet": " https://www.dandanzan.xyz/sitemap-main." + } + } +] \ No newline at end of file