增加文件下载方法
This commit is contained in:
parent
a67aef9e4f
commit
f4d92336c7
@ -8,7 +8,8 @@ let config = {
|
|||||||
name: 'spider'
|
name: 'spider'
|
||||||
},
|
},
|
||||||
db: 'mongodb://localhost/ghost-development',
|
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;
|
module.exports = config;
|
||||||
|
@ -15,11 +15,15 @@
|
|||||||
"author": "zhl",
|
"author": "zhl",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"async": "^2.6.2",
|
||||||
"bluebird": "^3.5.3",
|
"bluebird": "^3.5.3",
|
||||||
"bunyan": "^1.8.12",
|
"bunyan": "^1.8.12",
|
||||||
|
"dateformat": "^3.0.3",
|
||||||
"file-stream-rotator": "^0.4.1",
|
"file-stream-rotator": "^0.4.1",
|
||||||
|
"fs": "0.0.1-security",
|
||||||
"fs-extra": "^7.0.1",
|
"fs-extra": "^7.0.1",
|
||||||
"glob": "^7.1.3",
|
"glob": "^7.1.3",
|
||||||
|
"mkdirp": "^0.5.1",
|
||||||
"mongoose": "^5.2.15",
|
"mongoose": "^5.2.15",
|
||||||
"request": "^2.88.0",
|
"request": "^2.88.0",
|
||||||
"request-promise": "^4.2.4",
|
"request-promise": "^4.2.4",
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
import socketClient from '../socket/client';
|
import socketClient from '../socket/client';
|
||||||
import SpiderData from '../models/SpiderData';
|
import SpiderData from '../models/SpiderData';
|
||||||
import netUtil from '../utils/net.util';
|
import netUtil from '../utils/net.util';
|
||||||
|
import downloadQueue from '../utils/download.util';
|
||||||
|
import stringUtil from '../utils/string.util';
|
||||||
|
|
||||||
let client = socketClient;
|
let client = socketClient;
|
||||||
|
|
||||||
@ -78,7 +80,17 @@ const parseAllRecord = async (type) => {
|
|||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(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;
|
let current = 0;
|
||||||
@ -86,70 +98,73 @@ let list = [];
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
run: function () {
|
run: function () {
|
||||||
let url = `wss://game.hoh8.cn/hh/websocket?userId=${uid}&token=${token}&roomId=0&groupId=global`;
|
downloadAllMovieImg();
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// 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