Lets make an quote-of-the-day instagram bot!

Lets get started

? Demo

https://www.instagram.com/dailydouseofquotes/

Make a files:
main.py

Starting the code

? Importing the libaries

import urllib.request
import os
from PIL import Image, ImageDraw, Im…


This content originally appeared on DEV Community and was authored by Ryan The Ghost

Lets get started

? Demo

https://www.instagram.com/dailydouseofquotes/
alt text

Make a files:
main.py

Starting the code

? Importing the libaries


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

? Getting an image and saving it

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

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!

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!

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!

    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

    (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

    (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

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


This content originally appeared on DEV Community and was authored by Ryan The Ghost


Print Share Comment Cite Upload Translate Updates
APA

Ryan The Ghost | Sciencx (2021-06-23T11:34:35+00:00) Lets make an quote-of-the-day instagram bot!. Retrieved from https://www.scien.cx/2021/06/23/lets-make-an-quote-of-the-day-instagram-bot/

MLA
" » Lets make an quote-of-the-day instagram bot!." Ryan The Ghost | Sciencx - Wednesday June 23, 2021, https://www.scien.cx/2021/06/23/lets-make-an-quote-of-the-day-instagram-bot/
HARVARD
Ryan The Ghost | Sciencx Wednesday June 23, 2021 » Lets make an quote-of-the-day instagram bot!., viewed ,<https://www.scien.cx/2021/06/23/lets-make-an-quote-of-the-day-instagram-bot/>
VANCOUVER
Ryan The Ghost | Sciencx - » Lets make an quote-of-the-day instagram bot!. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2021/06/23/lets-make-an-quote-of-the-day-instagram-bot/
CHICAGO
" » Lets make an quote-of-the-day instagram bot!." Ryan The Ghost | Sciencx - Accessed . https://www.scien.cx/2021/06/23/lets-make-an-quote-of-the-day-instagram-bot/
IEEE
" » Lets make an quote-of-the-day instagram bot!." Ryan The Ghost | Sciencx [Online]. Available: https://www.scien.cx/2021/06/23/lets-make-an-quote-of-the-day-instagram-bot/. [Accessed: ]
rf:citation
» Lets make an quote-of-the-day instagram bot! | Ryan The Ghost | Sciencx | https://www.scien.cx/2021/06/23/lets-make-an-quote-of-the-day-instagram-bot/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.