Lets make an quote-of-the-day instagram bot!
Tags: python, pythonbot, automation, bot
Published: 2021-06-23 11:34:35

# Lets get started

# 🎉 Demo
https://www.instagram.com/dailydouseofquotes/
![alt text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/psuqu81mepelkebjpylr.png)
 


Make a files: 
`main.py`

## Starting the code

### 🧪 Importing the libaries

```zsh

import urllib.request
import os
from PIL import Image, ImageDraw, ImageFont, ImageOps
import requests
from instabot import Bot
```

### 📷 Getting an image and saving it

```python
def dl_image():
    image_url = "https://source.unsplash.com/user/eberhardgross/1080x1080/"
    urllib.request.urlretrieve(image_url, "image.jpg")
    print("Installing image")
```
> The following code will get an 1080x1080 image by the author eberhardgross from unsplash, **Why him ?** I haven't seen anything 18+ from this user and have seen amazing images only!

### 🙌 Getting the daily quote
```python
def dailyquote():
    response = requests.get('https://quotes.rest/qod.json?language=en')
    response_output = response.json()
    return response_output
```
> This code will get a **json daily quote of the day** response from quotes.rest, as you can see we will output certain results that we from FROM the dailyquote function **later**!

### 😎 Putting the quote and image in one!!

#### 🐱‍🚀 Fixing the line order
> We will be doing this so we can get a good word-per-line system, so we see the whole text!

```python
def wrap_by_word(s, n):
    a = s.split()
    ret = ''
    for i in range(0, len(a), n):
        ret += ' '.join(a[i:i+n]) + '\n'
    return ret
```

#### 🎨 Lets do it all!
```python
def text_overlay_ig(quote, author):

    quote = wrap_by_word(quote, 6)

    image_file = os.path.join(os.path.dirname(
        os.path.realpath(__file__)), 'image.jpg')
    im = Image.open(image_file)
```
> Fixing the quote line order and then opening our image file

Time to put on everything!
```python
    draw = ImageDraw.Draw(im)
    font = ImageFont.truetype('font.ttf', size=60)
    (x, y) = (125, 300)
    shadowColor = (0, 0, 0)
    thickness = 4
    draw.text((x - thickness, y - thickness), quote,
              font=font, fill=shadowColor, thick=thickness)
    draw.text((x + thickness, y - thickness), quote,
              font=font, fill=shadowColor, thick=thickness)
    draw.text((x - thickness, y + thickness), quote,
              font=font, fill=shadowColor, thick=thickness)
    draw.text((x + thickness, y + thickness), quote,
              font=font, fill=shadowColor, thick=thickness)
    draw.text((x, y), quote, spacing=4, fill=(
        255, 255, 255), font=font)

    (x, y) = (125, 700)
    author = "— " + author
    draw.text((x - thickness, y - thickness), author,
              font=font, fill=shadowColor, thick=thickness)
    draw.text((x + thickness, y - thickness), author,
              font=font, fill=shadowColor, thick=thickness)
    draw.text((x - thickness, y + thickness), author,
              font=font, fill=shadowColor, thick=thickness)
    draw.text((x + thickness, y + thickness), author,
              font=font, fill=shadowColor, thick=thickness)
    draw.text((x, y), author, spacing=4, fill=(
        255, 255, 255), font=font)

    im.save("image.jpg")
```
##### 🌁 Adding a font.tff file!
i'd recommend using https://github.com/9ebd7134/Python-quote-of-the-day-instagram-bot/blob/master/font.ttf just click on download and put it in your folder ! The font is easy to read so its perfect

And now lets put on the quote on the image

```python
    (x, y) = (125, 300)
    shadowColor = (0, 0, 0)
    thickness = 4
    draw.text((x - thickness, y - thickness), quote,
              font=font, fill=shadowColor, thick=thickness)
    draw.text((x + thickness, y - thickness), quote,
              font=font, fill=shadowColor, thick=thickness)
    draw.text((x - thickness, y + thickness), quote,
              font=font, fill=shadowColor, thick=thickness)
    draw.text((x + thickness, y + thickness), quote,
              font=font, fill=shadowColor, thick=thickness)
    draw.text((x, y), quote, spacing=4, fill=(
        255, 255, 255), font=font)
``` 
The x, y are the position of the text we want to put, change this but be careful this **won't change based on the text length**! We could do that but lets stick with this for now

Everything else is us just putting the text alongside the text shadow on the image.
> *Time to put the author*
```python
    (x, y) = (125, 700)
    author = "— " + author
    draw.text((x - thickness, y - thickness), author,
              font=font, fill=shadowColor, thick=thickness)
    draw.text((x + thickness, y - thickness), author,
              font=font, fill=shadowColor, thick=thickness)
    draw.text((x - thickness, y + thickness), author,
              font=font, fill=shadowColor, thick=thickness)
    draw.text((x + thickness, y + thickness), author,
              font=font, fill=shadowColor, thick=thickness)
    draw.text((x, y), author, spacing=4, fill=(
        255, 255, 255), font=font)
``` Same thing but we are changing the x, y positions **AND** also adding — to the author username

## 😎🙌 Final steps
```python
quote = dailyquote()['contents']['quotes'][0]['quote']
author = dailyquote()['contents']['quotes'][0]['author']
tags = dailyquote()['contents']['quotes'][0]['tags']

dl_image()
text_overlay_ig(quote, author)

ptag = ''

for tag in tags:
    ptag += "#" + tag + ' '


content = "This bot was made by ryan s.(@9ebd7134 on github), Hope you enjoyed this quote, This quote was by"+author+"\nLinks:\n📷Image by: https://unsplash.com/user/eberhardgross\nTags:\n#️⃣ " + ptag;

bot = Bot()
bot.login(username="****", password="password1234")
bot.upload_photo("image.jpg", caption=content)
``` Simply change the caption/content and then bot.login username/password details for this to fully work!

# 🆘 Fixing up some issues
> I'll be updating this and updating the github page for it, i will make an issue and a pull request talking all about the changes! If you want to fix my code i'd love to see it!

# Link for the github:
https://github.com/9ebd7134/Python-quote-of-the-day-instagram-bot