fq_search_book.js 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. const axios = require('axios');
  2. const querystring = require('querystring');
  3. const config = require("../../../etc/config.json")
  4. const helper = require('../../helper');
  5. const https = require('https');
  6. const tools = require('../../../tools');
  7. const CMD = {}
  8. const cookies = {
  9. passport_csrf_token: 'e5e407280e33da2743aa7389a228401a',
  10. sid_guard: 'ca22fa2d213a5ac029c2861e79415614%7C1751510164%7C5184000%7CMon%2C+01-Sep-2025+02%3A36%3A04+GMT',
  11. sessionid: 'ca22fa2d213a5ac029c2861e79415614',
  12. adUserId: '3657398892890426',
  13. distributorId: '1823565160001931'
  14. }
  15. const temp_cookie = `sid_guard=${cookies.sid_guard}; sessionid=${cookies.sessionid}`
  16. CMD.根据番茄免费ID查询付费书籍 = async function(bookId){
  17. let client = tools.getOneNewClinet()
  18. try{
  19. let response = await client.get(`${config.fanqie_config.find_child_book_host}${bookId}`)
  20. if(response.data["code"]==401){
  21. throw response.data["msg"]
  22. }
  23. let book_info = response.data
  24. // console.log(book_info)
  25. let info = {}
  26. info.words = book_info.word_count
  27. info.book_name = book_info.book_name
  28. info.book_id = book_info.book_id
  29. info.publish_time = book_info.on_shelf_time
  30. info.author = book_info.author
  31. if(book_info.genre==8){
  32. info.genre = 3;
  33. }else{
  34. info.genre = 1;
  35. }
  36. return info;
  37. }catch(e){
  38. console.error("qm_find_parent_book error:",e)
  39. return null
  40. }
  41. }
  42. CMD.根据番茄付费ID查询免费书籍 = async function(bookId){
  43. let client = tools.getOneNewClinet()
  44. try{
  45. let response = await client.get(`${config.fanqie_mf_config.find_parent_book_host}${bookId}`)
  46. if(response.data["code"]==401){
  47. throw response.data["msg"]
  48. }
  49. let book_info = response.data
  50. let info = {}
  51. info.words = book_info.ad_word_number
  52. info.book_name = book_info.book_name
  53. info.book_id = book_info.book_id
  54. info.publish_time = book_info.on_shelf_time
  55. info.author = book_info.author
  56. if(book_info.genre==8){
  57. info.genre = 3;
  58. }else{
  59. info.genre = 1;
  60. }
  61. return info;
  62. }catch(e){
  63. console.error("qm_find_parent_book error:",e)
  64. return null
  65. }
  66. }
  67. CMD.search_id = async function(bookId,distributorId){
  68. const postData = {
  69. distributor_id: distributorId,
  70. ts: helper.getCurrentUnixTimestamp(),
  71. sign: helper.getSign(distributorId,config.fanqie_config.secretKey),
  72. book_id: bookId
  73. };
  74. var url = `https://www.changdunovel.com/novelsale/openapi/content/book_meta/v1/?distributor_id=${postData.distributor_id}&ts=${postData.ts}&sign=${postData.sign}&book_id=${postData.book_id}`
  75. console.log("url",url)
  76. let response = await axios.get(url)
  77. return response.data
  78. }
  79. // 设置 Cookie
  80. CMD.search_name = function(keyword){
  81. // 搜索关键词
  82. const encodedKeyword = encodeURIComponent(keyword); // 对关键词进行 URL 编码
  83. // 设置正确的 Cookie 字符串
  84. const cookie = 'passport_csrf_token=82f80619e2d3c3eb0aa7962d7c94305e; sid_tt=c00d65a0717e75e79ad8aecaa82f4064; sessionid=c00d65a0717e75e79ad8aecaa82f4064';
  85. // 设置请求的 URL
  86. const url = `https://www.changdunovel.com/novelsale/distributor/content/book/list/v1?permission_statuses=3,4&search_type=2&query=${encodedKeyword}&page_index=0&page_size=10`;
  87. // 设置请求头
  88. const headers = {
  89. 'Accept': 'application/json, text/plain, */*',
  90. 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
  91. 'Agw-Js-Conv': 'str',
  92. 'Appid': '546801',
  93. 'Apptype': '1',
  94. 'Cache-Control': 'no-cache',
  95. 'Cookie': cookie,
  96. 'Distributorid': '1814786227164185',
  97. 'Pragma': 'no-cache',
  98. 'Priority': 'u=1, i',
  99. 'Referer': `https://www.changdunovel.com/sale/novel/list?permission_statuses=3%2C4&search_type=2&query=${encodedKeyword}&page_index=1&page_size=10`,
  100. 'Sec-Ch-Ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
  101. 'Sec-Ch-Ua-Mobile': '?0',
  102. 'Sec-Ch-Ua-Platform': '"macOS"',
  103. 'Sec-Fetch-Dest': 'empty',
  104. 'Sec-Fetch-Mode': 'cors',
  105. 'Sec-Fetch-Site': 'same-origin',
  106. 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
  107. 'X-Secsdk-Csrf-Token': 'DOWNGRADE'
  108. };
  109. // 执行请求
  110. axios.get(url, { headers })
  111. .then(response => {
  112. console.log(response.data); // 输出结果
  113. })
  114. .catch(error => {
  115. console.error('Error:', error.message); // 输出错误信息
  116. });
  117. }
  118. CMD.search_new_id = async function(bookId,call_back){
  119. const fetch = require('node-fetch');
  120. const url = `https://www.changdunovel.com/novelsale/distributor/content/book/list/v1?permission_statuses=3%2C4&search_type=5&query=${bookId}&page_index=0&page_size=10&msToken=Y1ycMk3xTJj-ZZNpi5dVCcNHYRw7NKehmunCGftKYr_s0if-k5jcQlON71uUe7MB2KjvNRoGYmT3xq4s82yZfH9s2gV4Fpun-grz__CT9spTPzqlrZ_y2K6wLJy7g3WR0o6hmxY5_pBG1yoAPghBO6HMNFQoJaiLMV8Mr__5LVqqpg%3D%3D&a_bogus=Ey4jDttwmZR5apAGuCktelelzSDMr0uy8-ToStJy9Oq-GqlO9YefdaGkjoKmDjFU5upZpSIHAn4MKdxcQKwiZHQpKmZfuEhRST9Vn0sL8Z7mGPJZVNbmSiSoKJiG%2F5REO%2FavxM0WltmOZd%2F1pNd%2FM5a7u%2FXomcSBRw9TfxXGE1qh6Pht78f%3D`;
  121. const headers = {
  122. 'accept': 'application/json, text/plain, */*',
  123. 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
  124. 'agw-js-conv': 'str',
  125. 'appid': '40013175',
  126. 'apptype': '8',
  127. 'distributorid': '1826185708850233',
  128. 'priority': 'u=1, i',
  129. 'sec-ch-ua': '"Microsoft Edge";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
  130. 'sec-ch-ua-mobile': '?1',
  131. 'sec-ch-ua-platform': '"Android"',
  132. 'sec-fetch-dest': 'empty',
  133. 'sec-fetch-mode': 'cors',
  134. 'sec-fetch-site': 'same-origin',
  135. 'x-secsdk-csrf-token': '000100000001914e91f95f8129843d7ae581c2ae522b975d3994a1f71be6a7a9e478964baf7a183ba7abea3a9c09',
  136. 'cookie': temp_cookie,
  137. 'Referer': 'https://www.changdunovel.com/sale/novel/list?permission_statuses=3%2C4&search_type=5&query=7382805882943310874&page_index=1&page_size=10',
  138. 'Referrer-Policy': 'strict-origin-when-cross-origin'
  139. };
  140. try{
  141. let response = await fetch(url, {
  142. method: 'GET',
  143. headers: headers
  144. })
  145. let data = await response.json()
  146. if(data.code!=0){
  147. throw data
  148. }
  149. return data.data[0]
  150. }catch(e){
  151. console.error("search_new_id error:",e)
  152. return ""
  153. }
  154. }
  155. CMD.search_mf_new_id = async function(bookId){
  156. return new Promise((resolve, reject) => {
  157. const options = {
  158. hostname: 'www.changdunovel.com',
  159. path: '/novelsale/distributor/content/book/list/v1',
  160. method: 'GET',
  161. headers: {
  162. 'accept': 'application/json, text/plain, */*',
  163. 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
  164. 'agw-js-conv': 'str',
  165. 'appid': '40017687',
  166. 'apptype': '15',
  167. 'distributorid': '1819222136130603',
  168. 'priority': 'u=1, i',
  169. 'sec-ch-ua': '"Microsoft Edge";v="135", "Not-A.Brand";v="8", "Chromium";v="135"',
  170. 'sec-ch-ua-mobile': '?1',
  171. 'sec-ch-ua-platform': '"Android"',
  172. 'sec-fetch-dest': 'empty',
  173. 'sec-fetch-mode': 'cors',
  174. 'sec-fetch-site': 'same-origin',
  175. 'x-secsdk-csrf-token': '000100000001914e91f95f8129843d7ae581c2ae522b975d3994a1f71be6a7a9e478964baf7a183ba7abea3a9c09',
  176. 'cookie': temp_cookie
  177. }
  178. };
  179. // 构建查询参数
  180. const params = new URLSearchParams({
  181. permission_statuses: '3,4',
  182. search_type: '6',
  183. query: `${bookId}`,
  184. page_index: '0',
  185. page_size: '1',
  186. msToken: 'QtOXD1IEPGNjuwS8Lzzew68qWnqxmVU10gPxOLcbijTXMmshIe_toySxUmiovwVBez7c8O3QcscyRES2_uC',
  187. a_bogus: 'mf0RheSEOx/nKpltmKsUeUHUEy2MrzuyDBTKRijyeNxpTZMaA8eeNOc9rxumZFaaeYpNZSMHUn-AznrcOcwwZ7HpKskvui7RtG9I98so8ZH3bBJg9r6MCGGoqkke/cWE85ltx9011UfO1nclk3dKMp3Jo/4qQODdRJ9zfPvax1q6640a7s8='
  188. });
  189. options.path += `?${params.toString()}`;
  190. const req = https.request(options, (res) => {
  191. let data = '';
  192. res.on('data', (chunk) => {
  193. data += chunk;
  194. });
  195. res.on('end', () => {
  196. try {
  197. const parsedData = JSON.parse(data);
  198. if(parsedData.code!=0){
  199. resolve("");
  200. return
  201. }
  202. if(parsedData.data.length<=0){
  203. resolve(null);
  204. return
  205. }
  206. resolve(parsedData.data[0]);
  207. } catch (e) {
  208. console.error('JSON parsing error:', e);
  209. reject(e);
  210. }
  211. });
  212. });
  213. req.on('error', (error) => {
  214. console.error('Request error:', error);
  215. reject(error);
  216. });
  217. // 设置请求超时
  218. req.setTimeout(10000, () => {
  219. req.destroy();
  220. reject(new Error('Request timeout'));
  221. });
  222. req.end();
  223. });
  224. }
  225. module.exports = CMD;