Before we get started, have you tried our new Python Code Assistant? It's like having an expert coder at your fingertips. Check it out!
Using the Twitter API, we can build bots to help us automate the Twitter experience. This is especially helpful if you have an audience and want to automate tasks like posting tweets regularly without actively doing it yourself.
In this article, I will teach you how to build a simple Twitter (X) bot using Tweepy. We will host it on Render.com as a Cron Job and set it to run every hour.
You can check the full source code here.
In this tutorial, we will build a Twitter bot that automatically tweets for us. This bot will tweet random dog facts every hour. The dog facts will come from this API endpoint.
The Twitter bot is limited only to tweeting. It does not like posts, share, DM, or do anything else besides tweeting. However, you are free to add these functionalities if you'd like to. You can either directly send requests to Twitter's endpoints or use Tweepy, like what we will do in this tutorial. You can read Tweepy's docs or Twitter Dev Documentation for more details.
Make sure you have the following before proceeding:
To begin with, create a new directory and initialize a Python virtual environment:
$ mkdir dog_facts_tweeter_bot
$ cd dog_facts_tweeter_bot
$ python3 -m venv tweeter_bot_venv
# Activate the virtual environment:
# - MacOS/Linux
$ source tweeter_bot_venv/bin/activate
# - Windows
$ tweeter_bot_venv\Scripts\activate
Go to your Twitter Dev Portal. Choose the project that holds the App you created for this tutorial.
Then, navigate to your App's keys and tokens tab and generate new pairs if you don't have them yet or generate new ones if you misplaced your existing tokens. We don't need the Bearer Token for this tutorial:
On your project, create a .env
file and save your tokens there:
# Consumer Keys > API Key and Secret
API_KEY=<your-API-key>
API_SECRET=<your-API-secret>
# Authentication Tokens > Access Token and Secret
ACCESS_TOKEN=<your-access-token>
ACCESS_TOKEN_SECRET=<your-access-token-secret>
Since we will push this later to GitHub to host our bot, we need to initialize Git in this project.
First, create a .gitignore
file and paste the following:
__pycache__
.env
Then, initialize git and commit everything to the local repo.
$ git init
$ git add .
$ git commit -m 'initial commit'
Make sure you already have a virtual environment running. If so, install the dependencies:
$ pip install tweepy, requests, python-env
Create a new file and name it tweet.py
.
Open up this Python file in your code editor and import the following packages:
import os
import tweepy
import requests
from dotenv import load_dotenv
Before we proceed, let us first understand the Twitter API.
The Standard v1.1 Twitter API was launched in 2012 and allowed devs to post, interact, and retrieve data from Twitter. Recently, there have been major changes in the Twitter API, which gave rise to the release of Twitter API v2. The Twitter API v2 includes a modern foundation and advanced features.
Like other APIs, the Twitter API requires you to authenticate yourself on every request. There are 3 authentication methods Twitter uses:
Depending on what you're trying to achieve, different endpoints of the Twitter API require different authentication methods.
Since we're limiting ourselves to just building a bot tweeting dog facts, we will only need the endpoint to post tweets.
The endpoint for this is https://api.twitter.com/2/tweets
. This endpoint is part of the Twitter API v2 and requires either the OAuth 2.0 Authorization Code with PKCE or the OAuth 1.0a.
We will use the OAuth 1.0a for this tutorial since the OAuth 2.0 Authorization Code with PKCE requires more setup, which we don't necessarily need in this scenario.
That's why we only took the API Keys and Access tokens from the Twitter dev portal earlier. This is because OAuth 1.0a only requires these keys.
So, to continue, load the API keys and access tokens you saved in the .env
file earlier into the scope of this module using the load_dotenv()
function:
load_dotenv()
API_KEY = os.getenv("API_KEY")
API_SECRET = os.getenv("API_SECRET")
ACCESS_TOKEN = os.getenv("ACCESS_TOKEN")
ACCESS_TOKEN_SECRET = os.getenv("ACCESS_TOKEN_SECRET")
Next, create an instance of the tweepy.Client()
class and pass these API keys and access tokens. We will use the instance of this class to interact with the Twitter API so that we don't have to manually do that (which is such a tedious task):
client = tweepy.Client(
consumer_key=API_KEY,
consumer_secret=API_SECRET,
access_token=ACCESS_TOKEN,
access_token_secret=ACCESS_TOKEN_SECRET
)
Probably the most important part of this article. With tweepy, we can easily do this in a few lines of code:
def tweet_dog_fact(tweepy_client):
dog_facts_api = 'http://dog-api.kinduff.com/api/facts'
print('fetching dog facts...')
res = requests.get(dog_facts_api)
print('tweeting a dog fact...')
tweet_text = res.json()['facts'][0]
tweepy_client.create_tweet(text=tweet_text)
tweet_dog_fact(client)
Here, we first fetch data from the dog_facts_api
to get some dog facts (which we will tweet). Then, using the tweepy.Client.create_tweet()
method, we passed the dog fact we fetched as the tweet text we want to post. This method handles the interaction with Twitter's API for us. Lastly, we need to call this tweet_dog_fact()
function and pass the client
instance we created earlier. This function will run every time we run this tweet.py
module.
And that's it!
That's how you can build a simple Twitter bot with Python in less than 30 lines of code. We're now ready to test this code.
To test this bot, just run the tweet.py
like a regular Python file.
$ python tweet.py
Then, go to your bot's Twitter profile and check for a new Tweet:
Cool! If everything worked as intended, you should see a similar result.
Now that everything works properly, we must host this bot to work independently and Tweet on our behalf.
But first, commit all the changes we made:
$ git add .
$ git commit -m 'built the twitter bot'
Next, create a new GitHub repo and push this local repo to GitHub.
Now it's time to host it on Render.
Go to your Render dashboard, click on the blue New + button, then select Cron Job. From there, select Build and deploy from a Git repository and click Next. If you connected your Render account with your GitHub profile, you can directly select the repo of your Twitter bot from GitHub to Render. Otherwise, paste your repo's link under the Public Git Repository section.
From there, set up your CRON Job with the following settings:
python tweet.py
.env
file. Note that you should enter one environment variable per entry:
API_KEY
=[your-API-key]API_SECRET
=[your-API-secret]ACCESS_TOKEN
=[your-access-token]ACCESS_TOKEN_SECRET
=[your-access-token-secret]Save all the changes, and you should have a new Cron Job in Render.com. It will run the bot in its first build. This Cron job will be triggered to build and run this bot whenever you push changes to your GitHub repo. Depending on how you set up the CRON expression, it will run the bot every X amount of times (1 hour if you followed along, 5 minutes if you left the default, or whatever you specified as its CRON expression).
You can check if this Cron Job works by either triggering it manually or waiting for its first build (or every run of the bot) and checking your Twitter bot's profile to see if it posted any tweets.
And there you have it! You just built a Twitter bot using Python.
In this tutorial, you learned how to build a Twitter bot in Python using Twitter's API via Tweepy. You learned how to set-up your Twitter Developer profile, create a new Project and App, and how to use their API to build a Twitter bot. You also learned how to host this bot to automate Tweeting.
Using the Twitter API, we can programmatically interact with Twitter's platform and automate the Twitter experience. Twitter bots are of great help to automate repetitive tasks such as posting tweets on a regular basis.
You can always check the complete code here.
Learn also: How to Make a Chat Application in Python
Happy coding ♥
Loved the article? You'll love our Code Converter even more! It's your secret weapon for effortless coding. Give it a whirl!
View Full Code Transform My Code
Got a coding query or need some guidance before you comment? Check out this Python Code Assistant for expert advice and handy tips. It's like having a coding tutor right in your fingertips!