"""Main script to toot a new post""" import time from os import getenv, remove from os.path import getsize import praw import wget from dotenv import load_dotenv from mastodon import Mastodon from redvid import Downloader # ----- load .env ----- # load_dotenv() # ----- initialization ----- # # initialize reddit reddit = praw.Reddit( client_id = getenv("REDDIT_CLIENT_ID"), client_secret = getenv("REDDIT_CLIENT_SECRET"), redirect_uri = "http://localhost:8080", # does not matter what is here user_agent = getenv("REDDIT_USER_AGENT") ) # initialize mastodon mastodon = Mastodon( access_token = getenv("MASTODON_USER_SECRET"), api_base_url = getenv("MASTODON_URL") ) # ----- main script ----- # # get recent posts to check for duplicates last_posts = mastodon.account_statuses(getenv("MASTODON_USER_ID"), limit=15) for submission in reddit.subreddit(str(getenv("REDDIT_SUBREDDIT"))).top(time_filter="day", limit=10): # skip post if it is a stickied post if (submission.stickied): continue # check if the post has been posted before already_posted = False for posted_submission in last_posts: if submission.permalink in posted_submission["content"]: already_posted = True break # abort download if the post has been posted already if already_posted: print("Skipping post: https://www.reddit.com" + submission.permalink) continue # check if text only if submission.is_self: status_text = submission.title + "\n\ngeposted von u/" + submission.author.name + "\n" + submission.permalink + "\n\n" + submission.selftext mastodon.status_post(status_text, visibility="unlisted") # check if reddit video elif "v.redd.it" in submission.url: filename = "video.mp4" # download video with highest possible resolution while not exceeding 10MB print("Downloading video post: https://www.reddit.com" + submission.permalink) downloader = Downloader(url="https://www.reddit.com"+submission.permalink, filename=filename, max_s=10_000_000, auto_max=True) return_val = downloader.download() print("\nUploading video") # check if video was downloaded successfully (digit return value if unsuccessful, otherwise string value containing the path to the video) if str(return_val).isdigit(): status_text = submission.title + "\n\nDas gepostete Video ist leider zu groß für diesen Server. Das Video bzw. der Post kann über den untenstehenden Link aufgerufen werden. " + "\n\ngeposted von u/" + submission.author.name + "\nhttps://www.reddit.com" + submission.permalink mastodon.status_post(status_text, visibility="unlisted") else: media = mastodon.media_post(filename) time.sleep(60.0) status_text = submission.title + "\n\ngeposted von u/" + submission.author.name + "\nhttps://www.reddit.com" + submission.permalink mastodon.status_post(status_text, media_ids=media["id"], visibility="unlisted") remove(filename) else: print("Downloading image post: https://www.reddit.com" + submission.permalink) filename = wget.download(submission.url, out="image." + submission.url.split(".")[-1]) print("\nUploading image") media = mastodon.media_post(filename) status_text = submission.title + "\n\ngeposted von u/" + submission.author.name + "\nhttps://www.reddit.com" + submission.permalink mastodon.status_post(status_text, media_ids=media["id"], visibility="unlisted") remove(filename) break