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