904118851 3 months ago
parent
commit
df4610ab88

+ 4 - 4
5_CREATE_LINK_FACTORY/qm_create_link_factory.js

@@ -146,12 +146,12 @@ async function processTask(){
         console.log("qm_create_link_task_list:",qm_create_link_task_list)
         if(qm_create_link_task_list.length>0){
             let qm_create_link_task = qm_create_link_task_list.pop()
-            await require('./qm_create_link').runTask(qm_create_link_task.n_data
-                ,qm_create_link_task.main_info,
-                qm_create_link_task.PlatformInfo,finish_call_back)
-            // require('./qm_new_create_link').runTask(qm_create_link_task.n_data
+            // await require('./qm_create_link').runTask(qm_create_link_task.n_data
             //     ,qm_create_link_task.main_info,
             //     qm_create_link_task.PlatformInfo,finish_call_back)
+            require('./qm_new_create_link').runTask(qm_create_link_task.n_data
+                ,qm_create_link_task.main_info,
+                qm_create_link_task.PlatformInfo,finish_call_back)
         }
     }catch(e){
         console.log("qm_create_link_factory error:",e)

+ 5 - 4
5_CREATE_LINK_FACTORY/qm_mf_create_link_factory.js

@@ -146,12 +146,13 @@ async function processTask(){
         console.log("qm_mf_create_link_task_list:",qm_create_link_task_list)
         if(qm_create_link_task_list.length>0){
             let qm_create_link_task = qm_create_link_task_list.pop()
-            require('./qm_mf_create_link').runTask(qm_create_link_task.n_data
-                ,qm_create_link_task.main_info,
-                qm_create_link_task.PlatformInfo,finish_call_back)
-            // require('./qm_new_create_link').runTask(qm_create_link_task.n_data
+            // require('./qm_mf_create_link').runTask(qm_create_link_task.n_data
             //     ,qm_create_link_task.main_info,
             //     qm_create_link_task.PlatformInfo,finish_call_back)
+            // console.log("qm_create_link_task.PlatformInfo:",qm_create_link_task.PlatformInfo)
+            await require('./qm_mf_new_create_link').runTask(qm_create_link_task.n_data
+                ,qm_create_link_task.main_info,
+                qm_create_link_task.PlatformInfo,finish_call_back)
         }
     }catch(e){
         console.log("qm_mf_create_link_factory error:",e)

+ 17 - 17
5_CREATE_LINK_FACTORY/qm_mf_new_create_link.js

@@ -8,23 +8,23 @@ const CMD = {}
 CMD.runTask = async function (data,main_info,PlatformInfo,call_back) {
     let timestamp = helper.getCurrentUnixTimestamp()
     let tg_link_config = JSON.parse(main_info.tg_link_config)
-    let chongzhi_id = tg_link_config['chongzhi_id']
+    // let chongzhi_id = tg_link_config['chongzhi_id']
     let huichuan_id = tg_link_config['huichuan_id']
     let f_chongzhi_id = tg_link_config['f_chongzhi_id']
-    let chongzhi_list = JSON.parse(PlatformInfo.chongzhi)
+    // let chongzhi_list = JSON.parse(PlatformInfo.chongzhi)
     let huichuan_list = JSON.parse(PlatformInfo.huichuan)
-    let f_chongzhi_list = JSON.parse(PlatformInfo.f_chongzhi)
+    // let f_chongzhi_list = JSON.parse(PlatformInfo.f_chongzhi)
     let recharge_template_id = ""
     let f_recharge_template_id = ""
     let call_back_template_id = ""
 
-    for (let index = 0; index < chongzhi_list.length; index++) {
-        const cz_obj = chongzhi_list[index];
-        if(cz_obj.id==chongzhi_id){
-          recharge_template_id = cz_obj.value
-          break
-        }
-    }
+    // for (let index = 0; index < chongzhi_list.length; index++) {
+    //     const cz_obj = chongzhi_list[index];
+    //     if(cz_obj.id==chongzhi_id){
+    //       recharge_template_id = cz_obj.value
+    //       break
+    //     }
+    // }
 
     for (let index = 0; index < huichuan_list.length; index++) {
         const hc_obj = huichuan_list[index];
@@ -34,13 +34,13 @@ CMD.runTask = async function (data,main_info,PlatformInfo,call_back) {
         }
     }
 
-    for (let index = 0; index < f_chongzhi_list.length; index++) {
-        const cz_obj = f_chongzhi_list[index];
-        if(cz_obj.id==f_chongzhi_id){
-            f_recharge_template_id = cz_obj.value
-          break
-        }
-    }
+    // for (let index = 0; index < f_chongzhi_list.length; index++) {
+    //     const cz_obj = f_chongzhi_list[index];
+    //     if(cz_obj.id==f_chongzhi_id){
+    //         f_recharge_template_id = cz_obj.value
+    //       break
+    //     }
+    // }
 
     let param_list = main_info.qm_id.split(',')
     let app_external_id = param_list[1]

+ 1 - 1
5_CREATE_LINK_FACTORY/qm_new_create_link.js

@@ -11,7 +11,7 @@ CMD.runTask = async function (data,main_info,PlatformInfo,call_back) {
     let chongzhi_id = tg_link_config['chongzhi_id']
     let huichuan_id = tg_link_config['huichuan_id']
     let f_chongzhi_id = tg_link_config['f_chongzhi_id']
-    let chongzhi_list = JSON.parse(PlatformInfo.chongzhi)
+    // let chongzhi_list = JSON.parse(PlatformInfo.chongzhi)
     let huichuan_list = JSON.parse(PlatformInfo.huichuan)
     let f_chongzhi_list = JSON.parse(PlatformInfo.f_chongzhi)
     let recharge_template_id = ""

BIN
dump.rdb


+ 12 - 19
logs/combined.log

@@ -1,19 +1,12 @@
-<<<<<<< HEAD
-2025-04-30T19:13:19: 
-2025-04-30T19:13:19: > heiyan@1.0.0 start
-2025-04-30T19:13:19: > node tg_factory_main.js
-2025-04-30T19:13:19: 
-=======
-2025-04-30T19:08:32: 
-2025-04-30T19:08:32: > heiyan@1.0.0 start
-2025-04-30T19:08:32: > node tg_factory_main.js
-2025-04-30T19:08:32: 
-2025-04-30T19:08:35: Connected to Redis
-2025-04-30T19:08:35: qm_book_data: {
-2025-04-30T19:08:35:   words: 10200,
-2025-04-30T19:08:35:   book_name: '喜欢一碗水端平的婆婆彻底傻眼了',
-2025-04-30T19:08:35:   book_id: 396740,
-2025-04-30T19:08:35:   genre: 3,
-2025-04-30T19:08:35:   publish_time: '2024-12-17 14:28:19'
-2025-04-30T19:08:35: }
->>>>>>> 10f1c1f54cd5d0ef34791b9977daf17e1c758665
+2025-04-30T19:31:57: 
+2025-04-30T19:31:57: > heiyan@1.0.0 start
+2025-04-30T19:31:57: > node tg_factory_main.js
+2025-04-30T19:31:57: 
+2025-04-30T19:31:59: Connected to Redis
+2025-04-30T19:32:00: qm_book_data: {
+2025-04-30T19:32:00:   words: 10200,
+2025-04-30T19:32:00:   book_name: '喜欢一碗水端平的婆婆彻底傻眼了',
+2025-04-30T19:32:00:   book_id: 396740,
+2025-04-30T19:32:00:   genre: 3,
+2025-04-30T19:32:00:   publish_time: '2024-12-17 14:28:19'
+2025-04-30T19:32:00: }

+ 12 - 19
logs/out.log

@@ -1,19 +1,12 @@
-<<<<<<< HEAD
-2025-04-30T19:13:19: 
-2025-04-30T19:13:19: > heiyan@1.0.0 start
-2025-04-30T19:13:19: > node tg_factory_main.js
-2025-04-30T19:13:19: 
-=======
-2025-04-30T19:08:32: 
-2025-04-30T19:08:32: > heiyan@1.0.0 start
-2025-04-30T19:08:32: > node tg_factory_main.js
-2025-04-30T19:08:32: 
-2025-04-30T19:08:35: Connected to Redis
-2025-04-30T19:08:35: qm_book_data: {
-2025-04-30T19:08:35:   words: 10200,
-2025-04-30T19:08:35:   book_name: '喜欢一碗水端平的婆婆彻底傻眼了',
-2025-04-30T19:08:35:   book_id: 396740,
-2025-04-30T19:08:35:   genre: 3,
-2025-04-30T19:08:35:   publish_time: '2024-12-17 14:28:19'
-2025-04-30T19:08:35: }
->>>>>>> 10f1c1f54cd5d0ef34791b9977daf17e1c758665
+2025-04-30T19:31:57: 
+2025-04-30T19:31:57: > heiyan@1.0.0 start
+2025-04-30T19:31:57: > node tg_factory_main.js
+2025-04-30T19:31:57: 
+2025-04-30T19:31:59: Connected to Redis
+2025-04-30T19:32:00: qm_book_data: {
+2025-04-30T19:32:00:   words: 10200,
+2025-04-30T19:32:00:   book_name: '喜欢一碗水端平的婆婆彻底傻眼了',
+2025-04-30T19:32:00:   book_id: 396740,
+2025-04-30T19:32:00:   genre: 3,
+2025-04-30T19:32:00:   publish_time: '2024-12-17 14:28:19'
+2025-04-30T19:32:00: }

+ 112 - 86
src/api/fq/fq_search_book.js

@@ -63,72 +63,20 @@ CMD.search_name = function(keyword){
 }
 
 CMD.search_new_id = async function(bookId,call_back){
-    const https = require('https');
+  const params = new URLSearchParams({
+    permission_statuses: '3,4',
+    search_type: '5',
+    query: bookId,
+    page_index: '0',
+    page_size: '1',
+    msToken: 'QtOXD1IEPGNjuwS8Lzzew68qWnqxmVU10gPxOLcbijTXMmshIe_toySxUmiovwVBez7c8O3QcscyRES2_uC',
+    a_bogus: 'D7UVhFyEYZW5F3AG8OsveV2UN69lr08y7FTdRt697NxbThUPk8e1NPe5noLRXP3XauBNZ9OHAn4MudpcKcziZSpkwmZDSN0ftGCA9g8Lh17IaTkgVHWqCGSwok3n/cWEmA1txemvUULaZfOlk1QZMddeq/4oQODdbi9hfNfai1wg6sta7Qy='
+  });
 
-    const options = {
-      hostname: 'www.changdunovel.com',
-      path: '/novelsale/distributor/content/book/list/v1',
-      method: 'GET',
+  const config = {
+      method: 'get',
+      url: `https://www.changdunovel.com/novelsale/distributor/content/book/list/v1?${params.toString()}`,
       headers: {
-        'accept': 'application/json, text/plain, */*',
-        'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
-        'agw-js-conv': 'str',
-        'appid': '40017687',
-        'apptype': '15',
-        'distributorid': '1819222136130603',
-        'priority': 'u=1, i',
-        'sec-ch-ua': '"Microsoft Edge";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
-        'sec-ch-ua-mobile': '?1',
-        'sec-ch-ua-platform': '"Android"',
-        'sec-fetch-dest': 'empty',
-        'sec-fetch-mode': 'cors',
-        'sec-fetch-site': 'same-origin',
-        'x-secsdk-csrf-token': '00010000000165946eed4d812d087c4148a726264fe223e04f1c6e23eb1a0ebb30e517cbcf91183afa24b99abee3',
-        'cookie': 'store-region=cn-gd; store-region-src=uid; is_staff_user=false; passport_csrf_token=4d1582c647abf363099fe8a4f975751e; passport_csrf_token_default=4d1582c647abf363099fe8a4f975751e; s_v_web_id=verify_m8fcj8us_JZLlXrhR_OZsr_42Uz_BjhU_sRduBwB5eG8l; n_mh=-Akptc0OjS9zIJQaCBO_o6uzJlp3wAItgZeldsCLFeU; sid_guard=6cda0bf1f5b9891a648e6193dbd4b600%7C1745982840%7C5184000%7CSun%2C+29-Jun-2025+03%3A14%3A00+GMT; uid_tt=b3bebe7098b5f11e07d1d5dd8238d822; uid_tt_ss=b3bebe7098b5f11e07d1d5dd8238d822; sid_tt=6cda0bf1f5b9891a648e6193dbd4b600; sessionid=6cda0bf1f5b9891a648e6193dbd4b600; sessionid_ss=6cda0bf1f5b9891a648e6193dbd4b600'
-      }
-    };
-    
-    // 构建查询参数
-    const params = new URLSearchParams({
-      permission_statuses: '3,4',
-      search_type: '5',
-      query: `${bookId}`,
-      page_index: '0',
-      page_size: '1',
-      msToken: 'QtOXD1IEPGNjuwS8Lzzew68qWnqxmVU10gPxOLcbijTXMmshIe_toySxUmiovwVBez7c8O3QcscyRES2_uC',
-      a_bogus: 'D7UVhFyEYZW5F3AG8OsveV2UN69lr08y7FTdRt697NxbThUPk8e1NPe5noLRXP3XauBNZ9OHAn4MudpcKcziZSpkwmZDSN0ftGCA9g8Lh17IaTkgVHWqCGSwok3n/cWEmA1txemvUULaZfOlk1QZMddeq/4oQODdbi9hfNfai1wg6sta7Qy='
-    });
-    
-    options.path += `?${params.toString()}`;
-    
-    const req = https.request(options, (res) => {
-      let data = '';
-      
-      res.on('data', (chunk) => {
-        data += chunk;
-      });
-      
-      res.on('end', () => {
-        call_back(JSON.parse(data))
-      });
-    });
-    
-    req.on('error', (error) => {
-        call_back(null)
-        console.error(error);
-    });
-    
-    req.end();
-}
-
-
-CMD.search_mf_new_id = async function(bookId,call_back){
-
-    const options = {
-        hostname: 'www.changdunovel.com',
-        path: '/novelsale/distributor/content/book/list/v1',
-        method: 'GET',
-        headers: {
           'accept': 'application/json, text/plain, */*',
           'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
           'agw-js-conv': 'str',
@@ -144,11 +92,69 @@ CMD.search_mf_new_id = async function(bookId,call_back){
           'sec-fetch-site': 'same-origin',
           'x-secsdk-csrf-token': '00010000000165946eed4d812d087c4148a726264fe223e04f1c6e23eb1a0ebb30e517cbcf91183afa24b99abee3',
           'cookie': 'store-region=cn-gd; store-region-src=uid; is_staff_user=false; passport_csrf_token=4d1582c647abf363099fe8a4f975751e; passport_csrf_token_default=4d1582c647abf363099fe8a4f975751e; s_v_web_id=verify_m8fcj8us_JZLlXrhR_OZsr_42Uz_BjhU_sRduBwB5eG8l; n_mh=-Akptc0OjS9zIJQaCBO_o6uzJlp3wAItgZeldsCLFeU; sid_guard=6cda0bf1f5b9891a648e6193dbd4b600%7C1745982840%7C5184000%7CSun%2C+29-Jun-2025+03%3A14%3A00+GMT; uid_tt=b3bebe7098b5f11e07d1d5dd8238d822; uid_tt_ss=b3bebe7098b5f11e07d1d5dd8238d822; sid_tt=6cda0bf1f5b9891a648e6193dbd4b600; sessionid=6cda0bf1f5b9891a648e6193dbd4b600; sessionid_ss=6cda0bf1f5b9891a648e6193dbd4b600'
-        }
+      },
+      // 添加额外的 axios 配置
+      timeout: 5000, // 5秒超时
+      validateStatus: function (status) {
+          return status >= 200 && status < 300; // 默认值
+      },
+      maxRedirects: 5
       };
-      
-      // 构建查询参数
-      const params = new URLSearchParams({
+
+      try {
+          const response = await axios(config);
+          if(response.data.code!=0){
+              throw response.data
+          }
+          if(response.data.data.length<=0){
+            throw response.data
+          }
+          return response.data.data[0];
+      } catch (error) {
+          if (error.response) {
+              // 服务器响应了,但状态码不在 2xx 范围内
+              console.error('Error Response:', error.response.data);
+              console.error('Error Status:', error.response.status);
+              console.error('Error Headers:', error.response.headers);
+          } else if (error.request) {
+              // 请求已经发出,但没有收到响应
+              console.error('Error Request:', error.request);
+          } else {
+              // 在设置请求时发生了错误
+              console.error('Error Message:', error.message);
+          }
+          return null
+      }
+}
+
+
+CMD.search_mf_new_id = async function(bookId){
+  return new Promise((resolve, reject) => {
+    const options = {
+        hostname: 'www.changdunovel.com',
+        path: '/novelsale/distributor/content/book/list/v1',
+        method: 'GET',
+        headers: {
+            'accept': 'application/json, text/plain, */*',
+            'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
+            'agw-js-conv': 'str',
+            'appid': '40017687',
+            'apptype': '15',
+            'distributorid': '1819222136130603',
+            'priority': 'u=1, i',
+            'sec-ch-ua': '"Microsoft Edge";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
+            'sec-ch-ua-mobile': '?1',
+            'sec-ch-ua-platform': '"Android"',
+            'sec-fetch-dest': 'empty',
+            'sec-fetch-mode': 'cors',
+            'sec-fetch-site': 'same-origin',
+            'x-secsdk-csrf-token': '00010000000165946eed4d812d087c4148a726264fe223e04f1c6e23eb1a0ebb30e517cbcf91183afa24b99abee3',
+            'cookie': 'store-region=cn-gd; store-region-src=uid; is_staff_user=false; passport_csrf_token=4d1582c647abf363099fe8a4f975751e; passport_csrf_token_default=4d1582c647abf363099fe8a4f975751e; s_v_web_id=verify_m8fcj8us_JZLlXrhR_OZsr_42Uz_BjhU_sRduBwB5eG8l; n_mh=-Akptc0OjS9zIJQaCBO_o6uzJlp3wAItgZeldsCLFeU; sid_guard=6cda0bf1f5b9891a648e6193dbd4b600%7C1745982840%7C5184000%7CSun%2C+29-Jun-2025+03%3A14%3A00+GMT; uid_tt=b3bebe7098b5f11e07d1d5dd8238d822; uid_tt_ss=b3bebe7098b5f11e07d1d5dd8238d822; sid_tt=6cda0bf1f5b9891a648e6193dbd4b600; sessionid=6cda0bf1f5b9891a648e6193dbd4b600; sessionid_ss=6cda0bf1f5b9891a648e6193dbd4b600'
+        }
+    };
+
+    // 构建查询参数
+    const params = new URLSearchParams({
         permission_statuses: '3,4',
         search_type: '6',
         query: `${bookId}`,
@@ -156,29 +162,49 @@ CMD.search_mf_new_id = async function(bookId,call_back){
         page_size: '1',
         msToken: 'QtOXD1IEPGNjuwS8Lzzew68qWnqxmVU10gPxOLcbijTXMmshIe_toySxUmiovwVBez7c8O3QcscyRES2_uC',
         a_bogus: 'mf0RheSEOx/nKpltmKsUeUHUEy2MrzuyDBTKRijyeNxpTZMaA8eeNOc9rxumZFaaeYpNZSMHUn-AznrcOcwwZ7HpKskvui7RtG9I98so8ZH3bBJg9r6MCGGoqkke/cWE85ltx9011UfO1nclk3dKMp3Jo/4qQODdRJ9zfPvax1q6640a7s8='
-      });
-      
-      options.path += `?${params.toString()}`;
-      
-      const req = https.request(options, (res) => {
+    });
+
+    options.path += `?${params.toString()}`;
+
+    const req = https.request(options, (res) => {
         let data = '';
-        
+
         res.on('data', (chunk) => {
-          data += chunk;
+            data += chunk;
         });
-        
+
         res.on('end', () => {
-          console.log(JSON.parse(data));
-          call_back(JSON.parse(data))
+            try {
+                const parsedData = JSON.parse(data);
+                if(parsedData.code!=0){
+                 resolve(null);
+                 return
+                }
+                if(parsedData.data.length<=0){
+                  resolve(null);
+                  return
+                }
+                resolve(parsedData.data[0]);
+            } catch (e) {
+                console.error('JSON parsing error:', e);
+                reject(e);
+            }
         });
-      });
-      
-      req.on('error', (error) => {
-        console.error(error);
-        call_back(null)
-      });
-      
-      req.end();
+    });
+
+    req.on('error', (error) => {
+        console.error('Request error:', error);
+        reject(error);
+    });
+
+    // 设置请求超时
+    req.setTimeout(10000, () => {
+        req.destroy();
+        reject(new Error('Request timeout'));
+    });
+
+    req.end();
+});
 }
 
 module.exports = CMD;

+ 1 - 0
src/api/hy/hy_search_book.js

@@ -1,5 +1,6 @@
 const axios = require('axios');
 const tools = require('../../../tools');
+
 const CMD = {}
 // 根据书id搜索黑岩的书
 CMD.search_id = async function(bookId){

BIN
src/api/hy/qr.gif


BIN
src/api/hy/qr_resized.gif


+ 81 - 119
src/api/qm/qm_gen_signature.js

@@ -1,134 +1,96 @@
 const crypto = require('crypto');
 
-class Encryption {
-  constructor(options = {
-    key: '',
-    iv: ''
-  }) {
-    const { key, iv } = options;
-    this.key = key;
-    this.iv = iv;
-  }
+function generateSignature(params) {
+    // 1. 按照参数名ASCII码从小到大排序
+    const sortedParams = {};
+    Object.keys(params)
+        .sort()
+        .forEach(key => {
+            if (params[key] !== undefined && params[key] !== null) {
+                sortedParams[key] = params[key];
+            }
+        });
 
-  encryptBySha256(data) {
-    return crypto.createHash('sha256').update(data).digest('hex');
-  }
-}
+    // 2. 将参数格式化为 key=value 的形式并用 & 连接
+    const paramString = Object.entries(sortedParams)
+        .map(([key, value]) => `${key}=${value}`)
+        .join('&');
 
-function paramsSort(params, capitalizeKeys = true) {
-  if (!params) return '';
-  
-  return Object.keys(params)
-    .sort()
-    .reduce((acc, key) => {
-      const value = params[key];
-      if (value !== undefined && value !== '') {
-        const newKey = capitalizeKeys ? 
-          key.split('-').map(k => k.charAt(0).toUpperCase() + k.slice(1).toLowerCase()).join('-') : 
-          key;
-        acc.push(`${newKey}=${value}`);
-      }
-      return acc;
-    }, [])
-    .join('&');
-}
+    // 添加特定的密钥或salt(这是关键部分,需要根据实际情况调整)
+    const secretKey = 'qimao_iap_miniapp';  // 这里使用推测的密钥
+    const stringToHash = paramString + secretKey;
 
-function queryRawText(params) {
-  if (!params) return '';
+    // 3. 使用SHA256生成签名
+    const signature = crypto
+        .createHash('sha256')
+        .update(stringToHash)
+        .digest('hex');
 
-  return Object.keys(params)
-    .filter(key => params[key] !== undefined && params[key] !== '')
-    .map(key => `${key}=${params[key]}`)
-    .join('&');
+    return { signature, paramString, stringToHash };
 }
 
-function generateSignature(request) {
-  // 1. 构建查询字符串
-  const queryParams = {
-    t: request.params.t
-  };
-  if (request.params.env !== undefined) {
-    queryParams.env = request.params.env;
-  }
-  const queryString = queryRawText(queryParams);
-  
-  // 2. 构建完整URL
-  const fullUrl = `${request.url}?${queryString}`;
-  
-  // 3. 构建请求数据字符串
-  const signData = {
-    account_name: request.data.account_name,
-    password: request.data.password
-  };
-  if (request.data.env !== undefined) {
-    signData.env = request.data.env;
-  }
-  const sortedData = paramsSort(signData, false);
-  
-  // 4. 构建签名字符串 (移除末尾的时间戳)
-  const signStr = `${fullUrl}&&${sortedData}`;
-  
-  console.log('Sign String:', signStr);
-  
-  const encryption = new Encryption();
-  return encryption.encryptBySha256(signStr);
-}
+async function fetchBookData() {
+    const params = {
+        book_id: "396740",
+        page: "1",
+        page_size: "50",
+        env: "",
+        t: "1746001846107"
+    };
 
-async function login() {
-  const timestamp = Date.now();
-  
-  const request = {
-    url: '/api/account/login',
-    headers: {
-      'Content-Type': 'application/json;charset=UTF-8',
-      'project': 'reader_paid_dyminiapp',
-      'target-id': '549124667291906201',
-      'app-external-id': '14f237fdbb7711ef93f90293e6ac97a2'
-    },
-    data: {
-      account_name: 'zhuoyue',
-      password: 'Wnl3ejAzOTYz',
-      env: ''
-    },
-    params: {
-      t: timestamp,
-      env: '',
-      qm_csrf_backend: undefined
-    }
-  };
+    const { signature, paramString, stringToHash } = generateSignature(params);
 
-  // 移除 undefined 参数
-  request.params = Object.fromEntries(
-    Object.entries(request.params)
-      .filter(([_, value]) => value !== undefined)
-  );
+    console.log('Parameters String:', paramString);
+    console.log('String to Hash:', stringToHash);
+    console.log('Generated Signature:', signature);
 
-  const signature = generateSignature(request);
-  console.log('Generated Signature:', signature);
+    try {
+        const queryString = paramString;
+        const url = `https://new-media-fx.qimao.com/api/book/data?${queryString}`;
 
-  const axios = require('axios');
-  try {
-    const response = await axios({
-      method: 'POST',
-      url: `https://new-media-fx.qimao.com${request.url}`,
-      params: request.params,
-      headers: {
-        ...request.headers,
-        'signature': signature
-      },
-      data: request.data
-    });
+        const response = await fetch(url, {
+            method: 'GET',
+            headers: {
+                "accept": "application/json, text/plain, */*",
+                "app-external-id": "9a2737aabb8f11ef93f90293e6ac97a2",
+                "authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", // 你的实际token
+                "project": "reader_paid_wxminiapp",
+                "signature": signature,
+                "target-id": ""
+            }
+        });
 
-    console.log('Login Response:', response.data);
-  } catch (error) {
-    console.error('Login Error:', error.response?.data || error.message);
-    console.log('Full Request:', {
-      url: error.config?.url,
-      headers: error.config?.headers,
-      data: error.config?.data,
-      params: request.params
-    });
-  }
+        const data = await response.json();
+        return data;
+    } catch (error) {
+        console.error('Error:', error);
+        throw error;
+    }
 }
 
-login();
+// 测试签名生成
+const testParams = {
+    book_id: "396740",
+    page: "1",
+    page_size: "50",
+    env: "",
+    t: "1746001846107"
+};
+
+// 生成签名并验证
+const result = generateSignature(testParams);
+console.log('Final Generated Signature:', result.signature);
+
+// 与目标签名对比
+const targetSignature = "66cd5f564e85598c73adabf398496dff8268da075658e6feab4fe3cfe76e438a";
+console.log('Target Signature:', targetSignature);
+console.log('Signatures Match:', result.signature === targetSignature);
+
+// 使用方法
+fetchBookData()
+    .then(result => {
+        console.log('API Response:', result);
+    })
+    .catch(error => {
+        console.error('API Error:', error);
+    });

+ 89 - 53
src/api/qm/qm_search_book.js

@@ -1,77 +1,113 @@
 const fetch = require('node-fetch'); // Node.js 18以下版本需要安装 node-fetch
 const tools = require('../../../tools');
 const helper = require('../../helper');
+const mysql = require('mysql2/promise');
 const CMD = {}
 CMD.search_id = async function (bookId) {
     // const url = 'https://new-media-fx.qimao.com/api/content/book/list';
-    return await makeRequest(bookId);
-    // 请求参数
-    const params = new URLSearchParams({
-        book_id: bookId,
-        page: '1',
-        page_size: '50',
-        env: '',
-        // t: Date.now()  // 当前时间戳
-        t:"1746001071923"
-    });
+    let connection  = null
+    try{
+        connection = await mysql.createConnection({
+                ...taskdbConfig,
+                multipleStatements: true
+            });
+        let sql = `SELECT * FROM book_info WHERE id = ${bookId} LIMIT 1`
+        const [rows] = await connection.execute(
+            sql
+        );
 
-    // 请求头
-    var headers = {
-        "accept": "application/json, text/plain, */*",
-        "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
-        "app-external-id": "14f237fdbb7711ef93f90293e6ac97a2",
-        "authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBY2NvdW50SUQiOjU0NDA1NjQxNjM3MTI4MjExMSwiQWNjb3VudE5hbWUiOiJ6aHVveXVlIiwiVGltZVN0YW1wIjoxNzQ2MDAwOTcyLCJDbGllbnRJUCI6IjEyMS4zMy4yMTcuMjE4IiwiQnVmZmVyVGltZSI6MCwiZXhwIjoxNzQ2MDg3MzcyLCJpc3MiOiJxbV9uZXdfbWVkaWFfZngiLCJuYmYiOjE3NDYwMDA5NzIsIkVudiI6InJlbGVhc2UiLCJJc1NpbXVsYXRpb25Mb2dpbiI6ZmFsc2V9.r4Heb9qmhrpSvDQW5QiTi1dVW_hyX_JKoyenpEnUMDg",
-        "project": "reader_paid_dyminiapp",
-        "sec-ch-ua": "\"Microsoft Edge\";v=\"135\", \"Not-A.Brand\";v=\"8\", \"Chromium\";v=\"135\"",
-        "sec-ch-ua-mobile": "?1",
-        "sec-ch-ua-platform": "\"Android\"",
-        "sec-fetch-dest": "empty",
-        "sec-fetch-mode": "cors",
-        "sec-fetch-site": "same-origin",
-        "signature": "01b4982bffb69237587a38de6428cce9e1948cce3517c357bd136aa66cfd192b",
-        "target-id": "549124667291906201",
-        "cookie": "sensorsdata2015jssdkcross=%7B%22%24device_id%22%3A%22193bdc124645e2-0cbeaee172d4ce8-4c657b58-921600-193bdc12465567%22%7D; sa_jssdk_2015_new-media-fx_qimao_com=%7B%22distinct_id%22%3A%22193bdc124645e2-0cbeaee172d4ce8-4c657b58-921600-193bdc12465567%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E5%BC%95%E8%8D%90%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22http%3A%2F%2F120.79.128.142%3A4999%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTkzYmRjMTI0NjQ1ZTItMGNiZWFlZTE3MmQ0Y2U4LTRjNjU3YjU4LTkyMTYwMC0xOTNiZGMxMjQ2NTU2NyJ9%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%7D; acw_tc=ac11000117460009692805554e0074ec3c1591025be468ce51e9071843da7f",
-        "Referer": "https://new-media-fx.qimao.com/backend/book-manage/index?projectId=reader_paid_dyminiapp&appId=14f237fdbb7711ef93f90293e6ac97a2&accountId=549124667291906201",
-        "Referrer-Policy": "strict-origin-when-cross-origin"
-    };
-
-    // headers['authorization'] = await tools.getQMToken()
-    try {
-        const response = await fetch(`${url}?${params}`, {
-            method: 'GET',
-            headers: headers
-        });
-
-        const data = await response.json();
-        if(data.code!=200){
-            throw data
+        if(rows.length<=0){
+            throw 0
         }
-        // console.log('响应状态:', response.status);
-        // console.log('响应数据:', data.data.list[0]);
-        if(data.data.list.length<=0){
-            return null
-        }
-        let book_info = data.data.list[0]
+        let book_info = rows[0]
         let info = {}
-        info.words =  Math.floor(parseFloat(book_info.book_word_count)*10000)
-        info.book_name =  book_info.book_name
-        info.book_id =  book_info.book_id
-        info.genre = 999;
-        if(book_info.book_type==2){  //七猫只有长或者短
+        info.words =  Math.floor(parseFloat(book_info.wordCount)*10000)
+        info.book_name =  book_info.title
+        info.book_id =  book_info.id
+        if(book_info.type="短篇"){
             info.genre = 3;
         }else{
             info.genre = 1;
         }
         return info;
-    } catch (error) {
-        console.log(error)
+
+    }catch(e){
+        console.error(e)
         return null
+    }finally{
+        if(connection!=null){
+            connection.end()
+        }
     }
+    // return await makeRequest(bookId);
+    // // 请求参数
+    // const params = new URLSearchParams({
+    //     book_id: bookId,
+    //     page: '1',
+    //     page_size: '50',
+    //     env: '',
+    //     // t: Date.now()  // 当前时间戳
+    //     t:"1746001071923"
+    // });
+
+    // // 请求头
+    // var headers = {
+    //     "accept": "application/json, text/plain, */*",
+    //     "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
+    //     "app-external-id": "14f237fdbb7711ef93f90293e6ac97a2",
+    //     "authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJBY2NvdW50SUQiOjU0NDA1NjQxNjM3MTI4MjExMSwiQWNjb3VudE5hbWUiOiJ6aHVveXVlIiwiVGltZVN0YW1wIjoxNzQ2MDAwOTcyLCJDbGllbnRJUCI6IjEyMS4zMy4yMTcuMjE4IiwiQnVmZmVyVGltZSI6MCwiZXhwIjoxNzQ2MDg3MzcyLCJpc3MiOiJxbV9uZXdfbWVkaWFfZngiLCJuYmYiOjE3NDYwMDA5NzIsIkVudiI6InJlbGVhc2UiLCJJc1NpbXVsYXRpb25Mb2dpbiI6ZmFsc2V9.r4Heb9qmhrpSvDQW5QiTi1dVW_hyX_JKoyenpEnUMDg",
+    //     "project": "reader_paid_dyminiapp",
+    //     "sec-ch-ua": "\"Microsoft Edge\";v=\"135\", \"Not-A.Brand\";v=\"8\", \"Chromium\";v=\"135\"",
+    //     "sec-ch-ua-mobile": "?1",
+    //     "sec-ch-ua-platform": "\"Android\"",
+    //     "sec-fetch-dest": "empty",
+    //     "sec-fetch-mode": "cors",
+    //     "sec-fetch-site": "same-origin",
+    //     "signature": "01b4982bffb69237587a38de6428cce9e1948cce3517c357bd136aa66cfd192b",
+    //     "target-id": "549124667291906201",
+    //     "cookie": "sensorsdata2015jssdkcross=%7B%22%24device_id%22%3A%22193bdc124645e2-0cbeaee172d4ce8-4c657b58-921600-193bdc12465567%22%7D; sa_jssdk_2015_new-media-fx_qimao_com=%7B%22distinct_id%22%3A%22193bdc124645e2-0cbeaee172d4ce8-4c657b58-921600-193bdc12465567%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E5%BC%95%E8%8D%90%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22http%3A%2F%2F120.79.128.142%3A4999%2F%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTkzYmRjMTI0NjQ1ZTItMGNiZWFlZTE3MmQ0Y2U4LTRjNjU3YjU4LTkyMTYwMC0xOTNiZGMxMjQ2NTU2NyJ9%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%7D; acw_tc=ac11000117460009692805554e0074ec3c1591025be468ce51e9071843da7f",
+    //     "Referer": "https://new-media-fx.qimao.com/backend/book-manage/index?projectId=reader_paid_dyminiapp&appId=14f237fdbb7711ef93f90293e6ac97a2&accountId=549124667291906201",
+    //     "Referrer-Policy": "strict-origin-when-cross-origin"
+    // };
+
+    // // headers['authorization'] = await tools.getQMToken()
+    // try {
+    //     const response = await fetch(`${url}?${params}`, {
+    //         method: 'GET',
+    //         headers: headers
+    //     });
+
+    //     const data = await response.json();
+    //     if(data.code!=200){
+    //         throw data
+    //     }
+    //     // console.log('响应状态:', response.status);
+    //     // console.log('响应数据:', data.data.list[0]);
+    //     if(data.data.list.length<=0){
+    //         return null
+    //     }
+    //     let book_info = data.data.list[0]
+    //     let info = {}
+    //     info.words =  Math.floor(parseFloat(book_info.book_word_count)*10000)
+    //     info.book_name =  book_info.book_name
+    //     info.book_id =  book_info.book_id
+    //     info.genre = 999;
+    //     if(book_info.book_type==2){  //七猫只有长或者短
+    //         info.genre = 3;
+    //     }else{
+    //         info.genre = 1;
+    //     }
+    //     return info;
+    // } catch (error) {
+    //     console.log(error)
+    //     return null
+    // }
 }
 
 
 
 async function makeRequest(book_id) {
+    
     const url = `https://new-media-fx.qimao.com/api/content/book/list?book_id=${book_id}&page=1&page_size=50&env=&t=1746001846107`;
     
     const headers = {

+ 51 - 0
src/api/yw/get_book_tg_chapter_id.js

@@ -57,4 +57,55 @@ CMD.get_book_tg_chapter_id = async function(book_id) {
 
 }
 
+CMD.get_book_publish_time = async function(book_id) {
+    try{
+        let OPENSESSID = await redis_help.getKeyValue("OPENSESSID")
+        // let client = tools.getOneNewClinet()
+        // let postData = {
+        //     cmd:"chapterSpread",
+        //     cbid:book_id,
+        //     OPENSESSID:OPENSESSID
+            
+        // }
+        // let response = await client.post(config.python_config.host, postData)
+        // console.log("response.data.received_data:",response.data.received_data)
+        // response = response.data.received_data
+     
+        await require('./getActiveInfo').getActiveInfo()
+        let timestamp = helper.getCurrentUnixTimestamp()
+        let url = `https://open.yuewen.com/api/wechatspread/chapterSpread?cbid=${book_id}&page=1&version=2&order_field=allwords&order_type=0&content_type=0&category2=-1&isfinish=-1`
+        const response =   await fetch(url, {
+            "headers": {
+              "accept": "application/json, text/plain, */*",
+              "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
+              "priority": "u=1, i",
+              "sec-ch-ua": "\"Microsoft Edge\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"",
+              "sec-ch-ua-mobile": "?0",
+              "sec-ch-ua-platform": "\"Windows\"",
+              "sec-fetch-dest": "empty",
+              "sec-fetch-mode": "cors",
+              "sec-fetch-site": "same-origin",
+              "Content-Type" : "application/json; charset=utf-8",
+              "cookie": `Hm_lvt_990f9ab9737a266517417cc2949bb3f4=${timestamp}; csrfToken=ffZRRnqo6A4ngGbvAVP_zK5_; OPENSESSID=${OPENSESSID}; yw_open_token=67db7bcd069db; is_read_notice=67db7bcd069db; sidebarStatus=0`,
+              "Referer": "https://open.yuewen.com/new/library",
+              "Referrer-Policy": "strict-origin-when-cross-origin"
+            },
+            "body": null,
+            "method": "GET"
+          });
+    
+          const data =  await response.json();
+          if(data.code!=0){
+              throw data
+          }
+          console.log('get_book_tg_chapter_id::响应状态:', response.status);
+          console.log('get_book_tg_chapter_id::响应数据:', data);
+          return data.data.bookInfo;
+    }catch(error){
+        console.error('get_book_tg_chapter_id::请求错误:', error);
+        return null;
+    }
+
+}
+
 module.exports = CMD;

+ 14 - 0
task_script.json

@@ -41,6 +41,20 @@
             "merge_logs": true,
             "exec_mode": "fork",
             "autorestart": true
+        },
+        {
+            "name": "sync_publish_time_fq_mf",
+            "script": "./task_script/sync_publish_time_fq_mf.js",
+            "node_args": "--max-old-space-size=8192 --expose-gc",
+            "max_memory_restart": "4G",
+            "args": ["--type=data"],
+            "cwd": "/home/tg_factory",
+            "log_date_format": "YYYY-MM-DD HH:mm:ss",
+            "error_file": "./logs/task_script/sync_publish_time_fq_mf_error.log",
+            "out_file": "./logs/task_script/sync_publish_time_fq_mf_out.log",
+            "merge_logs": true,
+            "exec_mode": "fork",
+            "autorestart": true
         }
     ]
 }

+ 4 - 3
task_script/sync_publish_time_dz.js

@@ -33,9 +33,10 @@ async function processTask(){
                     `UPDATE video_product SET publish_time = "${publish_time}"  WHERE id = ${video_product_info.id} `
                 );
             }else{
-                await connection.execute(
-                    ` delete from video_product  where   id = ${video_product_info.id}; `
-                );
+                // await connection.execute(
+                //     ` delete from video_product  where   id = ${video_product_info.id}; `
+                // );
+                console.error("查无此书:",video_product_info)
             }
         }
 

+ 68 - 0
task_script/sync_publish_time_fq.js

@@ -0,0 +1,68 @@
+//同步番茄的发布时间
+const config = require("../etc/config.json");
+const mysql = require('mysql2/promise');
+const taskdbConfig = config.isDebug?config.debug_task_mysql:config.release_task_mysql
+const redis_help = require('../src/use_redis');
+const CMD = {}
+async function processTask(){
+    let right_status = true
+    let connection  = null
+    try{
+        connection = await mysql.createConnection({
+            ...taskdbConfig,
+            multipleStatements: true
+        });
+        //先获取100本没有发布时间的七猫书籍
+        let sql = `SELECT * FROM video_product WHERE book_platform = ${config.platform_fanqie} AND  publish_time IS NULL  LIMIT 500`
+        console.log("sql:",sql)
+        const [rows] = await connection.execute(
+            sql
+        );
+
+        if(rows.length<=0){
+            throw 0
+        }
+
+        for (let index = 0; index < rows.length; index++) {
+            let video_product_info = rows[index]
+            let data =  await require('../src/api/fq/fq_search_book').search_new_id(video_product_info.product_id)
+            if(data!=null){
+                let publish_time = data.on_shelf_time
+                await connection.execute(
+                    `UPDATE video_product SET publish_time = "${publish_time}"  WHERE id = ${video_product_info.id} `
+                );
+            }else{
+                // await connection.execute(
+                //     ` delete from video_product  where   id = ${video_product_info.id}; `
+                // );
+                console.error("查无此书:",video_product_info)
+            }
+        }
+
+
+    }catch(e){
+        if(e==0){
+            right_status = false
+        }
+        console.error("processTask error:",e)
+    } finally{
+        if(connection!=null){
+            connection.end()
+        }
+        global.setTimeout(processTask, 2000);
+    }
+
+}
+
+
+
+CMD.init = async function(){
+    redis_help.connect((results)=>{
+        if(results){
+            processTask();
+        }
+    })
+
+}
+
+CMD.init()

+ 68 - 0
task_script/sync_publish_time_fq_mf.js

@@ -0,0 +1,68 @@
+//同步番茄免费的发布时间
+const config = require("../etc/config.json");
+const mysql = require('mysql2/promise');
+const taskdbConfig = config.isDebug?config.debug_task_mysql:config.release_task_mysql
+const redis_help = require('../src/use_redis');
+const CMD = {}
+async function processTask(){
+    let right_status = true
+    let connection  = null
+    try{
+        connection = await mysql.createConnection({
+            ...taskdbConfig,
+            multipleStatements: true
+        });
+        //先获取100本没有发布时间的番茄免费书籍
+        let sql = `SELECT * FROM video_product WHERE book_platform = ${config.platform_fanqiemf} AND  publish_time IS NULL  LIMIT 500`
+        console.log("sql:",sql)
+        const [rows] = await connection.execute(
+            sql
+        );
+
+        if(rows.length<=0){
+            throw 0
+        }
+
+        for (let index = 0; index < rows.length; index++) {
+            let video_product_info = rows[index]
+            let data =  await require('../src/api/fq/fq_search_book').search_mf_new_id(video_product_info.product_id)
+            if(data!=null){
+                let publish_time = data.on_shelf_time
+                await connection.execute(
+                    `UPDATE video_product SET publish_time = "${publish_time}"  WHERE id = ${video_product_info.id} `
+                );
+            }else{
+                console.error("查无此书:",video_product_info)
+                // await connection.execute(
+                //     ` delete from video_product  where   id = ${video_product_info.id}; `
+                // );
+            }
+        }
+
+
+    }catch(e){
+        if(e==0){
+            right_status = false
+        }
+        console.error("processTask error:",e)
+    } finally{
+        if(connection!=null){
+            connection.end()
+        }
+        global.setTimeout(processTask, 2000);
+    }
+
+}
+
+
+
+CMD.init = async function(){
+    redis_help.connect((results)=>{
+        if(results){
+            processTask();
+        }
+    })
+
+}
+
+CMD.init()

+ 83 - 0
task_script/sync_publish_time_hy.js

@@ -0,0 +1,83 @@
+//同步黑岩的发布时间
+const config = require("../etc/config.json");
+const mysql = require('mysql2/promise');
+const taskdbConfig = config.isDebug?config.debug_task_mysql:config.release_task_mysql
+const redis_help = require('../src/use_redis');
+const hy_search_book = require('../src/api/hy/hy_search_book'); 
+const CMD = {}
+async function processTask(){
+    let right_status = true
+    let connection  = null
+    try{
+        connection = await mysql.createConnection({
+            ...taskdbConfig,
+            multipleStatements: true
+        });
+        //先获取100本没有发布时间的黑岩书籍
+        let sql = `SELECT * FROM video_product WHERE book_platform = ${config.platform_heiyan} AND  publish_time IS NULL  LIMIT 500`
+        console.log("sql:",sql)
+        const [rows] = await connection.execute(
+            sql
+        );
+
+        if(rows.length<=0){
+            throw 0
+        }
+
+        for (let index = 0; index < rows.length; index++) {
+            let video_product_info = rows[index]
+     
+            // let data = 
+            // console.log("data:",data)
+            let data = await hy_search_book.search_id(video_product_info.product_id)
+            if(data==undefined||data==null){
+                data = null
+            }
+            if(data.rows==null||data.rows==undefined){
+                data = null
+            }
+        
+            if(data.rows.lenght<=0){
+                data = null
+            }
+            
+            if(data!=null){
+                let publish_time = data.rows[0].createTime
+                await connection.execute(
+                    `UPDATE video_product SET publish_time = "${publish_time}"  WHERE id = ${video_product_info.id} `
+                );
+            }else{
+                // await connection.execute(
+                //     ` delete from video_product  where   id = ${video_product_info.id}; `
+                // );
+                console.error("查无此书:",video_product_info)
+            }
+        }
+
+
+    }catch(e){
+        if(e==0){
+            right_status = false
+        }
+        console.error("processTask error:",e)
+    } finally{
+        if(connection!=null){
+            connection.end()
+        }
+        global.setTimeout(processTask, 2000);
+    }
+
+}
+
+
+
+CMD.init = async function(){
+    redis_help.connect((results)=>{
+        if(results){
+            processTask();
+        }
+    })
+
+}
+
+CMD.init()

+ 68 - 0
task_script/sync_publish_time_qm.js

@@ -0,0 +1,68 @@
+//同步七猫的发布时间
+const config = require("../etc/config.json");
+const mysql = require('mysql2/promise');
+const taskdbConfig = config.isDebug?config.debug_task_mysql:config.release_task_mysql
+const redis_help = require('../src/use_redis');
+const CMD = {}
+async function processTask(){
+    let right_status = true
+    let connection  = null
+    try{
+        connection = await mysql.createConnection({
+            ...taskdbConfig,
+            multipleStatements: true
+        });
+        //先获取100本没有发布时间的七猫书籍
+        let sql = `SELECT * FROM video_product WHERE book_platform = ${config.platform_qimao} AND  publish_time IS NULL  LIMIT 500`
+        console.log("sql:",sql)
+        const [rows] = await connection.execute(
+            sql
+        );
+
+        if(rows.length<=0){
+            throw 0
+        }
+
+        for (let index = 0; index < rows.length; index++) {
+            let video_product_info = rows[index]
+           
+            let data =  await require('../src/api/qm/qm_search_book').search_id(video_product_info.product_id)
+            if(data!=null){
+                let publish_time = data.publish_time
+                await connection.execute(
+                    `UPDATE video_product SET publish_time = "${publish_time}"  WHERE id = ${video_product_info.id} `
+                );
+            }else{
+                await connection.execute(
+                    ` delete from video_product  where   id = ${video_product_info.id}; `
+                );
+            }
+        }
+
+
+    }catch(e){
+        if(e==0){
+            right_status = false
+        }
+        console.error("processTask error:",e)
+    } finally{
+        if(connection!=null){
+            connection.end()
+        }
+        global.setTimeout(processTask, 2000);
+    }
+
+}
+
+
+
+CMD.init = async function(){
+    redis_help.connect((results)=>{
+        if(results){
+            processTask();
+        }
+    })
+
+}
+
+CMD.init()

+ 68 - 0
task_script/sync_publish_time_yw.js

@@ -0,0 +1,68 @@
+//同步阅文的发布时间
+const config = require("../etc/config.json");
+const mysql = require('mysql2/promise');
+const taskdbConfig = config.isDebug?config.debug_task_mysql:config.release_task_mysql
+const redis_help = require('../src/use_redis');
+const CMD = {}
+async function processTask(){
+    let right_status = true
+    let connection  = null
+    try{
+        connection = await mysql.createConnection({
+            ...taskdbConfig,
+            multipleStatements: true
+        });
+        //先获取100本没有发布时间的阅文书籍
+        let sql = `SELECT * FROM video_product WHERE book_platform = ${config.platform_yuewen} AND  publish_time IS NULL  LIMIT 500`
+        console.log("sql:",sql)
+        const [rows] = await connection.execute(
+            sql
+        );
+
+        if(rows.length<=0){
+            throw 0
+        }
+
+        for (let index = 0; index < rows.length; index++) {
+            let video_product_info = rows[index]
+            let data = await  await require('../src/api/yw/get_book_tg_chapter_id').get_book_publish_time(video_product_info.product_id)
+            if(data!=null){
+                let publish_time = data.CheckTime
+                await connection.execute(
+                    `UPDATE video_product SET publish_time = "${publish_time}"  WHERE id = ${video_product_info.id} `
+                );
+            }else{
+                // await connection.execute(
+                //     ` delete from video_product  where   id = ${video_product_info.id}; `
+                // );
+                console.error("查无此书:",video_product_info)
+            }
+        }
+
+
+    }catch(e){
+        if(e==0){
+            right_status = false
+        }
+        console.error("processTask error:",e)
+    } finally{
+        if(connection!=null){
+            connection.end()
+        }
+        global.setTimeout(processTask, 2000);
+    }
+
+}
+
+
+
+CMD.init = async function(){
+    redis_help.connect((results)=>{
+        if(results){
+            processTask();
+        }
+    })
+
+}
+
+CMD.init()

+ 68 - 0
task_script/sync_publish_time_zh.js

@@ -0,0 +1,68 @@
+//同步知乎的发布时间
+const config = require("../etc/config.json");
+const mysql = require('mysql2/promise');
+const taskdbConfig = config.isDebug?config.debug_task_mysql:config.release_task_mysql
+const redis_help = require('../src/use_redis');
+const CMD = {}
+async function processTask(){
+    let right_status = true
+    let connection  = null
+    try{
+        connection = await mysql.createConnection({
+            ...taskdbConfig,
+            multipleStatements: true
+        });
+        //先获取100本没有发布时间的知乎书籍
+        let sql = `SELECT * FROM video_product WHERE book_platform = ${config.platform_zhihu} AND  publish_time IS NULL  LIMIT 500`
+        console.log("sql:",sql)
+        const [rows] = await connection.execute(
+            sql
+        );
+
+        if(rows.length<=0){
+            throw 0
+        }
+
+        for (let index = 0; index < rows.length; index++) {
+            let video_product_info = rows[index]
+            let data = await require('../src/api/zh/zh_search_book').search_id(video_product_info.product_id)
+            if(data!=null){
+                let publish_time = data.publish_time
+                await connection.execute(
+                    `UPDATE video_product SET publish_time = "${publish_time}"  WHERE id = ${video_product_info.id} `
+                );
+            }else{
+                // await connection.execute(
+                //     ` delete from video_product  where   id = ${video_product_info.id}; `
+                // );
+                console.error("查无此书:",video_product_info)
+            }
+        }
+
+
+    }catch(e){
+        if(e==0){
+            right_status = false
+        }
+        console.error("processTask error:",e)
+    } finally{
+        if(connection!=null){
+            connection.end()
+        }
+        global.setTimeout(processTask, 2000);
+    }
+
+}
+
+
+
+CMD.init = async function(){
+    redis_help.connect((results)=>{
+        if(results){
+            processTask();
+        }
+    })
+
+}
+
+CMD.init()

+ 7 - 11
tg_factory_main.js

@@ -32,17 +32,13 @@ function getMainInfoById(MainConfig,main_id){
 }
 let isInit = false
 // config.isDebug
-if(config.isDebug){
+if(!config.isDebug){
     redis_help.connect( async (results)=>{
         if(results){
-            // await require('./src/api/fq/fq_search_book').search_new_id('7156137614049807396',(data)=>{
-            //     console.log("data:",data.data)
-            // })
-
-            // await require('./src/api/fq/fq_search_book').search_mf_new_id('7375572126402612286',(data)=>{
-            //     console.log("data:",data.data)
-            // })
- 
+            // let data =  await require('./src/api/fq/fq_search_book').search_new_id('7156137614049807396')
+        
+            // let data = await require('./src/api/fq/fq_search_book').search_mf_new_id('7375572126402612286')
+            // console.log("data:",data)
             // require('./src/api/dz/dz_login').login()
             // setTimeout(async ()=>{
             //         // let data = await require('./src/api/dz/dz_search_book').search_id('11010288676')
@@ -57,11 +53,11 @@ if(config.isDebug){
             // let zh_book_data = await require('./src/api/zh/zh_search_book').search_id("1864355654438887424")
             // console.log("zh_book_data:",zh_book_data)
 
-            // await redis_help.setKeyValue("OPENSESSID","00507b6b53d7d79fbe73d5dbb2cb5c62")
+            // await redis_help.setKeyValue("OPENSESSID","08c23f0d8b4352cd83c15534bad005f7")
             // let yw_book_data = await require('./src/api/yw/yw_search_book').search_id("20879682908817006")
             // console.log("yw_book_data:",yw_book_data)
 
-            // let yw_book_data =  await require('./src/api/yw/get_book_tg_chapter_id').get_book_tg_chapter_id("20879682908817006")
+            // let yw_book_data =  await require('./src/api/yw/get_book_tg_chapter_id').get_book_publish_time("20879682908817006")
             // console.log("yw_book_data:",yw_book_data)
 
                 // let qm_login = require('./src/api/qm/qm_login')