增加文件下载方法

This commit is contained in:
zhl 2019-04-02 19:47:17 +08:00
parent a67aef9e4f
commit f4d92336c7
5 changed files with 151 additions and 67 deletions

View File

@ -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;

View File

@ -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",

View File

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

View 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
View File

@ -0,0 +1,11 @@
export default {
/**
* 从url中截取文件名
* @param {string} url
* @return {string} filename
* */
getFileNameFromUrl(url) {
return url.substring(url.lastIndexOf('/')+1)
}
}