Another python bot for tumblr  tumbload3r tumblr upload bot

import os
import json
import time
import base64
from requests_oauthlib import OAuth1Session

class Tumbload3r:
    def __init__(self, key, secret, blog):
        self.key = key
        self.secret = secret
        self.blog = blog
        
        self.request_token_url = 'http://www.tumblr.com/oauth/request_token'
        self.authorization_base_url = 'http://www.tumblr.com/oauth/authorize'
        self.access_token_url = 'http://www.tumblr.com/oauth/access_token'
        self.callback_uri = 'http://www.tumblr.com/dashboard'
        self.details = 'details.txt'

        currentDir = os.path.dirname(__file__)
        self.images_folder = os.path.join(currentDir, 'images')

        self.tumblr = self.auth()

    def auth(self):
        tumblr = OAuth1Session(self.key, client_secret=self.secret,
                               callback_uri=self.callback_uri)
        tumblr.fetch_request_token(self.request_token_url)
        authorization_url = tumblr.authorization_url(self.authorization_base_url)
        print('Go to this link and authorize: ', authorization_url)
        redirect_response = input('Paste the full redirect URL here: ')
        tumblr.parse_authorization_response(redirect_response)
        tumblr.fetch_access_token(self.access_token_url)
        return tumblr

    def postPicture(self, image, caption=None, link=None, state='published', tags=None):
        endpoint = 'http://api.tumblr.com/v2/blog/{}/post'.format(blog)
        imageBase64 = self.imageToBase64(image)
        payload = {'type':'photo',
                   'state':state,
                   'data64':imageBase64,
                   'caption':caption,
                   'link':link,
                   'tags':tags}
        response = self.tumblr.post(endpoint, data=payload)
        return response

    def imageToBase64(self, imagePath):
        with open(imagePath, 'rb') as image_file:
            imageBase64 = base64.b64encode(image_file.read())
        return imageBase64

    def autoMode(self, delay=1):
        print('-->Starting automatic upload.')
        images = os.listdir(self.images_folder)
        with open(self.details) as details_file:
            detailsDict = json.load(details_file)
        for image in images:
            print('-->Start uploading {}.'.format(image))
            imagePath = os.path.join(self.images_folder, image)
            self.postPicture(imagePath, caption=detailsDict['caption'],
                             link=detailsDict['link'],
                             state=detailsDict['state'],
                             tags=detailsDict['tags'])
            print('-->Uploaded {}.'.format(image))
            time.sleep(delay)
        print('-->All Images uploaded.')

    def manualMode(self):
        print('-->Starting manual upload.')
        images = os.listdir(self.images_folder)
        for image in images:
            imagePath = os.path.join(self.images_folder, image)
            print('Input details for image {}.'.format(image))
            input_caption = input('-->Caption: ')
            input_link = input('-->link: ')
            input_state = input('-->state: ')
            input_tags = input('-->tags: ')
            print('-->Start uploading {}.'.format(image))
            self.postPicture(imagePath, caption=input_caption,
                             link=input_link,
                             state=input_state,
                             tags=input_tags)
            print('-->Uploaded {}.'.format(image))
        print('-->All Images uploaded.')
            

if __name__ == '__main__':
    with open('auth.txt') as auth_file:
        authDict = json.load(auth_file)
        
    key = authDict['key']
    secret = authDict['secret']
    blog = authDict['blog']
    
    print('Tumbload3r v0.1 made by daveter9@TBN')
    print('Please do not exceed the request limit of 1000/hour and 5000/day')
    tumbload3r = Tumbload3r(key, secret, blog)
    while True:
        input_response = input('->What do you want to do?(auto/manual/quit)')
        if input_response == 'auto':
            delay = input('What should the delay be between requests in seconds(1 is recommended): ')
            try:
                int(delay)
            except:
                delay = 1
            tumbload3r.autoMode(int(delay))
        elif input_response == 'manual':
            tumbload3r.manualMode()
        elif input_response == 'quit':
            break
        else:
            print('->That is not a valid command.')
            pass