-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgetTweets.js
executable file
·138 lines (118 loc) · 4.09 KB
/
getTweets.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
var https = require ('https');
var request = require('request');
var fs = require('fs');
//var mongoose = require('mongoose');
var DBHandler = require('./dbHandle.js').DBHandler;
var dbHandler= new DBHandler('localhost', 27017);
var createSignature = require('./createSignature.js');
var randomGeneration = require('./randomGeneration.js');
var obj = JSON.parse(fs.readFileSync('./config/consumerCredentials.json', 'utf8'));
var consumerKey = obj.consumer_key;
var consumerSecret = obj.consumer_secret_key;
var method = 'GET';
var urlTimeline = JSON.parse(fs.readFileSync('./config/getUrl.json', 'utf8'));
var urlString = urlTimeline.user_timeline;
module.exports = {
buildHeaders: function(options) {
var headers = [];
var nonce = randomGeneration.generateNonce();
//Created per request
var timestamp = Math.floor(Date.parse(new Date()) / 1000) ;
if(options.callback) {
headers.push('oauth_callback=' + options.callback);
}
headers.push(
'oauth_consumer_key=' + consumerKey,
'oauth_nonce='+nonce,
'oauth_signature_method=HMAC-SHA1',
'oauth_timestamp='+timestamp
);
if(options.token) {
headers.push('oauth_token=' + options.token);
}
headers.push('oauth_version=1.0');
return headers;
},
getTweet : function(token,tokenSecret,callback){
var self = this;
var params = ['count=200'];
var oauth_headers = this.buildHeaders({
token: token
});
var options = createSignature.create(method,urlString,params,oauth_headers,consumerSecret,tokenSecret);
var tweets = '';
var reqGet = https.request(options, function(resToken) {
//console.log("statusCode: ", resToken.statusCode);
var data = '';
resToken.on('data', function(chunk) {
data += chunk;
});
resToken.on('end', function() {
tweets = JSON.parse(data);
var userId = tweets[0].user.id;
var this_tweet_id = tweets[0].id;
var since_id = '';
//Check against DB if new Tweet is available : match stored-max_id with current max_tweet_id
dbHandler.getLatestTweetId(userId,function(error,id){
if(error){
//console.log("Error:" ,error);
}
if(id!==null){
since_id = id.id; //id of last/recent tweet in DB
//console.log("since_id:",since_id);
}
//console.log("Current Tweet Id from Twitter:", this_tweet_id);
if(since_id > 0 && this_tweet_id > since_id){
//console.log("If more new tweets are available..");
// while(since_id != this_tweet_id){
// self.getMoreTweets(userId,token,tokenSecret,since_id);
// }
self.getMoreTweets(userId,token,tokenSecret,since_id);
}
//Save tweets to DB
else if(!since_id){
//console.log("If New User..");
dbHandler.saveTweets(tweets,function(error){
if(error) {
//console.log("DB Error:",error);
}
});
}
});
});
}).on('error', function(error) {
//console.log("Error: ", error);
});
reqGet.end();
},
getMoreTweets : function(userId,token,tokenSecret,since_id){
//console.log("In getMoreTweets......!");
var oauth_headers = this.buildHeaders({
token: token
});
var params = ['count=200',
'since_id='+since_id,
'user_id='+userId
];
var options = createSignature.create(method,urlString,params,oauth_headers,consumerSecret,tokenSecret);
var tweets = '';
var reqGet = https.request(options, function(resToken) {
//console.log("statusCode: ", resToken.statusCode);
var data = '';
resToken.on('data', function(chunk) {
data += chunk;
});
resToken.on('end', function() {
tweets = JSON.parse(data);
dbHandler.saveTweets(tweets,function(error){
if(error) {
//console.log("DB Error:",error);
}
});
});
}).on('error',function(error){
//console.log("Error:",error);
});
reqGet.end();
}
};