-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtwitter.js
52 lines (41 loc) · 1.69 KB
/
twitter.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
const Twitter = require('twitter');
const config = require('./config.js');
var seen = require('./seen.json');
const util = require('util');
const fs = require('fs');
const client = new Twitter({
consumer_key: config.twitter.consumer_key,
consumer_secret: config.twitter.consumer_secret,
access_token_key: config.twitter.access_token_key,
access_token_secret: config.twitter.access_token_secret
});
const getWithPromise = util.promisify(client.get.bind(client));
const postWithPromise = util.promisify(client.post.bind(client));
const writeWithPromise = util.promisify(fs.writeFile);
function getTweets() {
return getWithPromise('search/tweets', {
q: 'from:Lin_Manuel -filter:retweets',
count: 100,
tweet_mode: 'extended'
}).then(filterTweets);
}
async function filterTweets(res) {
const tweets = res.statuses;
//Only specific tweets
let selectedTweets = tweets.filter((tweet) => tweet.full_text.includes('Gmorning') || tweet.full_text.includes('Gnight'));
//don't include replies
selectedTweets = selectedTweets.filter((tweet) => tweet.in_reply_to_user_id === null);
//Remove the ones I have seen
selectedTweets = selectedTweets.filter((tweet) => !seen.includes(tweet.id_str));
//get the IDs to save
tweetIDs = selectedTweets.map((tweet) => tweet.id_str);
await persistSeen(tweetIDs);
//Return only the text
selectedTweets = selectedTweets.map((tweet) => tweet.full_text);
return Promise.resolve(selectedTweets);
}
function persistSeen(IDs) {
seen = seen.concat(IDs);
return writeWithPromise('./seen.json', JSON.stringify(seen));
}
module.exports = getTweets;