Python: How to programmatically post to Twitter (X)

Updated: January 2, 2024 By: Guest Contributor Post a comment

Introduction

Posting to Twitter (it was recently renamed to ‘X’ by Elon Musk) doesn’t always require manual input; you can automate the process using Python. Whether it’s tweeting regular updates, sharing data-driven insights, or connecting with an audience, automating Twitter interactions is simple with the right tools and code.

Setting Up

To start posting to Twitter programmatically, you will need to access the Twitter API. This requires:

  • Creating a Twitter developer account
  • Creating a Twitter app to obtain credentials
  • Storing API keys and Access Tokens securely

First, visit the Twitter Developer site and create an app. Upon creation, you will receive an API key, API secret key, Access Token, and Access Token Secret. Keep these credentials safe.

Installing Tweepy

Python’s Tweepy library simplifies interacting with the Twitter API. Install it using pip:

$ pip install tweepy

Basic Tweeting

Once Tweepy is installed, you’re ready to send tweets using Python. Here’s the simplest form to post a tweet:

import tweepy

consumer_key = 'YOUR_API_KEY'
consumer_secret = 'YOUR_API_SECRET_KEY'
access_token = 'YOUR_ACCESS_TOKEN'
access_token_secret = 'YOUR_ACCESS_TOKEN_SECRET'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth)

try:
    api.update_status('Hello, world!')
    print('Tweet successfully sent!')
except Exception as e:
    print('Error:', e)

Uploading Images & Handling Media

Posting images or videos involves uploading media before sending the tweet:

image_path = 'path/to/image.jpg'
status_text = 'Check out this image!'

try:
    media = api.media_upload(image_path)
    tweet = api.update_status(status=status_text, media_ids=[media.media_id_string])
    print('Media Tweet successfully sent!')
except Exception as e:
    print('Error:', e)

Advanced Posting Techniques

Automated posts can be more advanced, such as threading multiple tweets or scheduling:

Twitter Thread

thread_tweets = ['First tweet in the thread.', 'Second tweet in the thread.', 'More tweets...']

previous_status_id = None

for tweet in thread_tweets:
    result = api.update_status(status=tweet, in_reply_to_status_id=previous_status_id)
    previous_status_id = result.id
    print(f'Thread part posted: {tweet}')

Scheduled Tweets

However, scheduling tweets directly through Tweepy is not directly supported; you can pair it with a task scheduler such as schedule Python module:

import schedule
import time
import tweepy

# ... authentication setup ...

api = tweepy.API(auth)

def tweet_at_scheduled_time(tweet):
    api.update_status(tweet)

schedule.every().day.at('10:00').do(tweet_at_scheduled_time, tweet='Daily tweet!')

while True:
    schedule.run_pending()
    time.sleep(1)

Using the Twitter API Directly

If you need more control, you can also interact with Twitter’s REST API endpoints using Python’s requests library:

import requests
from requests_oauthlib import OAuth1

url = 'https://api.twitter.com/1.1/statuses/update.json'
payload = {'status': 'Tweeting using the REST API'}
auth = OAuth1(API_KEY, API_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

response = requests.post(url, auth=auth, data=payload)

if response.status_code == 200:
    print('Success!')
else:
    print('Error:', response.content)

Error Handling and Rate Limits

Attention to error handling and respecting rate limits ensures the longevity and reliability of your Twitter bot. Monitor Tweepy exceptions and adjust your code accordingly:

from tweepy import TweepError

try:
    api.update_status('Automated tweet')
except TweepError as e:
    print('An error occurred:', e)

Always familiarize yourself with Twitter’s Rate Limits to prevent being blocked from the API.

Conclusion

Automatically posting to Twitter with Python is a powerful tool for content creation, customer engagement, and data dissemination. By utilizing libraries like Tweepy or connecting directly with the Twitter API, the possibilities are vast and can save valuable time. However, remember to tweet responsibly – adhere to rate limits, and handle errors gracefully to maintain a positive presence on the platform.