6 Commits c94e89405f ... b6a60e31b7

Auteur SHA1 Bericht Datum
  晚风拂柳颜 b6a60e31b7 修改传参额外符号 2 maanden geleden
  晚风拂柳颜 96dc8dd9ff 修改传参额外符号 2 maanden geleden
  晚风拂柳颜 e7be786829 打印log 2 maanden geleden
  晚风拂柳颜 c1850ffd68 打印log 2 maanden geleden
  晚风拂柳颜 adb3df4c9d 尝试修复采集之王搜索图片问题 2 maanden geleden
  hjdhnx 23959a0c06 采集之王批量搜索图片 2 maanden geleden
1 gewijzigde bestanden met toevoegingen van 76 en 29 verwijderingen
  1. 76 29
      app/t4/files/drpy_js/采集之王[合].js

+ 76 - 29
app/t4/files/drpy_js/采集之王[合].js

@@ -3,12 +3,12 @@
  * 不建议:
  * 传参 ?type=url&params=../json/采集.json
  * 建议:
- * 传参 ?type=url&params=../json/采集静态.json#1
- * 传参 ?type=url&params=../json/采集[zy]静态.json#1
- * 传参 ?type=url&params=../json/采集[密]静态.json#1
+ * 传参 ?type=url&params=../json/采集静态.json$1
+ * 传参 ?type=url&params=../json/采集[zy]静态.json$1
+ * 传参 ?type=url&params=../json/采集[密]静态.json$1
  * hipy-server支持@改名比如:
- * 传参 ?type=url&params=../json/采集静态.json#1@采王道长[合]
- * 传参 ?type=url&params=../json/采集[zy]静态.json#1@采王zy[密]
+ * 传参 ?type=url&params=../json/采集静态.json$1@采王道长[合]
+ * 传参 ?type=url&params=../json/采集[zy]静态.json$1@采王zy[密]
  * 传参 ?type=url&params=../json/采集[密]静态.json@采王成人[密]
  * [{"name":"暴风资源","url":"https://bfzyapi.com","parse_url":""},{"name":"飞刀资源","url":"http://www.feidaozy.com","parse_url":""},{"name":"黑木耳资源","url":"https://www.heimuer.tv","parse_url":""}]
  */
@@ -18,11 +18,13 @@ globalThis.getRandomItem = function (items) {//从列表随机取出一个元素
 var rule = {
     title: '采集之王[合]',
     author: '道长',
-    version: '20240705 beta13',
+    version: '20240705 beta16',
     update_info: `
 20240705:
-1.支持传参json后面增加#1 这样的额外标识,用于搜索结果精准匹配
-2.支持传参json后面增加#1#1 这样的额外标识,用于强制获取搜索图片。#1#不显示图片。默认是搜索强制有图片的[待实现详情页请求使用批量]
+1.支持传参json后面增加$1 这样的额外标识,用于搜索结果精准匹配
+2.支持传参json后面增加$1$1 这样的额外标识,用于强制获取搜索图片。$1$不显示图片。默认是搜索强制有图片的[已实现详情页请求使用批量]
+3.修复二级数据无序匹配搜索列表图片的问题
+4.修改搜索精准和图片显示额外参数间隔符从#变为$
 20240703:
 1.采集json支持"searchable": 0,用于搜索时排除这个源
 20240604:
@@ -53,8 +55,8 @@ var rule = {
     search_match: false, // 搜索精准匹配
     search_pic: true, // 搜索强制需要图片
     // params: 'http://127.0.0.1:5707/files/json/%E9%87%87%E9%9B%86.json',
-    // params: 'http://127.0.0.1:5707/files/json/采集静态.json#1',
-    // params: 'http://127.0.0.1:5707/files/json/采集[zy]静态.json#1',
+    // params: 'http://127.0.0.1:5707/files/json/采集静态.json$1',
+    // params: 'http://127.0.0.1:5707/files/json/采集[zy]静态.json$1',
     // hostJs:$js.toString(()=>{
     //
     // }),
@@ -89,9 +91,10 @@ var rule = {
             log('当前程序支持批量请求[batchFetch],搜索限制已设置为16');
         }
         let _url = rule.params;
+        log(`传入参数:${_url}`);
         if (_url && typeof (_url) === 'string' && /^(http|file)/.test(_url)) {
-            if (_url.includes('#')) {
-                let _url_params = _url.split('#');
+            if (_url.includes('$')) {
+                let _url_params = _url.split('$');
                 _url = _url_params[0];
                 rule.search_match = !!(_url_params[1]);
                 if (_url_params.length > 2) { // 强制图片
@@ -270,6 +273,7 @@ var rule = {
                 log('start:' + start);
                 log('end:' + end);
                 log('搜索模式:' + searchMode);
+                log('精准搜索:' + rule.search_match);
                 // log('t1:' + t1);
                 if (start < canSearch.length) {
                     let search_classes = canSearch.slice(start, end);
@@ -282,8 +286,8 @@ var rule = {
                         _url = _url.replace("#TruePage#", "" + truePage);
                         urls.push(_url);
                     });
+                    let results_list = [];
                     let results = [];
-
                     if (typeof (batchFetch) === 'function') {
                         let reqUrls = urls.map(it => {
                             return {
@@ -292,6 +296,8 @@ var rule = {
                             }
                         });
                         let rets = batchFetch(reqUrls);
+                        let detailUrls = [];
+                        let detailUrlCount = 0;
                         rets.forEach((ret, idx) => {
                             let it = search_classes[idx];
                             if (ret) {
@@ -299,6 +305,7 @@ var rule = {
                                     let json = JSON.parse(ret);
                                     let data = json.list;
                                     data.forEach(i => {
+                                        i.site_name = it.type_name;
                                         i.vod_id = it.type_id + '$' + i.vod_id;
                                         i.vod_remarks = i.vod_remarks + '|' + it.type_name;
                                     });
@@ -309,26 +316,65 @@ var rule = {
                                         if (rule.search_pic && !data[0].vod_pic) {
                                             log(`当前搜索站点【${it.type_name}】没图片,尝试访问二级去获取图片`);
                                             let detailUrl = urls[idx].split('wd=')[0] + 'ac=detail&ids=' + data.map(k => k.vod_id.split('$')[1]).join(',');
-                                            try {
-                                                let detailJson = JSON.parse(request(detailUrl));
-                                                data.forEach((d, _seq) => {
-                                                    log('二级数据列表元素数:' + detailJson.list.length);
-                                                    let detailVodPic = detailJson.list[_seq].vod_pic;
-                                                    if (detailVodPic) {
-                                                        Object.assign(d, {vod_pic: detailVodPic});
-                                                    }
-                                                });
-                                            } catch (e) {
-                                                log(`强制获取网站${it.type_id}的搜索图片失败:${e.message}`);
-                                            }
+                                            detailUrls.push(detailUrl);
+                                            results_list.push({
+                                                data: data,
+                                                has_pic: false,
+                                                detailUrlCount: detailUrlCount
+                                            });
+                                            detailUrlCount++;
+                                            // try {
+                                            //     let detailJson = JSON.parse(request(detailUrl));
+                                            //     data.forEach((d, _seq) => {
+                                            //         log('二级数据列表元素数:' + detailJson.list.length);
+                                            //         let detailVodPic = detailJson.list[_seq].vod_pic;
+                                            //         if (detailVodPic) {
+                                            //             Object.assign(d, {vod_pic: detailVodPic});
+                                            //         }
+                                            //     });
+                                            // } catch (e) {
+                                            //     log(`强制获取网站${it.type_id}的搜索图片失败:${e.message}`);
+                                            // }
+                                        } else {
+                                            results_list.push({data: data, has_pic: true});
+
                                         }
-                                        results = results.concat(data);
+                                        // results = results.concat(data);
                                     }
                                 } catch (e) {
                                     log(`请求:${it.type_id}发生错误:${e.message}`)
                                 }
                             }
                         });
+                        // 构造请求二级的batchFetch列表
+                        let reqUrls2 = detailUrls.map(it => {
+                            return {
+                                url: it,
+                                options: {timeout: rule.timeout}
+                            }
+                        });
+                        let rets2 = batchFetch(reqUrls2);
+                        for (let k = 0; k < results_list.length; k++) {
+                            let result_data = results_list[k].data;
+                            if (!results_list[k].has_pic) {
+                                try {
+                                    let detailJson = JSON.parse(rets2[results_list[k].detailUrlCount]);
+                                    log('二级数据列表元素数:' + detailJson.list.length);
+                                    result_data.forEach((d, _seq) => {
+                                        // let detailVodPic = detailJson.list[_seq].vod_pic;
+                                        // log(detailJson);
+                                        let detailVodPic = detailJson.list.find(vod => vod.vod_id.toString() === d.vod_id.split('$')[1]);
+                                        if (detailVodPic) {
+                                            Object.assign(d, {vod_pic: detailVodPic.vod_pic});
+                                        }
+                                    });
+                                } catch (e) {
+                                    log(`强制获取网站${result_data[0].site_name}的搜索图片失败:${e.message}`);
+                                }
+                            }
+                            results = results.concat(result_data);
+                        }
+
                     } else {
                         urls.forEach((_url, idx) => {
                             let it = search_classes[idx];
@@ -349,11 +395,12 @@ var rule = {
                                         let detailUrl = urls[idx].split('wd=')[0] + 'ac=detail&ids=' + data.map(k => k.vod_id.split('$')[1]).join(',');
                                         try {
                                             let detailJson = JSON.parse(request(detailUrl));
+                                            log('二级数据列表元素数:' + detailJson.list.length);
                                             data.forEach((d, _seq) => {
-                                                log('二级数据列表元素数:' + detailJson.list.length);
-                                                let detailVodPic = detailJson.list[_seq].vod_pic;
+                                                // let detailVodPic = detailJson.list[_seq].vod_pic;
+                                                let detailVodPic = detailJson.list.find(vod => vod.vod_id.toString() === d.vod_id.split('$')[1]);
                                                 if (detailVodPic) {
-                                                    Object.assign(d, {vod_pic: detailVodPic});
+                                                    Object.assign(d, {vod_pic: detailVodPic.vod_pic});
                                                 }
                                             });
                                         } catch (e) {