-
Notifications
You must be signed in to change notification settings - Fork 1
/
account_mention.js
104 lines (90 loc) · 2.71 KB
/
account_mention.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
var settings = require('../etc/settings.json');
var tool = require('../lib/tool').tool;
var weibo = require('weibo');
var async = require('async');
var db = require('../lib/db').db;
db.init(settings);
var dbStat = require('../lib/db_stats').db;
dbStat.init(settings);
weibo.init('tsina', settings.weibo.appkey, settings.weibo.secret);
var fetchMentionList = function(task, queueCallback){
var timer = setTimeout(function(){
queueCallback();
}, 30000);
var localUser = task.user;
weibo.tapi.mentions(task, function(err, result){
console.log([localUser.stock_code, task.page]);
clearTimeout(timer);
var delay = false;
if(err){
if(typeof err.message == 'object' && typeof err.message.error == 'string' && err.message.error.match(/^40312/)){
delay = true;
}
if(task.retry < 5){
task.retry += 1;
task.user = localUser;
lq.push(task);
}
}
if(err || result.length == 0){
if(delay){
console.log("delaying");
setTimeout(function(){
queueCallback();
}, 10000);
}else{
queueCallback();
}
return;
}
var duplicated = false;
var q = async.queue(function(mention, sCallback){
if(duplicated){
sCallback();
return;
}
mention.account_id = localUser.id;
dbStat.insertMention(mention, function(err, info){
if(err && err.number == 1062){
duplicated = true;
}
sCallback();
});
}, 1);
q.drain = function(){
console.log(duplicated);
if(!duplicated){
task.user = localUser;
task.page += 1;
task.retry = 0;
lq.push(task);
}
queueCallback();
}
async.forEach(result, function(mention, callback){
q.push(mention);
callback();
});
});
}
var lq = async.queue(fetchMentionList, 2);
lq.drain = function(){
console.log("complete!!!");
setTimeout(function(){
process.exit(0);
}, 1000 * 60);
}
db.loadAccounts(function(err, accs){
accounts = accs;
for(var stock in accounts){
if(!accounts[stock].weibo_user_id){
continue;
}
var listTask = {user_id:accounts[stock].weibo_user_id, user:accounts[stock], page:1, count:200,retry:0};
lq.push(listTask);
}
});
setInterval(function(){
var o = {listQueue:lq.length()}
console.log(o);
}, 1000);