fetchSeriesList.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. const axios = require('axios');
  2. const fetch = require('node-fetch'); // Node.js 18以下版本需要安装 node-fetch
  3. const mysql = require('mysql2/promise');
  4. const config = require('../etc/config.json');
  5. const tools = require('../tools');
  6. let page_index = 0
  7. let page_size = 50
  8. const dbConfig = config.isDebug?config.debug_mysql:config.release_mysql
  9. async function fetchSeriesList() {
  10. const cookieString = [
  11. 'store-region=cn-gd',
  12. 'passport_csrf_token=777699e0a85a3f179b3d49d1522f6534',
  13. 'sessionid=095d62d09558ad4413432fcd6e6f9f83',
  14. 'uid_tt=3d5c6ebd1397d1c638878c38a80b230f',
  15. 'csrf_session_id=cdc5b94ddec13774e679878ba18e230d'
  16. ].join('; ');
  17. const cookie = cookieString;
  18. const url = `https://www.changdunovel.com/novelsale/distributor/content/series/list/v1?permission_statuses=3%2C4&delivery_status=1&page_index=${page_index}&page_size=${page_size}&msToken=eQq4g1F1zAgsr6tvrmnjeHkDlGXqftkBzgFijt8FcqviZUnupHBBnPhRwyC6_IkH2ogO4WxdhKeO_JQi2iUpuNEZphry6XIBlv7VtJfV5OF5iLy9uXo1Izyv9UDurerJgRJlFoSzqUkf5Kd3_nTsq9oovDKN5n8Kn06hPKo5jDHWvw%3D%3D&a_bogus=YvsVgHULDNRbapAG8KQtHXcUJC9Mrs8yeliOWKUy9PE8TXUbAueypnG1boLX8JIQimpFNNP7wrF%2FFVpcQ%2FzTZqnkFmhvSmhWNsdcVXfL817vT-i2IpWPCEtEwvsr0STYTO9Ui5EXXtMFILc3gpVTA2K9SKFaQuYM%2F3NjdcUUSxg-g-iY9NbAyE%3D%3D`;
  19. const headers = {
  20. "accept": "application/json, text/plain, */*",
  21. "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
  22. "agw-js-conv": "str",
  23. "appid": "30008807",
  24. "apptype": "4",
  25. "distributorid": "1823764273348612",
  26. "priority": "u=1, i",
  27. "sec-ch-ua": "\"Chromium\";v=\"134\", \"Not:A-Brand\";v=\"24\", \"Microsoft Edge\";v=\"134\"",
  28. "sec-ch-ua-mobile": "?0",
  29. "sec-ch-ua-platform": "\"Windows\"",
  30. "sec-fetch-dest": "empty",
  31. "sec-fetch-mode": "cors",
  32. "sec-fetch-site": "same-origin",
  33. "x-secsdk-csrf-token": "000100000001238d43574083d4014d20fb02aa7b981d8cfdd0f47eea2618c791131e6e17dbb8182b64102ac64c30",
  34. "cookie": cookie,
  35. "Referer": "https://www.changdunovel.com/sale/short-play/list?permission_statuses=3%2C4&delivery_status=1&page_index=1&page_size=10",
  36. "Referrer-Policy": "strict-origin-when-cross-origin"
  37. };
  38. try {
  39. const response = await axios.get(url, { headers });
  40. let total = response.data.data.total
  41. let list = response.data.data.data
  42. let total_page_num = Math.floor(total/page_size) + (total%page_size>0?1:0)
  43. console.log(list);
  44. console.log(total);
  45. console.log(total_page_num);
  46. await insertDB(list)
  47. if(page_index<(total_page_num-1)){
  48. page_index++;
  49. fetchSeriesList();
  50. console.log("page_index::",page_index)
  51. }
  52. return response.data;
  53. } catch (error) {
  54. console.error('Error fetching series list:', error);
  55. }
  56. }
  57. async function insertDB(data) {
  58. try {
  59. const connection = await mysql.createConnection({
  60. ...dbConfig,
  61. multipleStatements: true
  62. });
  63. // await processVideoTitles(connection, data.map(item => item.title));
  64. console.log("data:",data)
  65. // 转换时间戳为MySQL datetime格式
  66. const values = data.map(item => [
  67. item.book_id,
  68. tools.getNewBookName(item.series_name),
  69. item.amount_limit_status,
  70. item.book_pool,
  71. item.category,
  72. item.category_text,
  73. item.creation_status,
  74. item.delivery_status,
  75. item.episode_amount,
  76. item.episode_price,
  77. item.free_episode_count,
  78. item.latest_update_time,
  79. item.need_show_publish_tag,
  80. item.on_shelf_time,
  81. item.original_thumb_url,
  82. item.permission_status,
  83. item.price_changed,
  84. item.publish_time,
  85. item.thumb_uri,
  86. item.thumb_url,
  87. item.wx_audit_status,
  88. item.wx_is_reject
  89. ]);
  90. let table_name = "fq_dj_lib"
  91. const insertSQL = `
  92. INSERT INTO ${table_name}
  93. (book_id, series_name, amount_limit_status, book_pool, category,
  94. category_text, creation_status, delivery_status, episode_amount,
  95. episode_price, free_episode_count, latest_update_time, need_show_publish_tag,
  96. on_shelf_time, original_thumb_url, permission_status, price_changed,
  97. publish_time, thumb_uri,thumb_url,wx_audit_status,wx_is_reject)
  98. VALUES ?
  99. ON DUPLICATE KEY UPDATE
  100. book_id = VALUES(book_id)
  101. `;
  102. await connection.query(insertSQL, [values]);
  103. await connection.end();
  104. console.log(`成功插入 ${values.length} 条记录到表 ${table_name}`);
  105. } catch (error) {
  106. console.error('处理消息失败:', error);
  107. throw error;
  108. }
  109. }
  110. // 调用函数
  111. fetchSeriesList();