From 2710d025dbaf825b747e77645c4741c05b96fd0e Mon Sep 17 00:00:00 2001 From: horhik Date: Tue, 7 Sep 2021 11:44:47 +0300 Subject: [PATCH] add carousels and split code by files --- src/__pycache__/already_posted.cpython-39.pyc | Bin 0 -> 687 bytes src/__pycache__/converters.cpython-39.pyc | Bin 0 -> 937 bytes src/__pycache__/network.cpython-39.pyc | Bin 0 -> 2351 bytes src/already_posted.py | 10 +- src/converters.py | 13 +- src/main.py | 5 +- src/network.py | 114 +++++++++--------- 7 files changed, 76 insertions(+), 66 deletions(-) create mode 100644 src/__pycache__/already_posted.cpython-39.pyc create mode 100644 src/__pycache__/converters.cpython-39.pyc create mode 100644 src/__pycache__/network.cpython-39.pyc diff --git a/src/__pycache__/already_posted.cpython-39.pyc b/src/__pycache__/already_posted.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e75fed5489f1553bdb13be804290d6022c577f14 GIT binary patch literal 687 zcmZXS&2AGh5XWcyk!(W~f>a3!^#!&P4dns{gepLsP=yqvs<~8d>~>ddla=j4BW+IM z-V^uTBd_EuCtjf^##^YGb}awx8F^;xpRD@*9+2&9zfwOD;CFQH8Y5?)rrRdbps|1n zXr}oOn4lI~(#kZBA?^I36L2t%8UIbvCZYMBrprh?RJg*cPfJ#@8XKr7x4|X%ycS+o zRC&c3tUC=XMI|c!4eWMLlhID+P5So6gg_P|YE0Jh_ZR0G{c9t7-N%L{+{{PmZQ zX*Y;@X=XuKqjZq2EOH;ZnQ~c?p9JADwHM^c!W$PhGIOc(GvjKE9@v|K+Msj?h7I~}Pa)?XZ#bLWlTEf-<19*S_>CJA5<2e^d^4$(d# ze~p`7SM2KLl6kC|=eMi`vEoEiR$TL^&>*f6nhlB1y9ay(@llpjX&dj9 zc5LivyHR3iyAdV+jUd0<+?!O`M==yHZ~IZ&V-Y}0!47E`2ItCtJyz}?ftc?)B!HXr jSi42Ll;3oTk8T4u>GujHZ_elXqA+jiQ-W)GV3Pa=CLo7_ literal 0 HcmV?d00001 diff --git a/src/__pycache__/converters.cpython-39.pyc b/src/__pycache__/converters.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79b35a625687de0468bfa175125e7468de0faf90 GIT binary patch literal 937 zcmZuvOK%e~5cb&KBz=OQ>PsM{m5`cC%MA%t5s#)^svH^wA`)7ewUut!7q(NBYI91t za^MfN960coeC5J21HWHPDr0iE(81rveqN5`Z=OWi#fiVYvuSe5xsXo&yErm`Ha^i zz@U!y9L?;Yv!o;wC}9;VEs-%DkTJ7R(h2O4x9ekGvNKwel9#Z6-eY|9iLQ{Z0OZ5H zl3{h)JqOH%B6jtQ+DH}SD@L6i?O+plNpW9U~Q{!a899{#ns zh4?L_qpc{1)y>P<@tJe%O%pB~%6o&T5BsAC;K)4Wb@mUyya9 z8+q2(!^d9g9-5g&SE8g?0;NJQ>pGt0Qn?u!BOx&ghdQZI}zzS zDcW9~pJ?Rxfz_kX=HWouFcLZ+8kKBrCwU|i)5hQu?}D%@w5;Sng(j8?vHn=VkbGZ_ly)&JI42pz5UKMUELbs$l-5e)m5-XE2$$ zgN^`&b*NRHs=+)=gI>ecZmZ@RQJ&;lq@ucp_V1v&MD;`})Qw7BR(+*(n#*CL+P;Iv K-+F;I8ovR^z}N5q literal 0 HcmV?d00001 diff --git a/src/__pycache__/network.cpython-39.pyc b/src/__pycache__/network.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2f895d0678043e8f068eca261a82c736530fa51d GIT binary patch literal 2351 zcmaKtOK%)S5P+w9o;&;S#x^m52rUr=t%PhYC5oF=efXCJ6wF{GF;Wtclm;|41CwAMO{~DuwH??{n~9S;fs?v{tH-Ux zOItxJ^#gyV-wxW$X3n=p&|xm~pzg93^P%psHtRsW!047S>^_EFjiITmo4Mf1`XCzZ zDtk*FBz$v7RWC{ekJv$2lDB$-e~R*c#>qQro z@KG9#`ReNG?dlvT{PoLkr^Y#ZwHoMYKl}>aH={V=Y#{Rin=LSi_3U9s*@cKRDe%6^ zxx2ox@$nsDVWV|xeQW)8cx_`td4lg%yp*Lf!C=Z1(Z1?2KFS#nM|mcBCYAl+t@ZUy z<<8sYt@RsVb+Zx)&M%8REBWt+cmdY_Z)q(minUUV)-o>lbFsTx9HW%dQ*3@wj2 z&!OdRRu|wX|33KsCoub`#aUK|zP{huq~K#Pj-PTCN8vWmQLQvic_P zL&Io-j64}+V`FO7#tq}Mi&ML{juE0=(94# zhY?1WNe3kH28@o-Z{{ERB0|!6@J|qGa%?;_rY%OMe%%5be@xr8&*&9n>Pu3$Cv*(u z5uJ8wzczP?cqC0}K|cTj(^K)ebfi1+G#=2_kR92Y_!?ke0xVnw`)gbLDBE?Xc3{13 z-G$wjr#;!Jd!W&+joLf10Qy&1ANo3{`(*F*p5P!0$NkzxSJ~?~xcBB)yMEF!t1dQ}N$ zKMB&HJAd<<`CUC9o&hfI!E|&Hco*p9Qr?mT4axvqQz(pgHU-Z(lG( e=DnBZtV;M*^okPm;<7$(A5QC0Z_(>`i~j?17CDUo literal 0 HcmV?d00001 diff --git a/src/already_posted.py b/src/already_posted.py index 6118f7c..923fd71 100644 --- a/src/already_posted.py +++ b/src/already_posted.py @@ -1,14 +1,14 @@ - -def already_posted(id, id_filename): - with open(id_filename) as file: +import hashlib +def already_posted(id, path): + with open(path) 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: +def mark_as_posted(id, path): + with open(path, '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 index d16c4d2..65e4b59 100644 --- a/src/converters.py +++ b/src/converters.py @@ -1,3 +1,5 @@ +from colorama import Fore, Back, Style + def split_array(arr, size): count = len(arr) // size + 1 new_arr = [] @@ -6,12 +8,15 @@ def split_array(arr, size): return new_arr -def try_to_get_carousel(arr, post): +def try_to_get_carousel(array, post): try: urls = list(map(lambda arr: arr['node']['display_url'], vars(post)['_node']['edge_sidecar_to_children']['edges'])) return urls - print("Found carousel") + print(Fore.GREEN + "🎠 > Found carousel!") + print(Style.RESET_ALL) except: - print("No carousel") - return arr + print(Fore.RED + "🎠💥 > No carousel :( ") + print(Style.RESET_ALL) + return array + diff --git a/src/main.py b/src/main.py index 51eedbd..ec11a93 100644 --- a/src/main.py +++ b/src/main.py @@ -1,12 +1,13 @@ import os import sys import time -import hashlib import json from mastodon import Mastodon from colorama import Fore, Back, Style from instaloader import Profile, Instaloader, LatestStamps +from network import get_new_posts + id_filename = "/app/already_posted.txt" with open(id_filename, "a") as f: f.write("\n") @@ -36,5 +37,5 @@ mastodon = Mastodon( # api_base_url = 'https://pixelfed.tokyo/' ) 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) diff --git a/src/network.py b/src/network.py index 88a0251..8b8e6b0 100644 --- a/src/network.py +++ b/src/network.py @@ -1,61 +1,9 @@ from colorama import Fore, Back, Style import requests - +import time +from already_posted import already_posted, mark_as_posted 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 - - +import hashlib def get_image(url): try: @@ -74,3 +22,59 @@ def get_image(url): print(Fore.RED + "💥 > Failed to download image.") 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 + +