增加文件下载方法
This commit is contained in:
parent
a67aef9e4f
commit
f4d92336c7
@ -8,7 +8,8 @@ let config = {
|
||||
name: 'spider'
|
||||
},
|
||||
db: 'mongodb://localhost/ghost-development',
|
||||
logs_path: '/Users/zhl/Documents/logs/spider'
|
||||
logs_path: '/Users/zhl/Documents/logs/spider',
|
||||
download_path: '/Users/zhl/Documents/spider',
|
||||
};
|
||||
|
||||
module.exports = config;
|
||||
|
@ -15,11 +15,15 @@
|
||||
"author": "zhl",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"async": "^2.6.2",
|
||||
"bluebird": "^3.5.3",
|
||||
"bunyan": "^1.8.12",
|
||||
"dateformat": "^3.0.3",
|
||||
"file-stream-rotator": "^0.4.1",
|
||||
"fs": "0.0.1-security",
|
||||
"fs-extra": "^7.0.1",
|
||||
"glob": "^7.1.3",
|
||||
"mkdirp": "^0.5.1",
|
||||
"mongoose": "^5.2.15",
|
||||
"request": "^2.88.0",
|
||||
"request-promise": "^4.2.4",
|
||||
|
@ -1,6 +1,8 @@
|
||||
import socketClient from '../socket/client';
|
||||
import SpiderData from '../models/SpiderData';
|
||||
import netUtil from '../utils/net.util';
|
||||
import downloadQueue from '../utils/download.util';
|
||||
import stringUtil from '../utils/string.util';
|
||||
|
||||
let client = socketClient;
|
||||
|
||||
@ -78,7 +80,17 @@ const parseAllRecord = async (type) => {
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
|
||||
}
|
||||
const downloadAllMovieImg = async () => {
|
||||
try {
|
||||
list = await SpiderData.find({type: 'movie', status: 1}).sort({'data.id': 1});
|
||||
for (let record of list) {
|
||||
let data = record.data;
|
||||
downloadQueue.add_file_queue({type: 'movie', name: stringUtil.getFileNameFromUrl(data.img), url: data.img});
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
}
|
||||
}
|
||||
|
||||
let current = 0;
|
||||
@ -86,70 +98,73 @@ 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
downloadAllMovieImg();
|
||||
}
|
||||
// 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);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
53
src/utils/download.util.js
Normal file
53
src/utils/download.util.js
Normal file
@ -0,0 +1,53 @@
|
||||
import config from '../../config/config';
|
||||
import fs from 'fs';
|
||||
import request from 'request';
|
||||
import async from 'async';
|
||||
import dateformat from 'dateformat';
|
||||
import mkdirp from 'mkdirp';
|
||||
import logger from '../utils/logger';
|
||||
|
||||
|
||||
/**
|
||||
* 文件下载队列
|
||||
* */
|
||||
let q = async.queue(function (file, cb) {
|
||||
let local_path = `${config.download_path}/${dateformat('yyyymmdd')}/${file.type}`;
|
||||
if (!fs.existsSync(local_path)){
|
||||
mkdirp.sync(local_path);
|
||||
}
|
||||
if (file.name) {
|
||||
local_path = local_path + '/' + file.name;
|
||||
}
|
||||
if (fs.existsSync(local_path)) {
|
||||
return cb()
|
||||
}
|
||||
let stream = request
|
||||
.get({
|
||||
url: file.url,
|
||||
timeout: 1000
|
||||
})
|
||||
.on('response', function(response) {
|
||||
|
||||
})
|
||||
.on('error', function(err) {
|
||||
cb(err);
|
||||
})
|
||||
.pipe(fs.createWriteStream(local_path));
|
||||
stream.on('finish',() => {
|
||||
console.info(file, 'file download success');
|
||||
cb()
|
||||
})
|
||||
}, 2);
|
||||
q.drain = function(){
|
||||
console.info('all queue done');
|
||||
};
|
||||
module.exports = {
|
||||
add_file_queue(file) {
|
||||
console.log('add file to queue', file);
|
||||
q.push(file, function(err){
|
||||
if (err) {
|
||||
console.log('error download file: ', file.url, err);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
11
src/utils/string.util.js
Normal file
11
src/utils/string.util.js
Normal file
@ -0,0 +1,11 @@
|
||||
|
||||
export default {
|
||||
/**
|
||||
* 从url中截取文件名
|
||||
* @param {string} url
|
||||
* @return {string} filename
|
||||
* */
|
||||
getFileNameFromUrl(url) {
|
||||
return url.substring(url.lastIndexOf('/')+1)
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user