· 6 years ago · Sep 30, 2019, 03:26 AM
1
2import twit from "twit";
3
4// INSERT YOUR API KEY HERE
5const TwitterAPI = new twit({
6 consumer_key: "",
7 consumer_secret: "",
8 access_token: "",
9 access_token_secret: "",
10 timeout_ms: 60 * 1000 // optional HTTP request timeout to apply to all requests.
11 // strictSSL: true // optional - requires SSL certificates to be valid.
12});
13
14const TwitterPromise = (httpAction, url, params) => {
15 return new Promise((resolve, reject) => {
16 TwitterAPI[httpAction](url, params, (err, data, response) => {
17 err ? reject(err) : resolve(data);
18 });
19 });
20};
21
22const sleepMilliseconds = ms => {
23 return new Promise(resolve => {
24 setTimeout(resolve, ms);
25 });
26};
27
28const like_driller = async () => {
29 let lastDate = Date.now();
30 let maxID = null;
31 let params = {
32 count: 200
33 };
34 let allLikes = [];
35 while (lastDate > Date.now() - TWO_WEEKS) {
36 try {
37 const data = await TwitterPromise("get", "favorites/list", params);
38 let lastElem = data[data.length - 1];
39 lastDate = Date.parse(lastElem.created_at);
40 params["max_id"] = lastElem.id;
41 console.log(`Crawling ... ${lastElem.created_at}`);
42 await sleepMilliseconds(1000);
43 allLikes.push(...data);
44 } catch (e) {
45 // Rate limit
46 await sleepMilliseconds(1000 * 60 * 5); // Sleep 5m
47 }
48 }
49 fs.writeFileSync("./user_likes.json", JSON.stringify(allLikes));
50};
51
52// like_driller();
53
54const like_processor = async () => {
55 const contents = fs.readFileSync(`./user_likes.json`);
56 const data = JSON.parse(contents);
57 const umap = {};
58 data.forEach(liked_post => {
59 let u = liked_post.user.screen_name;
60 umap[u] = 1 + +(umap[u] || 0);
61 });
62 console.log(data[0].user.screen_name);
63 var sortable = [];
64 for (var user in umap) {
65 sortable.push([user, umap[user]]);
66 }
67
68 sortable.sort(function(a, b) {
69 return b[1] - a[1];
70 });
71 console.log(sortable.slice(0, 20));
72};
73
74like_processor();