RECEIVE_FACTORY.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. const CMD = {}
  2. const time_count = 250;
  3. const PROT = 9101
  4. var http = require('http');
  5. const axios = require('axios')
  6. const redis_help = require('../src/use_redis');
  7. const origin_data_controllers = require('../src/data_manager/Controllers/origin_data_controllers');
  8. const helper = require('../src/helper');
  9. const HttpClient = require('../src/HttpClient')
  10. const config = require('../etc/config.json')
  11. var recv_data_list = []
  12. const 视频id = 0;
  13. const 视频链接 = 1;
  14. const 标题 = 2;
  15. const 发布时间 = 3;
  16. const 收藏数 = 4;
  17. const 评论数 = 5;
  18. const 点赞数 = 6;
  19. const 分享数 = 7;
  20. const 是否挂件 = 8;
  21. const 挂件地址 = 9;
  22. let task_status = false
  23. function excelDateToJs(dateStr) {
  24. // const date = moment(dateStr, "DD/MM/YYYY HH:mm:ss").toDate();
  25. // return new Date(date);
  26. return new Date()
  27. }
  28. async function processTask(){
  29. try{
  30. if(recv_data_list.length>0){
  31. const xml = recv_data_list.pop();
  32. let guajian_link = ''
  33. guajian_link = xml[挂件地址]
  34. const result = await origin_data_controllers.getOriginDataById({video_id:xml[视频id]})
  35. if(result.success){
  36. await origin_data_controllers.updateOriginData({id:result.data.id},{kepp_num:xml[收藏数],comment_num:xml[评论数],like_num:xml[点赞数],shared_num:xml[分享数],guajian_link:guajian_link})
  37. }else{
  38. await origin_data_controllers.createOriginData(
  39. {
  40. video_id:xml[视频id],
  41. video_link:xml[视频链接],
  42. title:xml[标题],
  43. // publish_time:xml[发布时间],
  44. publish_time:excelDateToJs(xml[发布时间]),
  45. kepp_num:xml[收藏数],
  46. comment_num:xml[评论数],
  47. like_num:xml[点赞数],
  48. shared_num:xml[分享数],
  49. is_guajian:xml[是否挂件],
  50. guajian_link:guajian_link,
  51. status:0,
  52. }
  53. )
  54. }
  55. }else{
  56. task_status = false;
  57. }
  58. }catch(e){
  59. console.log("数据解析错误:",e)
  60. }finally{
  61. global.setTimeout(processTask,200)
  62. }
  63. }
  64. CMD.startTask = function(data){
  65. task_status = true;
  66. let temp_list = JSON.parse(data)
  67. for (let index = 1; index < temp_list.length; index++) {
  68. let isGuaJian = parseInt(temp_list[index][是否挂件])==1
  69. if(isGuaJian){
  70. recv_data_list.push(temp_list[index])
  71. }
  72. }
  73. console.log("temp_list.length:",temp_list.length)
  74. processTask()
  75. }
  76. CMD.init = function(){
  77. redis_help.connect(()=>{
  78. })
  79. }
  80. CMD.runTask = async function(){
  81. }
  82. CMD.test_fq_book_sid_tt = async function(book_id,sid_tt){
  83. try{
  84. let client =new HttpClient()
  85. let response = await client.proxyRequest( helper.getFqRequestOpt(book_id,sid_tt))
  86. console.log("response:",response)
  87. let obj = response['data']
  88. return obj['novel_data']
  89. }catch(e){
  90. // return {"error_book_id":book_id,"error_sid_tt":sid_tt}
  91. return null
  92. }
  93. }
  94. CMD.test_fq_mf_book_sid_tt = async function(book_id,sid_tt){
  95. try{
  96. let client =new HttpClient()
  97. let response = await client.proxyGet( helper.getMfFqRequestOpt(book_id,sid_tt))
  98. console.log("response:",response)
  99. let obj = response['data']
  100. return obj['book_info']
  101. }catch(e){
  102. // return {"error_book_id":book_id,"error_sid_tt":sid_tt}
  103. return null
  104. }
  105. }
  106. CMD.get_group_mapping = function(res){
  107. let get_hy_group_mapping = require('../src/api/hy/get_hy_group_mapping');
  108. get_hy_group_mapping.get_group_mapping((data)=>{
  109. res.writeHead(200, {'Content-Type': 'application/json'});
  110. if(data.code==200){
  111. let list = data.data
  112. res.end(JSON.stringify({ message:"成功!",data:list,code:10000}));
  113. }else{
  114. res.end(JSON.stringify({ message:"fail!",data:data,code:data.code}));
  115. }
  116. console.log("get_hy_group_mapping:",data)
  117. })
  118. }
  119. CMD.get_hy_rechargeTemplate = function(res){
  120. let get_hy_recharge_template = require('../src/api/hy/get_hy_recharge_template');
  121. get_hy_recharge_template.get_recharge_template("1865735741365059585",(data)=>{
  122. res.writeHead(200, {'Content-Type': 'application/json'});
  123. if(data.code==200){
  124. let list = data.data
  125. res.end(JSON.stringify({ message:"成功!",data:list,code:10000}));
  126. }else{
  127. res.end(JSON.stringify({ message:"fail!",data:data,code:data.code}));
  128. }
  129. console.log("get_hy_rechargeTemplate:",data)
  130. })
  131. }
  132. CMD.get_hy_SiteTemplate = function(res){
  133. let get_hy_site_template = require('../src/api/hy/get_hy_site_template');
  134. get_hy_site_template.get_callback_template((data)=>{
  135. res.writeHead(200, {'Content-Type': 'application/json'});
  136. if(data.code==200){
  137. let list = data.data
  138. res.end(JSON.stringify({ message:"成功!",data:list,code:10000}));
  139. }else{
  140. res.end(JSON.stringify({ message:"fail!",data:data,code:data.code}));
  141. }
  142. console.log("get_hy_SiteTemplate:",data)
  143. })
  144. }
  145. CMD.get_hy_passBackTemplate = function(res){
  146. let get_hy_call_back_template = require('../src/api/hy/get_hy_call_back_template');
  147. get_hy_call_back_template.get_callback_template((data)=>{
  148. res.writeHead(200, {'Content-Type': 'application/json'});
  149. if(data.code==200){
  150. let list = data.data
  151. res.end(JSON.stringify({ message:"成功!",data:list,code:10000}));
  152. }else{
  153. res.end(JSON.stringify({ message:"fail!",data:data,code:data.code}));
  154. }
  155. console.log("get_hy_passBackTemplate:",data)
  156. })
  157. }
  158. CMD.get_fq_callback_template = async function(res,distributor_id) {
  159. let data = await require('../src/api/fq/get_fq_call_back_template').get_callback_template(distributor_id)
  160. res.writeHead(200, {'Content-Type': 'application/json'});
  161. if(data==null){
  162. res.end(JSON.stringify({ message:"成功!",data:{},code:10000}));
  163. }else{
  164. console.log('get_fq_callback_template:', data);
  165. res.end(JSON.stringify({ message:"成功!",data:data,code:10000}));
  166. }
  167. }
  168. CMD.get_fq_rechargeTemplate = function(res,distributor_id){
  169. // var distributorId = config.fanqie_config.distributorId;
  170. var distributorId = distributor_id
  171. var secretKey = config.fanqie_config.secretKey;
  172. const postData = {
  173. distributor_id: distributorId,
  174. ts: helper.getCurrentUnixTimestamp(),
  175. sign: helper.getSign(distributorId,secretKey),
  176. page_size: 100,
  177. page_index:0,
  178. };
  179. // console.log("get_recharge_template:")
  180. var url = config.fanqie_config.recharge_list_host
  181. var base_params = `/?distributor_id=${postData.distributor_id}&ts=${postData.ts}&sign=${postData.sign}`
  182. var other_params = `&page_size=${postData.page_size}&page_index=${postData.page_index}`
  183. axios.get(`${url}${base_params}${other_params}`)
  184. .then(response => {
  185. // console.log('Response data:', response.data );
  186. let data = response.data
  187. res.writeHead(200, {'Content-Type': 'application/json'});
  188. if(data.code==200){
  189. let list = data.data
  190. res.end(JSON.stringify({ message:"成功!",data:list,code:10000}));
  191. }else{
  192. res.end(JSON.stringify({ message:"fail!",data:data,code:data.code}));
  193. }
  194. console.log("get_fq_rechargeTemplate:",data)
  195. })
  196. .catch(error => {
  197. console.error('Error:', error);
  198. res.end(JSON.stringify({ message:"fail!",data:data,code:data.code}));
  199. });
  200. }
  201. CMD.get_pull_token = async function(res){
  202. let token = await redis_help.getKeyValue("pull_data_token")
  203. res.writeHead(200, {'Content-Type': 'application/json'});
  204. res.end(JSON.stringify({ message:"成功!",data:{token:token},code:10000}));
  205. console.log('get_pull_token:', token);
  206. }
  207. CMD.get_dz_book = async function(book_id,res) {
  208. let data = await require('../src/api/dz/dz_search_book').search_id(book_id)
  209. res.writeHead(200, {'Content-Type': 'application/json'});
  210. res.end(JSON.stringify({ message:"成功!",data:data,code:10000}));
  211. console.log('get_dz_book:', data);
  212. }
  213. CMD.get_dz_callback_template = async function(channelId,res) {
  214. console.log("get_dz_callback_template!")
  215. require('../src/api/dz/get_dz_call_back_template').get_callback_template(channelId,(data)=>{
  216. console.log('get_dz_callback_template:', data);
  217. res.writeHead(200, {'Content-Type': 'application/json'});
  218. res.end(JSON.stringify({ message:"成功!",data:data,code:10000}));
  219. })
  220. }
  221. CMD.get_dz_recharge_template = async function(channelId,res) {
  222. await require('../src/api/dz/get_dz_recharge_template').get_recharge_template(channelId,(data)=>{
  223. console.log('get_dz_recharge_template:', data);
  224. res.writeHead(200, {'Content-Type': 'application/json'});
  225. res.end(JSON.stringify({ message:"成功!",data:data,code:10000}));
  226. })
  227. }
  228. CMD.get_qm_callback_template = async function(res,mini_program_platform_id) {
  229. let data = await require('../src/api/qm/get_qm_call_back_template').get_callback_template(mini_program_platform_id)
  230. console.log('get_qm_callback_template:', data);
  231. res.writeHead(200, {'Content-Type': 'application/json'});
  232. res.end(JSON.stringify({ message:"成功!",data:data,code:10000}));
  233. }
  234. CMD.get_qm_recharge_template = async function(res,category,mini_program_platform_id) {
  235. let data = await require('../src/api/qm/get_qm_recharge_template').get_recharge_template(category,mini_program_platform_id)
  236. console.log('get_qm_recharge_template:', data);
  237. res.writeHead(200, {'Content-Type': 'application/json'});
  238. res.end(JSON.stringify({ message:"成功!",data:data,code:10000}));
  239. }
  240. var server = http.createServer(function(req,res){
  241. res.setHeader('Access-Control-Allow-Origin', '*'); // 允许所有域的请求,注意:在生产环境中应该限制为特定的域
  242. res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); // 允许的方法
  243. res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); // 允许的头部
  244. let body = '';
  245. // 监听数据块
  246. req.on('data', chunk => {
  247. body += chunk.toString(); // 将接收到的数据块转换为字符串并拼接
  248. });
  249. // 监听请求结束
  250. req.on('end', async () => {
  251. if (req.method === 'POST') {
  252. if (req.headers['content-type'] === 'application/x-www-form-urlencoded') {
  253. try {
  254. // 解析 JSON 数据
  255. const jsonData = JSON.parse(body);
  256. console.log("recv msg:",jsonData)
  257. if(jsonData['fun']=="start_filter"&&jsonData['cmd']=="filter_task"){
  258. res.writeHead(200, {'Content-Type': 'application/json'});
  259. if(task_status==false){
  260. CMD.startTask(jsonData['data'])
  261. res.end(JSON.stringify({ msg: 'success!',code:10000,data:{}}));
  262. }else{
  263. res.end(JSON.stringify({ msg: '服务器繁忙!',code:10000,data:{}}));
  264. }
  265. }else if(jsonData['fun']=="test_fq_book_sid_tt"&&jsonData['cmd']=="fq_book"){
  266. let book_id = jsonData['data']['book_id']
  267. let sid_tt = jsonData['data']['sid_tt']
  268. let info = await CMD.test_fq_book_sid_tt(book_id,sid_tt)
  269. res.writeHead(200, {'Content-Type': 'application/json'});
  270. if(info==null){
  271. res.end(JSON.stringify({ message:"失败",code:10001}));
  272. }else{
  273. res.end(JSON.stringify({ message:"成功!",data:info,code:10000}));
  274. }
  275. }else if(jsonData['fun']=="test_fq_mf_book_sid_tt"&&jsonData['cmd']=="fq_mf_book"){
  276. let book_id = jsonData['data']['book_id']
  277. let sid_tt = jsonData['data']['sid_tt']
  278. let info = await CMD.test_fq_mf_book_sid_tt(book_id,sid_tt)
  279. res.writeHead(200, {'Content-Type': 'application/json'});
  280. if(info==null){
  281. res.end(JSON.stringify({ message:"失败",code:10001}));
  282. }else{
  283. res.end(JSON.stringify({ message:"成功!",data:info,code:10000}));
  284. }
  285. }else if(jsonData['fun']=="groupMapping"&&jsonData['cmd']=="hy_link"){
  286. CMD.get_group_mapping(res)
  287. }else if(jsonData['fun']=="rechargeTemplate"&&jsonData['cmd']=="hy_link"){
  288. CMD.get_hy_rechargeTemplate(res)
  289. }else if(jsonData['fun']=="get_hy_SiteTemplate"&&jsonData['cmd']=="hy_link"){
  290. CMD.get_hy_SiteTemplate(res)
  291. }else if(jsonData['fun']=="passBackTemplate"&&jsonData['cmd']=="hy_link"){
  292. CMD.get_hy_passBackTemplate(res)
  293. }else if(jsonData['fun']=="rechargeTemplate"&&jsonData['cmd']=="fq_link"){
  294. let distributor_id = jsonData['data']['distributor_id']
  295. CMD.get_fq_rechargeTemplate(res,distributor_id)
  296. }else if(jsonData['fun']=="get_pull_token"&&jsonData['cmd']=="pull_data_config"){
  297. CMD.get_pull_token(res)
  298. }else if(jsonData['fun']=="get_dz_book"&&jsonData['cmd']=="dz_link"){
  299. let book_id = jsonData['data']['book_id']
  300. CMD.get_dz_book(book_id,res)
  301. }else if(jsonData['fun']=="get_dz_callback_template"&&jsonData['cmd']=="dz_link"){
  302. let channelId = jsonData['data']['channelId']
  303. CMD.get_dz_callback_template(channelId,res)
  304. }else if(jsonData['fun']=="get_dz_recharge_template"&&jsonData['cmd']=="dz_link"){
  305. let channelId = jsonData['data']['channelId']
  306. CMD.get_dz_recharge_template(channelId,res)
  307. }else if(jsonData['fun']=="get_qm_recharge_template"&&jsonData['cmd']=="qm_link"){
  308. let category = jsonData['data']['category']
  309. let mini_program_platform_id = jsonData['data']['mini_program_platform_id']
  310. CMD.get_qm_recharge_template(res,category,mini_program_platform_id)
  311. }else if(jsonData['fun']=="get_qm_callback_template"&&jsonData['cmd']=="qm_link"){
  312. let mini_program_platform_id = jsonData['data']['mini_program_platform_id']
  313. CMD.get_qm_callback_template(res,mini_program_platform_id)
  314. }else if(jsonData['fun']=="get_fq_callback_template"&&jsonData['cmd']=="fq_link"){
  315. let distributor_id = jsonData['data']['distributor_id']
  316. CMD.get_fq_callback_template(res,distributor_id)
  317. } else{
  318. res.writeHead(200, {'Content-Type': 'application/json'});
  319. res.end(JSON.stringify({ message: 'fun 错误',code:100}));
  320. }
  321. } catch (error) {
  322. // 处理解析错误
  323. console.error('Error parsing JSON:', error);
  324. res.writeHead(200, {'Content-Type': 'application/json'});
  325. res.end(JSON.stringify({ error: 'Invalid JSON' }));
  326. }
  327. } else {
  328. // 如果不是 JSON 内容类型,返回错误
  329. res.writeHead(200, {'Content-Type': 'text/plain'});
  330. res.end('Unsupported Media Type. Please send data as JSON.');
  331. }
  332. }else{
  333. res.writeHead(200, {'Content-Type': 'text/plain'});
  334. res.end(' Please Use Post.');
  335. }
  336. });
  337. })
  338. server.listen(PROT,()=>{
  339. });
  340. CMD.init()