An opinionated library to extract the best links from scheduled tweets from a
given Twitter account using Hootsuite (as scheduler source) and Facebook (as ranking mechanism).
It can be useful to build bots or automated newsletters.
Install
With NPM:
npm install best-scheduled-tweets
with Yarn:
yarn add best-scheduled-tweets
Requirements
This library requires Node.js >= 4.3.2. Therefore it can be used safely within AWS Lambda using the Node.js setup.
Usage
The library is composed by a programmatic interface that can be used within Node.js applications and an indipendent command line application that runs on Mac and most linux distributions (with Node.js >= 4.3.2 installed).
Library
To import the library in your project you need to do the following:
With ES2015+:
import { bestScheduledTweets } from 'best-scheduled-tweets';
With ES5:
const bestScheduledTweets = require('best-scheduled-tweets').default;
bestScheduledTweets
is now a function that can be invoked with an options
object as argument to retrieve the best links from scheduled tweets:
const options = {};
const bestLinks = bestScheduledTweets(options);
Internally the library will perform several http requests (Twitter API, Facebook API, URL unshortening, metadata retrieval, ...) so the processing might take a while. Be sure your environment can run for more than 10 seconds and be prepared to use caching mechanisms if needed.
Options
The options available are the following:
twitterClient
(mandatory): a twitter client instance created with the twitter libraryfbApp
(mandatory): a facebook app instance created with the fb libraryreferenceMoment
(mandatory): A moment instance representing a start time from which to consider the tweetsscreenNames
(mandatory): An array of twitter usernamesmaxTweetsPerUser
(optional, default 200
): The number of maximum tweets to fetch per user (max 200
)numResults
(optional, default 7
): The number of links to keep at the endblacklistedUrls
(optional, default []
): A set of blacklisted url that will be ignored in case they are fetched by the main process
Command line app
The command line app can be invoked by simply running in your shell:
best-scheduled-tweets
This program needs to have the following environment variables set:
TWITTER_CONSUMER_KEY
: a valid Twitter consumer keyTWITTER_CONSUMER_SECRET
: a valid Twitter consumer secretTWITTER_ACCESS_TOKEN_KEY
: a valid Twitter access token keyTWITTER_ACCESS_TOKEN_SECRET
: a valid Twitter access token secretFACEBOOK_APP_ID
: a valid Facebook application idFACEBOOK_APP_SECRET
: a valid Facebook application secretTWITTER_SCREEN_NAMES
: a list of comma separated Twitter usernamesREFERENCE_MOMENT
(optional): a date time string representing the starting point for tweets (it will default to one week ago).
In case of success, the command will output the result in JSON format in the console.
.env
tip
You can use the file .env~sample
available here as a template to store your environment variables. If you copy it into an .env
file you can then run:
source .env && best-scheduled-tweets
Sample output
The command will provide an output similar to the following:
[
{
"title": "Google planning AI tools for Pi makers this year",
"url": "http://social.techcrunch.com/2017/01/25/google-planning-ai-tools-for-pi-makers-this-year/",
"description": "Google is intending to expand the dev tools available to makers using the Raspberry Pi microprocessor to power their projects this year -- potentially..",
"image": "https://tctechcrunch2011.files.wordpress.com/2016/02/pi3_angled_web.jpg?w=764&h=400&crop=1",
"score": 3789
},
{
"title": "RethinkDB: why we failed",
"url": "http://www.defstartup.org/2017/01/18/why-rethinkdb-failed.html",
"description": "When we announced that RethinkDB is shutting down, I promised to write a post-mortem. I took some time to process the experience, and I can now write about i...",
"image": "http://placehold.it/350x150/ffffff/0000000&text=www.defstartup.org",
"score": 1022
},
{
"title": "Making Responsive HTML Email Coding Easy With MJML – Smashing Magazine",
"url": "https://www.smashingmagazine.com/2017/01/making-responsive-html-email-coding-easy-with-mjml/",
"description": "MJML is the only framework making responsive email easy. Learn how to create your own responsive email thanks to MJML in this step-by-step tutorial.",
"image": "https://www.smashingmagazine.com/wp-content/uploads/2017/01/mjml-vs-html-preview-opt.png",
"score": 963
},
{
"title": "Shut Up and Take My Money!",
"url": "/v/33c3-7969-shut_up_and_take_my_money",
"description": "FinTechs increasingly cut the ground from under long-established banks’ feet. With a \"Mobile First\" strategy, many set their sights on br...",
"image": "https://static.media.ccc.de/media/congress/2016/7969-hd_preview.jpg",
"score": 627
},
{
"title": "A Trip Down The LoL Graphics Pipeline",
"url": "https://engineering.riotgames.com/news/trip-down-lol-graphics-pipeline",
"description": "http://riot.com/2k1Hx8G #RiotTechBlog",
"image": "https://engineering.riotgames.com/sites/default/files/articles/55/renderingheadercropped.png",
"score": 621
},
{
"title": "Gmail will block .js file attachments starting February 13, 2017",
"url": "https://gsuiteupdates.googleblog.com/2017/01/gmail-will-restrict-js-file-attachments.html",
"description": "Gmail currently restricts certain file attachments (e.g. .exe, .msc, and .bat) for security reasons, and starting on February 13, 2017 , we...",
"image": "http://2.bp.blogspot.com/-7bZ5EziliZQ/VynIS9F7OAI/AAAAAAAASQ0/BJFntXCAntstZe6hQuo5KTrhi5Dyz9yHgCK4B/s1600/googlelogo_color_200x200.png",
"score": 436
},
{
"title": "The Underestimated Power Of Color In Mobile App Design",
"url": "https://www.smashingmagazine.com/2017/01/underestimated-power-color-mobile-app-design/",
"description": "This article covers the most important points related to color in apps, and how to choose colors and contrasts for your app that support usability.",
"image": "https://www.smashingmagazine.com/wp-content/uploads/2017/01/color-wheels-graph-opt.png",
"score": 420
}
]
Contributing
Everyone is very welcome to contribute to this project.
You can contribute just by submitting bugs or suggesting improvements by
opening an issue on GitHub.
License
Licensed under MIT License. © Luciano Mammino.