A Twitter Bot that tweets jokes from the icanhazdadjoke
The purpose of this program was to automate the jokes I have been posting on my facebook account thru twitter. Although I haven't figured out AWS Lambda yet, I believe I'll get there in no time.
This program is run thru IDLE, which, according to Wikipedia, is bundled with the Mac OS X Python since 1.5.2b1.
We start learning with "Getting started with the Twitter API", then we progress to calling the icanhazdadjoke api throughout the article.
In this program, I learned 4 things:
-
How to apply & create the Twitter API keys used in this application
-
How to use Twython to send tweets using Python
-
How to call an API &
-
How to search for the right questions on a search engine to get the right answer
First, we apply for a Twitter Developer account with the help of this. Upon completing the application, we will receive an email confirmation from Twitter to confirm our email address. Then we wait for our application to be approved. We can check the status at developer.twitter.com.
After getting approved for the developer account, we login to developer.twitter.com to get our application registered to get our API Keys.
Click on keys and tokens to view your keys and access tokens then click create under Access token & access token secret.
consumer_key = 'ENTER_YOUR_CONSUMER_KEY' consumer_secret = 'ENTER_YOUR_CONSUMER_SECRET' access_token = 'ENTER_YOUR_ACCESS_TOKEN' access_token_secret = 'ENTER_YOUR_ACCESS_TOKEN'
from twython import Twython import requests
from auth import ( consumer_key, consumer_secret, access_token, access_token_secret )
save this as twitter.py
twitter = Twython( consumer_key, consumer_secret, access_token, access_token_secret )
message = "Hello world!" twitter.update_status(status=message) print('Tweeted: ' % message)
Fortunately, icanhazdadjoke can be called without an authentication by the GET method. Read through their docs here if you want to learn more
url = 'https://icanhazdadjoke.com/' headers = {'Accept': 'application/json'} joke_msg = requests.get(url, headers=headers).json().get('joke') print(joke_msg)
We want the output of the icanhazdadjoke tweeted on our twitter account so we use the url variable to call their API. I start with the output, going back to calling the API.
We end up with this code :
url = 'https://icanhazdadjoke.com/' headers = {'Accept': 'application/json'} joke_msg = requests.get(url, headers=headers).json().get('joke') twitter.update_status(status=joke_msg) print("Tweeted: " + joke_msg)
The output is : 😱😱😱
🙌😱🙌😱🙌
Next step here would be to figure out AWS Lambda to automate the tweets twice a day and forget about it.