diff --git a/src/already_posted.py b/src/already_posted.py new file mode 100644 index 0000000..6118f7c --- /dev/null +++ b/src/already_posted.py @@ -0,0 +1,14 @@ + +def already_posted(id, id_filename): + with open(id_filename) as file: + content = file.read().split("\n") + sha1 = hashlib.sha1(bytes(id, "utf-8")).hexdigest() + if sha1 in content: + return True + return False + +def mark_as_posted(id, id_filename): + with open(id_filename, 'a') as file: + sha1 = hashlib.sha1(bytes(id, "utf-8")).hexdigest() + file.write(sha1+'\n') + diff --git a/src/converters.py b/src/converters.py new file mode 100644 index 0000000..d16c4d2 --- /dev/null +++ b/src/converters.py @@ -0,0 +1,17 @@ +def split_array(arr, size): + count = len(arr) // size + 1 + new_arr = [] + for i in range(count): + new_arr.append(arr[i*size:(i+1)*size]) + return new_arr + + +def try_to_get_carousel(arr, post): + try: + urls = list(map(lambda arr: arr['node']['display_url'], vars(post)['_node']['edge_sidecar_to_children']['edges'])) + return urls + print("Found carousel") + except: + print("No carousel") + return arr + diff --git a/src/network.py b/src/network.py new file mode 100644 index 0000000..88a0251 --- /dev/null +++ b/src/network.py @@ -0,0 +1,76 @@ +from colorama import Fore, Back, Style +import requests + +from converters import split_array, try_to_get_carousel + +def upload_image_to_mastodon(url, mastodon): + try: + print(Fore.YELLOW + "🐘 > Uploading Image...") + print(Style.RESET_ALL) + media = mastodon.media_post(media_file = get_image(url), mime_type = "image/jpeg") # sending image to mastodon + print(Fore.GREEN + "✨ > Uploaded!") + print(Style.RESET_ALL) + except: + print(Fore.RED + "💥 > failed to upload image to mastodon") + print(Style.RESET_ALL) + return media["id"] + +def toot(urls, title ): + try: + print(Fore.YELLOW + "🐘 > Creating Toot...", title) + print(Style.RESET_ALL) + ids = [] + for url in urls: + ids.append(upload_image_to_mastodon(url)) + post_text = str(title) + "\n" + "crosposted from https://instagram.com/"+fetched_user # creating post text + print(ids) + mastodon.status_post(post_text, media_ids = ids) + + except: + print(Fore.RED + "😿 > Failed to create toot") + print(Style.RESET_ALL) + +def get_new_posts(mastodon, profile, mastodon_carousel_size, ): + posts = profile.get_posts() + stupidcounter = 0 + for post in posts: + stupidcounter += 1 + url_arr = try_to_get_carousel([post.url], post), mastodon_carousel_size + + if stupidcounter <= post_limit: + if already_posted(str(post.mediaid), id_filename): + print(Fore.YELLOW + "🐘 > Already Posted ", post.url) + print(Style.RESET_ALL) + continue + print("Posting... ", post.url) + if using_mastodon: + urls_arr = split_array(url_arr) + for urls in urls_arr: + toot(urls, post.caption) + else: + toot(url_arr, post.caption) + + mark_as_posted(str(post.mediaid), id_filename) + time.sleep(post_interval) + else: + return + + + +def get_image(url): + try: + print(Fore.YELLOW + "🚀 > Downloading Image...", url) + print(Style.RESET_ALL) + + response = requests.get(url) + response.raw.decode_content = True + + print(Fore.GREEN + "✨ > Downloaded!") + print(Style.RESET_ALL) + + return response.content + except: + + print(Fore.RED + "💥 > Failed to download image.") + print(Style.RESET_ALL) +