My first Twitter bot
Who says Twitter is just for humans?
After weighing up my options, I decided to ditch the comfort of the desktop and dive straight in to Python. And since I like learning-by-doing, powering through Learn Python the Hard Way - along with the occasional visit to Stack Overflow - was my modus operandi.
And what have I got to show for all of this effort?
Two-year-old takes his first steps on his goombas, tells the world: "I got it" #GoombaNews— Goombot (@Goombot) July 7, 2014
Building a Twitter bot is fun, and a good project for learning Python, so I thought I’d jot a few tips down here in case you fancy trying something similar.
Things you’ll need
- A computer that you’re happy to leave running 24/7 so that the bot can do its stuff. I’m using a Model B Raspberry Pi, and rather than power a monitor and keyboard I connect via SSH and use Screen to keep sessions running after I disconnect. Alternatively, you could host your bot in the cloud with a service like Heroku.
- A Twitter account and set of Twitter API keys, which you get after registering a new app.
- A bunch of Python libraries (unless you really fancy starting from scratch). I’m using Tweepy for accessing the Twitter API and NLTK for parsing and tokenising tweets.
- Some logic. Some bots tweet when certain things happen, for example, while others attempt things like poetry or art. My bot is a little simpler: it remixes tweets by other people, and makes them sillier in the process.
Things that are optional for extra fun
- A PiGlow LED module for your Raspberry Pi. I’ve set mine to show different colours depending on what my bot is doing.
Things to watch out for
- Twitter screen names are not the same as IDs. Screen names start with @, IDs are numeric. Use GET users/show to get one from the other.
- Protect your API keys if you don’t want other people using them! Keep your configuration data in a separate file and don’t publish it.
- Automated text processing isn’t always easy to get right, so put some basic filtering in place if you’re worried about what your bot might end up tweeting.