PullDataService.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. const axios = require('axios');
  2. const config = require('../etc/config.json');
  3. const helper = require('./helper');
  4. class PullDataService {
  5. constructor(redis_help) {
  6. this.mRedis = redis_help
  7. this.session = axios.create({
  8. baseURL: config.isDebug?config.pull_data_config.debug_host:config.pull_data_config.release_host,
  9. headers: {
  10. 'Accept': 'application/json, text/plain, */*',
  11. }
  12. });
  13. this.token = ""
  14. }
  15. async getToken() {
  16. try {
  17. let maxRetries = 3
  18. let delay = 1000;
  19. for (let i = 0; i < maxRetries; i++) {
  20. const response = await this.session.post(config.pull_data_config.get_token,{
  21. userName:config.pull_data_config.userName,
  22. verCode:config.pull_data_config.verCode,
  23. password:config.pull_data_config.release_password,
  24. loginType:config.pull_data_config.loginType
  25. });
  26. if(!response.data.success){
  27. if (i === maxRetries - 1) throw response;
  28. console.log(`Retry getToken ${i + 1} of ${maxRetries}`);
  29. await new Promise(resolve => setTimeout(resolve, delay * (i + 1)));
  30. }else{
  31. this.token = response.data.data.token
  32. await this.mRedis.setKeyValue("pull_data_token",this.token)
  33. return response.data;
  34. }
  35. }
  36. } catch (error) {
  37. return {data:null,success:false,msg:error}
  38. }
  39. }
  40. async get_novel_material_list(cur_timeRange,page,size=500) {
  41. let maxRetries = 3
  42. let delay = 1000;
  43. let otherStr = null
  44. if(cur_timeRange.pull_day!=null&&cur_timeRange.pull_day!=""&&cur_timeRange.pull_day!=undefined){
  45. otherStr = cur_timeRange.pull_day
  46. }
  47. for (let i = 0; i < maxRetries; i++) {
  48. try {
  49. var now = new Date(); // 当前时间
  50. if(cur_timeRange!=null){
  51. if(cur_timeRange.start_time==null||cur_timeRange.start_time==""||cur_timeRange.start_time==undefined){
  52. now = helper.getTimeStampByHourMinute(cur_timeRange.start,otherStr)
  53. }else{
  54. now = helper.getTimeStampByHourMinute(cur_timeRange.start_time,otherStr)
  55. }
  56. }
  57. let interval_minute = 60;
  58. if(cur_timeRange!=null){
  59. interval_minute = cur_timeRange.interval_minute
  60. }
  61. // const fiveMinutesAgo = new Date(now - 5 * 60 * 1000); // 5分钟前的时间
  62. const fiveMinutesAgo = new Date(now - interval_minute * 60 * 1000); // 60分钟前的时间
  63. let data = {
  64. startTime:fiveMinutesAgo.getTime(),
  65. endTime:now.getTime(),
  66. count:false
  67. }
  68. if(cur_timeRange!=null){
  69. cur_timeRange.pull_time = data
  70. }
  71. let params = `page=${page}&size=${size}&sort=update_time,desc`
  72. let url = config.pull_data_config.get_novel_material_list+params
  73. console.log(url,data)
  74. var response = await this.session.post(url,data, {
  75. headers: {
  76. 'token':await this.mRedis.getKeyValue("pull_data_token")
  77. }
  78. });
  79. if(!response.data.success){
  80. throw response.data
  81. }else{
  82. return response.data;
  83. }
  84. } catch (error) {
  85. if (i === maxRetries - 1) return {data:null,success:false,msg:error};
  86. console.log(`Retry get_novel_material_list ${i + 1} of ${maxRetries}`);
  87. await new Promise(resolve => setTimeout(resolve, delay * (i + 1)));
  88. }
  89. }
  90. }
  91. async get_detail(materialId_list) {
  92. let maxRetries = 3
  93. let delay = 1000;
  94. for (let i = 0; i < maxRetries; i++) {
  95. try {
  96. let data = {
  97. list:materialId_list,
  98. count:false
  99. }
  100. // console.log("config.pull_data_config.get_detail:",data)
  101. const response = await this.session.post(config.pull_data_config.get_detail,data, {
  102. headers: {
  103. 'token':await this.mRedis.getKeyValue("pull_data_token")
  104. }
  105. });
  106. if(!response.data.success){
  107. throw response.data
  108. }else{
  109. return response.data;
  110. }
  111. } catch (error) {
  112. if (i === maxRetries - 1) return {data:null,success:false,msg:error};
  113. console.log(`Retry get_detail ${i + 1} of ${maxRetries}`);
  114. await new Promise(resolve => setTimeout(resolve, delay * (i + 1)));
  115. }
  116. }
  117. }
  118. }
  119. module.exports = PullDataService;