spider/src/sites/hoh8.js
2019-04-02 17:23:02 +08:00

156 lines
4.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
}
}
}
}