156 lines
4.6 KiB
JavaScript
156 lines
4.6 KiB
JavaScript
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);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|