In this tutorial, we will learn how to post a tweet from Django application using Tweepy.
Sample Project
$ mkdir tweet-from-django && cd tweet-from-django
$ pipenv install django tweepy
$ pipenv shell
$ django-admin startproject config .
$ python manage.py startapp posts
INSTALLED_APPS = [
...
'posts.apps.PostsConfig',
...
]
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
def __str__(self):
return self.title
def get_absolute_url(self):
return f"/posts/{self.id}"
$ python manage.py makemigrations
$ python manage.py migrate
import tweepy as tweepy
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Post
@receiver(post_save, sender=Post)
def tweet_post(sender, instance, **kwargs):
twitter_auth_keys = {
"consumer_key": "API KEY HERE",
"consumer_secret": "API SECRET KEY",
"access_token": "ACCESS TOKEN HERE",
"access_token_secret": "ACCESS TOKEN SECRET KEY HERE"
}
auth = tweepy.OAuthHandler(
twitter_auth_keys['consumer_key'],
twitter_auth_keys['consumer_secret']
)
auth.set_access_token(
twitter_auth_keys['access_token'],
twitter_auth_keys['access_token_secret']
)
api = tweepy.API(auth)
tweet = instance.title + '\n' + Post.get_absolute_url(instance)
try:
api.update_status(tweet)
except tweepy.TweepError as error:
if error.api_code == 187:
print('duplicate message')
from django.apps import AppConfig
class PostsConfig(AppConfig):
name = 'posts'
def ready(self):
import posts.signals
$ python manage.py shell
>>> from posts.models import Post
>>> Post.objects.create(title='My First Post', content='My First Content')
If everything worked then you should check your twitter account with the new tweet from your application.Share this: