add carousels and split code by files

This commit is contained in:
horhik 2021-09-07 11:44:47 +03:00
parent 34f1b3f5bd
commit 2710d025db
7 changed files with 76 additions and 66 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,14 +1,14 @@
import hashlib
def already_posted(id, id_filename): def already_posted(id, path):
with open(id_filename) as file: with open(path) as file:
content = file.read().split("\n") content = file.read().split("\n")
sha1 = hashlib.sha1(bytes(id, "utf-8")).hexdigest() sha1 = hashlib.sha1(bytes(id, "utf-8")).hexdigest()
if sha1 in content: if sha1 in content:
return True return True
return False return False
def mark_as_posted(id, id_filename): def mark_as_posted(id, path):
with open(id_filename, 'a') as file: with open(path, 'a') as file:
sha1 = hashlib.sha1(bytes(id, "utf-8")).hexdigest() sha1 = hashlib.sha1(bytes(id, "utf-8")).hexdigest()
file.write(sha1+'\n') file.write(sha1+'\n')

View File

@ -1,3 +1,5 @@
from colorama import Fore, Back, Style
def split_array(arr, size): def split_array(arr, size):
count = len(arr) // size + 1 count = len(arr) // size + 1
new_arr = [] new_arr = []
@ -6,12 +8,15 @@ def split_array(arr, size):
return new_arr return new_arr
def try_to_get_carousel(arr, post): def try_to_get_carousel(array, post):
try: try:
urls = list(map(lambda arr: arr['node']['display_url'], vars(post)['_node']['edge_sidecar_to_children']['edges'])) urls = list(map(lambda arr: arr['node']['display_url'], vars(post)['_node']['edge_sidecar_to_children']['edges']))
return urls return urls
print("Found carousel") print(Fore.GREEN + "🎠 > Found carousel!")
print(Style.RESET_ALL)
except: except:
print("No carousel") print(Fore.RED + "🎠💥 > No carousel :( ")
return arr print(Style.RESET_ALL)
return array

View File

@ -1,12 +1,13 @@
import os import os
import sys import sys
import time import time
import hashlib
import json import json
from mastodon import Mastodon from mastodon import Mastodon
from colorama import Fore, Back, Style from colorama import Fore, Back, Style
from instaloader import Profile, Instaloader, LatestStamps from instaloader import Profile, Instaloader, LatestStamps
from network import get_new_posts
id_filename = "/app/already_posted.txt" id_filename = "/app/already_posted.txt"
with open(id_filename, "a") as f: with open(id_filename, "a") as f:
f.write("\n") f.write("\n")
@ -36,5 +37,5 @@ mastodon = Mastodon(
# api_base_url = 'https://pixelfed.tokyo/' # api_base_url = 'https://pixelfed.tokyo/'
) )
while True: while True:
get_new_posts(mastodon, profile) get_new_posts(mastodon, profile, mastodon_carousel_size, post_limit, id_filename, using_mastodon, mastodon_carousel_size, post_interval, fetched_user)
time.sleep(time_interval_sec) time.sleep(time_interval_sec)

View File

@ -1,61 +1,9 @@
from colorama import Fore, Back, Style from colorama import Fore, Back, Style
import requests import requests
import time
from already_posted import already_posted, mark_as_posted
from converters import split_array, try_to_get_carousel from converters import split_array, try_to_get_carousel
import hashlib
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): def get_image(url):
try: try:
@ -74,3 +22,59 @@ def get_image(url):
print(Fore.RED + "💥 > Failed to download image.") print(Fore.RED + "💥 > Failed to download image.")
print(Style.RESET_ALL) print(Style.RESET_ALL)
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)
return media["id"]
except:
print(Fore.RED + "💥 > failed to upload image to mastodon")
print(Style.RESET_ALL)
def toot(urls, title, mastodon, fetched_user ):
#try:
print(Fore.YELLOW + "🐘 > Creating Toot...", title)
print(Style.RESET_ALL)
ids = []
for url in urls:
ids.append(upload_image_to_mastodon(url, mastodon))
print(url)
post_text = str(title) + "\n" + "crosposted from https://instagram.com/"+fetched_user # creating post text
post_text = post_text[0:1000]
print(ids)
mastodon.status_post(post_text, media_ids = ids)
#except:
# print(urls)
# print(Fore.RED + "😿 > Failed to create toot")
# print(Style.RESET_ALL)
def get_new_posts(mastodon, profile, mastodon_carousel_size, post_limit, already_posted_path, using_mastodon, carousel_size, post_interval, fetched_user):
posts = profile.get_posts()
stupidcounter = 0
for post in posts:
stupidcounter += 1
url_arr = try_to_get_carousel([post.url], post)
if stupidcounter <= post_limit:
if already_posted(str(post.mediaid), already_posted_path):
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, carousel_size)
for urls in urls_arr:
toot(urls, post.caption, mastodon, fetched_user)
else:
toot(url_arr, post.caption, mastodon, fetched_user)
mark_as_posted(str(post.mediaid), already_posted_path)
time.sleep(post_interval)
else:
return