|
@@ -0,0 +1,59 @@
|
|
|
|
+Top 25 most influential Tweeters of 2022 and prior,
|
|
|
|
+
|
|
|
|
+Of 250 users bookmarked in 5,690 Tweets:
|
|
|
|
+
|
|
|
|
+1. ...
|
|
|
|
+
|
|
|
|
+This report was built with data from my personal apps.
|
|
|
|
+
|
|
|
|
+Stay tuned for my engagement report where I cound my number of Retweets for the same users--
|
|
|
|
+my equivalent to the Like button. Maybe next year the notes app will have date limited searches.
|
|
|
|
+As my capabilities and wisdom evolve my approach to social media will follow.
|
|
|
|
+
|
|
|
|
+Thanks.
|
|
|
|
+
|
|
|
|
+Code to build this report is included in the upcoming verson of The Notes App.
|
|
|
|
+
|
|
|
|
+https://harlanji.gumroad.com/l/the-notes-app
|
|
|
|
+
|
|
|
|
+```
|
|
|
|
+notesAppUrl = 'http://localhost:5000'
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+temp1 = await fetch(notesAppUrl + '/notes/cards/search?q=twitter.com/').then(r => r.json())
|
|
|
|
+
|
|
|
|
+re = /(https?[a-z0-9\.\/\:]+twitter\.com\/[0-9a-z\_]+\/status\/[\d]+)/ig
|
|
|
|
+
|
|
|
|
+cardMatches = temp1.cards
|
|
|
|
+ .map(cm => Object.assign({}, cm, {tweetLinks: Array.from(new Set(cm.card.content.match(re)))}))
|
|
|
|
+ .filter(cm => cm.tweetLinks && cm.tweetLinks.length)
|
|
|
|
+ .map(cm => Object.assign({}, cm, {tweetUrls: cm.tweetLinks.map(l => new URL(l))}))
|
|
|
|
+ .map(cm => Object.assign({}, cm, {tweetInfos: cm.tweetUrls.map(u => ({user: u.pathname.split('/')[1], tweetId: u.pathname.split('/')[3]}))}));
|
|
|
|
+
|
|
|
|
+tweetsByUser = cardMatches.reduce(function (report, m) {
|
|
|
|
+ m.tweetInfos.forEach(function (ti) {
|
|
|
|
+ if (!(ti.user in report)) {
|
|
|
|
+ report[ti.user] = [];
|
|
|
|
+ }
|
|
|
|
+ report[ti.user].push(ti);
|
|
|
|
+ });
|
|
|
|
+ return report;
|
|
|
|
+}, {});
|
|
|
|
+
|
|
|
|
+tweetsById = cardMatches.reduce(function (report, m) {
|
|
|
|
+ m.tweetInfos.forEach(function (ti) {
|
|
|
|
+ if (!report[ti.tweetId]) {
|
|
|
|
+ report[ti.tweetId] = [];
|
|
|
|
+ }
|
|
|
|
+ report[ti.tweetId].push(ti);
|
|
|
|
+ });
|
|
|
|
+ return report;
|
|
|
|
+}, {});
|
|
|
|
+
|
|
|
|
+top25Authors = Object.entries(tweetsByUser).sort(function (a, b) { return b[1].length - a[1].length }).slice(0,25)
|
|
|
|
+
|
|
|
|
+console.log("Top 25 authors:")
|
|
|
|
+console.log(top25Authors.map((e, i) => `${i+1}.\t@${e[0]}: ${e[1].length}` ).join("\n"))
|
|
|
|
+
|
|
|
|
+console.log("Total tweets: " + Object.keys(tweetsById).length);
|
|
|
|
+```
|