SaralGyaan, Saral Gyaan, Saral Gyan is website which provides free tutorials of Python for absolute beginners in English and Hindi, Learn Python in Hindi, Learn Python for absolute beginners, Learn Python, bootstrap, django, git

Hari S
Author: Hari S


Create a twitter bot using python and tweepy

  • April 3, 2019, 4:16 p.m.
  • 6 minutes read
  • 0 Comment
  • 176 Views
Create a twitter bot using python and tweepy

If you are new to python and looking for some fun python project, a twitter bot is a must try. So in this tutorial we will create a twitter bot using python and tweepy.

What is a Twitter Bot

A twitter bot is a program which automatically does the following using the twitter api

  • Sends a twitter update.
  • Retweet some tweets.
  • Favorite/like some tweets.
  • Follow/followback people on twitter and many more.

A twitter bot can be as simple as one sending a tweet at random interval or as complex as one which uses AI and Machine learning for interacting with people.

What Twitter Bot will we be creating?

We will be creating a bot which will work as:-

  1. If a user mentions you in a tweet and sends a picture (with atleast one person) to you.
  2. Our bot will remove the background of the image.
  3. And send back the image without the background to the original user.

What will we need?

  1. A twitter account
  2. Tweepy api module
  3. requests module
  4. An account on remove.bg and it’s api
  5. Pillow (Python Image Library)

Setting up your twitter account/tweepy api

I hope that all of you already have a twitter account. If not, click here to create one. Once you are done creating the account open developer’s page and click on ‘Apps’ —> ‘Create an app’

Create a Twitter Bot using Python and tweepy -1.png

Create a Twitter Bot using Python and Tweepy - 2.png

In the next screen fill the following:-

  1. App name : bg_remove_demo (You can use any)
  2. Application Description: Write the one which we have written above.
  3. Website URL : https://placeholder.com will do.
  4. Tell us how this app will be used : Write down the description again

and hit ‘Create’. Hit ‘Create’ again and then click on Keys and tokens.

Create a Twitter Bot using Python and tweepy -3.png

Create a Twitter Bot using Python and tweepy -4.png

In the next screen you will get the Consumer API Keys i.e. API Key and API Secret Key. Now, create Access token and Access token secret. In permission tab check that ‘Access Permission’ is for “read and write”

Create a Twitter Bot using Python and tweepy -5.png

Let’s get into the coding part:-

$ cd desktop
$ mkdir remove_bg_demo && cd remove_bg_demo

Now create and activate the virtual environment using the following command:-

$ virtualenv . 
$ source bin/activate

Install the necessary modules

$ pip install tweepy
$ pip install python-decouple

Now, we will be saving our credentials in a ‘.env’ file and using python-decouple to access that in our code. So create a new file

$ nano .env

And in the .env file add your credentials

CONSUMER_KEY=YOURKEYGOESHERE
CONSUMER_SECRET=YOURSECRETGOESHERE
ACCESS_TOKEN=YOURACCESSTOKENGOESHERE
ACCESS_SECRET=ACCESSSECRETGOESHERE

You don’t need to add quotes or space.

Create a python file ‘bot.py’ and start coding

import tweepy
from decouple import config

All the requests will use Oauth for authentication. And after authentication we will construct an API instance

# authentication

auth = tweepy.OAuthHandler(config("CONSUMER_KEY"), config("CONSUMER_SECRET"))
auth.set_access_token(config("ACCESS_TOKEN"), config("ACCESS_SECRET"))

# API instance

api = tweepy.API(auth)

You can check the functionality by sending a test tweet

api.update_status("This is a test tweet using tweepy.")

Setting up remove.bg API

If everything goes well, we can jump to the next step. Head to remove.bg, sign up and sign in. Then click on API and scroll to down. Click on ‘Show’, copy the API key and paste it into .env file.

BG_API_KEY=YOURAPIKEY

Create a Twitter Bot using Python and tweepy -6.png

You must note that, the free account only provides 50 API calls per month. So use them wisely.

Finalizing the Bot

First of all, we will be creating a stream listener, which is a class inheriting tweepy.StreamListener class and we will be overriding it’s inbuilt on_status function and modifying it in such a way that it will fetch the screen name and id of the tweet. Then, Each tweet on a twitter has certain entities which hold URLs, media, hashtag etc. So, we will check whether the tweet sent contains any media i.e. image

class MyStreamListener(tweepy.StreamListener):

    def on_status(self, status):
        username = status.user.screen_name
        status_id = status.id

        if ‘media’ in status.entities:
            for image in status.entities['media']:
                tweet_image(image['media_url'], username, status_id)

Now, we create a stream and start it

my_stream_listener = MyStreamListener()
stream = tweepy.Stream(auth, my_stream_listener)
stream.filter(track=['@saral_gyaan'])

I will quickly go through the code above. So, when we will run our python script, it will start a Stream Listener which will look for tweets which contain ‘@saral_gyaan’ in it (this we have set up in the filter). Then comes on_status method, if there is any tweet mentioning saral_gyaan, it will grab the screen name of the user and the status id. Then it will check whether, that status/tweet has any media, and if it has a media, it will run a function called ‘tweet_image()’. No we will create the ‘tweet_image()’function

import requests
from io import BytesIO
from PIL import Image

def tweet_image(url, username, status_id):
    filename = 'temp.png'
    response = requests.get(url, stream=True)
    if response.status_code == 200:
        i = Image.open(BytesIO(request.content))
        i.save(filename)
        remove_bg(filename)
        api.update_with_media('no-bg.png', status=f'@{username}, Here is the picture without the background', in_reply_to_status_id=status_id)
    else:
        print("unable to download image")

It will check for the response from the stream, and if there is a response, it will open the image, save it as ‘temp.png’ and then run the function remove_bg() on it and finally update the twitter status mentioning the original user and containing the image without the background.

Finally, we will create the remove_bg() function, which will take the image attribute

def remove_bg(filename):
    response = requests.post(
    'https://api.remove.bg/v1.0/removebg',
    files={'image_file': open(filename, 'rb')},
    data={'size': 'auto'},
    headers={'X-Api-Key': config('BG_API_KEY')},)
    if response.status_code == requests.codes.ok:
        with open('no-bg.png', 'wb') as out:
            out.write(response.content)
    else:
        print("Error:", response.status_code, response.text)

This is a code which has been provided at remove.bg, it looks for the response, and if the reponse is “OK”, it removes the background and create “no-bg.png”, the same is tweeted out by tweet_image() function.

Now, run the script on your local machine and try it by tweeting the image.

$ python bot.py

And Voila, your bot is ready and running!

Check this tweet to see how it worked in the past.

Check out the complete code here




Related Posts

Convert JSON to CSV using Python
By Hari S | 6 months ago
Make Python delete your unwanted emails periodically.
By Hari S | 7 months, 2 weeks ago

Comments


Be the first one to comment!