-
Notifications
You must be signed in to change notification settings - Fork 0
/
fetchTweets.js
56 lines (48 loc) · 1.61 KB
/
fetchTweets.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
let Twitter = require('twitter');
require("dotenv").config();
let client = new Twitter({
consumer_key: process.env.TWITTER_CONSUMER_KEY,
consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
access_token_key: process.env.TWITTER_ACCESS_TOKEN,
access_token_secret: process.env.TWITTER_ACCESS_TOKEN_SECRET
});
const fetchTweets = (username) => {
return new Promise((resolve, reject) => {
let params = {
screen_name: username,
count: 200,
include_rts: false,
trim_user: true,
exclude_replies: true,
tweet_mode: "extended"
};
let tweets = [];
const fetchTweets = (error, newTweets) => {
if (error) {
reject(Error(error));
}
// Filter out tweets with only relevant info
filteredTweets = newTweets.map(function (tweet) {
return {
id: tweet.id_str,
language: tweet.lang,
contenttype: 'text/plain',
content: tweet.full_text.replace('[^(\\x20-\\x7F)]*', ''),
created: Date.parse(tweet.created_at),
reply: tweet.in_reply_to_screen_name != null
};
});
// check if tweets are actually retrieved and get more tweets if yes.
if (newTweets.length > 1) {
tweets = tweets.concat(filteredTweets);
params.max_id = tweets[tweets.length - 1].id - 1;
client.get('statuses/user_timeline', params, fetchTweets);
} else {
// if there are no more tweets to retrieve, return already retrieved tweets
resolve(tweets);
}
};
client.get('statuses/user_timeline', params, fetchTweets);
});
};
module.exports = fetchTweets;