Skip to Content

twitter automation

The current crop of social networking sites are harmful to mental health and digital freedom. It’s easier to automate a profile than to waste time explaining my views on social media over and over again.

options

Choosing the social network to use was easy. Twitter’s simplicity lends itself to automation. Also, it seems to be the “least evil” option. Even the worst Stallman can say about it is that it has harmful defaults for its privacy settings.

There are more choices when it comes to the method of automation:

  • automate.io: Oriented towards marketing wankateers, caps out at 250 events per month on the free plan.
  • Cloudpipes: Half-baked. Some of the listed integrations aren’t actually available, and all the good ones require a paid plan.
  • Huginn: Free and open source, self hosted. I want this to be the right tool for the job, but the integrations (“agents”) I need don’t exist.
  • IFTTT: Easy and free. Has the second best selection of integrations. Applets are limited to a single action.
  • Microsoft Flow: No.
  • StreamSets: Expensive, enterprise-oriented, and overkill for this project.
  • Stringify: A bit more flexible than IFTTT, but with a horrific interface and a 50+ megabyte mobile application required to do anything.
  • Zapier: Loads of integrations and far more flexible than the other hosted services. Free plan is limited to 5 applets.

solution

If I wanted to spend money at this project, I would use Zapier. If I wanted to spend time on it, I would use Huginn. I wanted to do neither of those things, so I settled with IFTTT. My primary media sources are RSS feeds managed with a Tiny Tiny RSS instance. I skim through these and send anything interesting to my Pocket queue. Thus tweeting archived Pocket articles should provide plenty of activity for the Twitter profile, without changing my workflow. On other sites, I will need to break my “lurking” habit and instead upvote / like items to set off the IFTTT applets. Twitter activity sends a webhook to a Telgraf instance, which sends it off to InfluxDB. This is just so I can get an activity graph on a Grafana dashboard. Another applet logs Twitter activity to a Google Sheets spreadsheet.

miscellaneous points

  • The gpodder.net function is useless because my podcast client of choice, AntennaPod, doesn’t support it yet.
  • I use Pocket, even though the server-side is not open-source, because it integrates with my ebook reader where I do most of my reading. Mozilla intends to open-source Pocket’s server-side components anyway.
  • This would have been much more elegant with Zapier. I wanted to log Twitter activity to a PostgreSQL database rather than a spreadsheet. Zapier can do this directly, with a paid plan. IFTTT could log to PostgreSQL by sending a webhook to Stitch, but because the logs are not critical, I settled with using a Twitter -> Google Sheets applet.
  • The IFTTT mobile application has some neat location-based features. Don’t use them, and don’t give the application location permission. Instead, use Tasker to send a webhook to IFTTT if you need to trigger location-based applets. Don’t send your location data to services that don’t need it.
  • I am aware that the Twitter feed produced by this is 100% reposts with no original content. The goal of this project is just to create a passable social media presence.

list of applets

Input Filter Output
Reddit Saved post Pocket
RSS Manual Pocket
Wikipedia New article in category ‘Linux’ Pocket
Blog New post in RSS feed Twitter
Flickr Favorited images Twitter
Flickr Posted images Twitter
gpodder.net Favorited episodes Twitter
Pocket Archived article Twitter
Reddit Upvoted post Twitter
Soundcloud Liked track Twitter
YouTube Liked video Twitter
Twitter Any activity InfluxDB
Twitter Any activity Spreadsheet
  digraph g {
  "Reddit" -> "Pocket"
  "RSS" -> "Pocket"
  "Wikipedia" -> "Pocket"
  "Blog" -> "Twitter"
  "Flickr" -> "Twitter"
  "gpodder.net" -> "Twitter"
  "Pocket" -> "Twitter"
  "Soundcloud" -> "Twitter"
  "YouTube" -> "Twitter"
  "Reddit" -> "Twitter"
  "Twitter" -> "InfluxDB"
  "Twitter" -> "Spreadsheet"
  }