diff --git a/src/app.js b/src/app.js index 1751892..f3fdb0c 100644 --- a/src/app.js +++ b/src/app.js @@ -17,8 +17,8 @@ db.on('error', function (err) { }); db.once('open', function () { logger.info('Connected to db.'); - // hoh8.run(); - book.run(); + hoh8.run(); + // book.run(); }); mongoose.connect(config.db, {promiseLibrary: Promise, useNewUrlParser: true}); diff --git a/src/models/SpiderData.js b/src/models/SpiderData.js index 5f06c2c..a7ee699 100644 --- a/src/models/SpiderData.js +++ b/src/models/SpiderData.js @@ -26,6 +26,15 @@ class SpiderDataClass { static async saveList(list, type) { for(let record of list) { if (record.id > 0) { + let recordExists + try { + recordExists = await SpiderDataModel.findOne({'data.id': record.id}); + } catch (err) { + console.log(err); + } + if (recordExists) { + continue; + } let sdata = new SpiderDataModel({ type: type, data: record, diff --git a/src/sites/hoh8.js b/src/sites/hoh8.js index a6c16a0..496281a 100644 --- a/src/sites/hoh8.js +++ b/src/sites/hoh8.js @@ -12,8 +12,8 @@ let client = socketClient; * * */ -const token = 'c402cdea067bb6d1ff51090edbe0d645'; -const uid = '2407044'; +let token = 'cbc5511ca0993963375939f64f4d9a06'; +let uid = '2387984'; /** * 获取电影列表 * @param {Number} id 分页 从0开始 @@ -93,78 +93,110 @@ const downloadAllMovieImg = async () => { } } +const getToken = async () => { + let url = `https://game.hoh8.cn/hh/wx/ma/login.anon`; + const data = { + deviceType: '5', + appVersion: '1.7', + jsonData: '{"sessionKey":"nXEu5cOb7G2ny0/AptdfKw==","signature":"472560f8675dc15bb91e57b01e8cd7288e064265","rawData":"{\\"nickName\\":\\"zhl³\\",\\"gender\\":1,\\"language\\":\\"zh_CN\\",\\"city\\":\\"徐汇\\",\\"province\\":\\"上海\\",\\"country\\":\\"中国\\",\\"avatarUrl\\":\\"https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLzZqZE6LPAFoqMAqv24dXrcESedsLqnk7ic9ibB8Opzs1WHn6XAqnpwBYWJU4O1HNaDyghszLTYLIw/132\\"}","encryptedData":"doRkV9CbRLD2bOaDxE4D3uMxyTEdhktoQ05+4XlACNWz1pBVbUCLk1OBNh5Vz4Bml1aTPhoMgs40BJlrjglM3iW4j7I4eOAd6LLW7IwXse9Nub7flH1RuhXddixWysVjJvRqiLCk8rPLcHa0K90Pi0r3/1H6yjxdjdSuLxqxgWPtNa/liOVToYlxHHucaP+wWaC0e54MzoWCKSS+feKamNxpUJPU6mmlDDHiEJh11n7EOPmsIBof4yW+S0RGJRzYc+59gk7nBY+wML8FMVtLL4raefCUztZIBpmFtsqOddr+swYnQA4cNVGJRmEbyjuOQFQq3UVAn2lJIcubx6R5gYe6FQkb3pSwf/WdruwBLYHaln4J4+yBMK8lbEZTXZseFwyM69ILomnUHDyPy2EZ6E/ozve7nQQJiKUzbISPDCqa5jUFGB9CcDQFAIgDyQJL+xIgmKlFpXz4JsJCkwccEw==","iv":"sOPgT1rNZvYWixujDYiSRw=="}' + }; + const header = { + 'Content-Type': 'application/x-www-form-urlencoded', + 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.3(0x17000321) NetType/WIFI Language/zh_CN', + Referer: 'https://servicewechat.com/wxabcbf9b61bdeac64/7/page-frame.html', + 'Accept-Language': 'zh-cn', + 'cache-control': 'no-cache', + }; + let repData = await netUtil.postForm(url, data, header, true); + repData = JSON.parse(repData); + return repData; +} let current = 0; let list = []; +const parseSocketMsg = () => { + let url = `wss://game.hoh8.cn/hh/websocket?userId=${uid}&token=${token}&roomId=0&groupId=global`; + client.open(url, ''); + client.onopen = (e) => { + console.log('socket on open'); + // getMovieList(0); //获取所有电影列表 + // getGameList(0); //获取所有游戏列表 + // parseAllRecord('movie'); //更新详情 + getVideoToken(0); //刷钱 + } + client.onmessage = async (data, flags, number) => { + console.log(data); + data = JSON.parse(data); + let id = parseInt(data.reqId.replace('movielist000', '')); + if (data.reqId.indexOf('movielist') === 0 && data.data.length > 0) { + try { + await SpiderData.saveList(data.data, 'movie'); + getMovieList(id + 1); + } catch (err) { + console.log(err); + } + } else if (data.reqId.indexOf('movieinfo') === 0) { + await SpiderData.updateData(data.data); + console.log('begin next movie'); + current++; + if (current < list.length) { + getMovieInfo(); + } else { + console.log('finish parse movie info') + process.exit(1); + } + } else if (data.reqId.indexOf('gamelist') === 0 && data.data.length > 0) { + try { + await SpiderData.saveList(data.data, 'game'); + getGameList(id + 1); + } catch (err) { + console.log(err); + } + } else if (data.reqId.indexOf('gameinfo') === 0) { + await SpiderData.updateData(data.data); + console.log('begin next game'); + current++; + if (current < list.length) { + getGameInfo(); + } else { + console.log('finish parse movie info') + process.exit(1); + } + } else if (data.reqId.indexOf('videotoken') === 0) { + const appId = data.data.appId; + const videoToken = data.data.token; + const appName = data.data.appName; + console.log(`appId: ${appId}, token: ${videoToken}`); + try { + const result = await updateMoney(appId, videoToken, appName); + console.log(result); + setTimeout(function () { + if (current ++ < 20) { + getVideoToken(current); + } + }, 15000) + } catch (err) { + console.log(err); + } + } + } +} + export default { - run: function () { - downloadAllMovieImg(); + run: async () => { + try { + let data = await getToken(); + if (data.code === 0) { + token = data.sessionToken; + uid = data.user.userId; + parseSocketMsg(); + } + } catch (err) { + console.log(err); + } + } // run: function () { - // let url = `wss://game.hoh8.cn/hh/websocket?userId=${uid}&token=${token}&roomId=0&groupId=global`; - // client.open(url, ''); - // client.onopen = (e) => { - // console.log('socket on open'); - // // getMovieList(0); - // // getGameList(0); - // // parseAllRecord('movie'); - // getVideoToken(0); - // } - // client.onmessage = async (data, flags, number) => { - // console.log(data); - // data = JSON.parse(data); - // let id = parseInt(data.reqId.replace('movielist000', '')); - // if (data.reqId.indexOf('movielist') === 0 && data.data.length > 0) { - // try { - // await SpiderData.saveList(data.data, 'movie'); - // getMovieList(id + 1); - // } catch (err) { - // console.log(err); - // } - // } else if (data.reqId.indexOf('movieinfo') === 0) { - // await SpiderData.updateData(data.data); - // console.log('begin next movie'); - // current++; - // if (current < list.length) { - // getMovieInfo(); - // } else { - // console.log('finish parse movie info') - // process.exit(1); - // } - // } else if (data.reqId.indexOf('gamelist') === 0 && data.data.length > 0) { - // try { - // await SpiderData.saveList(data.data, 'game'); - // getGameList(id + 1); - // } catch (err) { - // console.log(err); - // } - // } else if (data.reqId.indexOf('gameinfo') === 0) { - // await SpiderData.updateData(data.data); - // console.log('begin next game'); - // current++; - // if (current < list.length) { - // getGameInfo(); - // } else { - // console.log('finish parse movie info') - // process.exit(1); - // } - // } else if (data.reqId.indexOf('videotoken') === 0) { - // const appId = data.data.appId; - // const videoToken = data.data.token; - // const appName = data.data.appName; - // console.log(`appId: ${appId}, token: ${videoToken}`); - // try { - // const result = await updateMoney(appId, videoToken, appName); - // console.log(result); - // setTimeout(function () { - // if (current ++ < 20) { - // getVideoToken(current); - // } - // }, 15000) - // } catch (err) { - // console.log(err); - // } - // } - // } + // downloadAllMovieImg(); // } } diff --git a/src/utils/net.util.js b/src/utils/net.util.js index 7c231fe..2f7b6bb 100644 --- a/src/utils/net.util.js +++ b/src/utils/net.util.js @@ -15,7 +15,7 @@ const requestData = (options) => { }); } export default { - postForm(url, data, header) { + postForm(url, data, header, gzip) { header = header || { 'Cache-Control': 'no-cache', 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', @@ -26,6 +26,7 @@ export default { headers: header, form: data, }; + (gzip) && (options.gzip = true); return requestData(options); }, getData(url, header) {