import socketClient from '../socket/client'; import SpiderData from '../models/SpiderData'; import netUtil from '../utils/net.util'; let client = socketClient; /** * 玛丽娱乐 小程序数据爬取工具, 主要爬取电影和游戏,在run方法中打开或关闭对于代码 * 须从小程序中获取uid和token * * */ const token = 'c402cdea067bb6d1ff51090edbe0d645'; const uid = '2407044'; /** * 获取电影列表 * @param {Number} id 分页 从0开始 * */ const getMovieList = (id) => { let msg = `{"path":"/video/searchVideoList","body":"{\\"pageNum\\":${id},\\"kw\\":null,\\"type\\":\\"所有类型\\",\\"region\\":\\"所有地区\\",\\"date\\":\\"所有年代\\"}","reqId":"movielist000${id}"}`; client.send(msg); } // 获取电影详情 const getMovieInfo = () => { let record = list[current]; let msg = `{"path":"/video/getVideoDtl.page","body":"{\\"id\\":\\"${record.data.id}\\"}","reqId":"movieinfo${record.id}"}`; client.send(msg); } /** * 获取游戏列表 * @param {Number} id 分页 从0开始 * */ const getGameList = (id) => { let msg = `{"path":"/hg/getGameList","body":"{\\"pageNum\\":${id},\\"kw\\":\\"\\"}","reqId":"gamelist000${id}"}`; client.send(msg); } // 获取游戏详情 const getGameInfo = () => { let record = list[current]; let msg = `{"path":"/hg/getGameDtl.page","body":"{\\"gameId\\":\\"${record.id}\\"}","reqId":"gameinfo${record.id}"}`; client.send(msg); } // 获取观看广告的token, 用于更新用户余额 const getVideoToken = (id) => { let msg = `{"path":"/deal/getVideoADToken","body":"{}","reqId":"videotoken${id}"}`; client.send(msg); } // 更新用户余额 const updateMoney = async (appId, videoToken, appName) => { let url = 'https://game.hoh8.cn/hh/deal/getVideoADReward.anon'; let jsonData = {"appId": appId,"appName":appName,"token":videoToken,"userId":uid}; let data = { deviceType: 5, appVersion: 1, jsonData: JSON.stringify(jsonData) } return netUtil.postForm(url, data); } /** * 更新现有列表的详情 * @param {string} type 要更新的内容类型, game:游戏 movie:电影 * */ const parseAllRecord = async (type) => { try { list = await SpiderData.find({type: type, status: 0}); console.log(list.length); if (type === 'movie') { getMovieInfo(); } else if (type === 'game') { getGameInfo(); } } catch (err) { console.log(err); } } let current = 0; let list = []; export default { 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); } } } } }