From ab362d5caf39034a5cb4819177c05da2e4d18c85 Mon Sep 17 00:00:00 2001 From: Lasse Date: Thu, 18 Mar 2021 15:06:05 +0100 Subject: [PATCH] Fixed "single" and other things --- Dockerfile | 8 ++--- facebook/.dockerignore | 9 +++++ facebook/__main__.py | 21 ++++++----- facebook/__pycache__/classes.cpython-37.pyc | Bin 6719 -> 6719 bytes facebook/__pycache__/scrapers.cpython-37.pyc | Bin 4912 -> 5005 bytes facebook/classes.py | 1 + facebook/helpers.py | 5 +-- facebook/scrapers.py | 35 +++++++++++++------ 8 files changed, 52 insertions(+), 27 deletions(-) create mode 100644 facebook/.dockerignore diff --git a/Dockerfile b/Dockerfile index 5ba3576..ff8af73 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,15 @@ FROM python:3.8 -WORKDIR / +WORKDIR /facebook COPY requirements.txt . RUN pip install -r requirements.txt -ADD data /data +ADD . . -COPY main.py . - -ENTRYPOINT [ "python", "./main.py" ] +ENTRYPOINT [ "python", "__main__.py" ] CMD ["",""] diff --git a/facebook/.dockerignore b/facebook/.dockerignore new file mode 100644 index 0000000..4fdba99 --- /dev/null +++ b/facebook/.dockerignore @@ -0,0 +1,9 @@ +/.DS_Store +/.venv +/.vscode +/__pycache__ +*.json +*.pkl +/facebook/test.py +/data/* +*.html \ No newline at end of file diff --git a/facebook/__main__.py b/facebook/__main__.py index f4be3b4..732b2c9 100644 --- a/facebook/__main__.py +++ b/facebook/__main__.py @@ -27,7 +27,6 @@ if __name__ == "__main__": argv = argv[1:] try: opts, args = getopt(argv, "su:o:", ["single", "users=", "other="]) - single = True if "-s" in [o[0] for o in opts] else False for o, a in opts: if o in ["-u", "--user"]: users = [ @@ -36,6 +35,10 @@ if __name__ == "__main__": ] if o in ["-o", "--other"]: url_other_picture = a + if o in ["-s", "--single"]: + single = True + else: + single = False if "users" not in globals(): users = [ @@ -48,11 +51,11 @@ if __name__ == "__main__": User(str(i).strip()) for i in input("Vem/vilka vill du kolla bilder för? ").split(",") ] - single = ( - True - if input("Söka bara en bild (single)?").lower() in ["ja, yes, j, y"] - else False - ) + + if input("Söka bara en bild (single)? ") in ["ja, yes, j, y"]: + single = True + else: + single = False if "url_other_picture" in globals(): users[0].url_other_picture = url_other_picture[url_other_picture.find('facebook.com') + 12:] @@ -93,7 +96,7 @@ if __name__ == "__main__": if user.username not in members_checked:# Hämta reaktioner för den första användaren LÄGG TILL NOT IN MEMBERS_CHECKED try: - profile_picture_reactions(profile, user, all_pictures, first=True, single=single) + profile_picture_reactions(profile, user, all_pictures, first_user=True, single=single) except: print(traceback.format_exc()) if len(users) == 1: @@ -111,7 +114,7 @@ if __name__ == "__main__": print(friend) print() - # Hämta reaktioner för den första användarens vänner (som reagerat) + # Hämta reaktioner för users vänner (som reagerat) count_friends = 0 for friend in friends_unchecked: count_friends += 1 @@ -119,7 +122,7 @@ if __name__ == "__main__": sleep_(2) try: profile_picture_reactions( - profile, user, members_checked, all_pictures + profile, user, all_pictures, single=single ) if profile.blocked == True: # Ta bort profilen ur databasen diff --git a/facebook/__pycache__/classes.cpython-37.pyc b/facebook/__pycache__/classes.cpython-37.pyc index a660a925974211e3ceea2fb606bffce1c6db1dfd..4dad39885e4a520ee2e0f20c4f49ebda63f70ee6 100644 GIT binary patch delta 19 ZcmdmQvfqTuiI1Z)5R delta 19 ZcmdmQvfqTuiI7%Q6vyYye%os&cG5VG?Tr&R35`RcO^QlIfQAUdhd2k^99#pka6mJ&M zL}LoF;AUylK_GG3MdHATqEtOV?;MLzIaJC8Ar)~!6^IK0iML)ik$1GSGxLA5@4flG zxjx&SORuC-2}aMY^XqT?`_OLsSH56<``3qX^~#@u1&NR~MlgdGX1jcqUEFUQI3kQj zvZ?#vUiY{#a5T?yOhCPWN8%Z2+*RXo+uWY_ia`m-gelCx!CVM9o@2;9=6M$KU=s5o z(C%`LZDfH(4JT-Rwfs8U;O7|@`tG>v47i)Z;(>B{K$*tUf%3|LQbFe+_-g~oQ6E~@ zYLrGW6H*A?>Lvcr94i+N*Mj?Y3sgW*(H0WxgNq1sd^)0@%w60|K;Dek$AwO;%M zq2NT5lm4UpTB#l@;0(@oHOh{yvyB^qHH^TdorMs9U1Du3_7FJoKjo202j@fRoe-(M z(mEN1*7vBmJMu;KwX=8n9u)VEu#jOjvTs|yc4bXitIXFfKG{x+q~OFuaqmZdJsTH< z6)cD(QK-t>>Zzw3e3Zr~9uVn(uac-a0Nb#`=ZNYOI&RiWuruS(U2HuAl0y zJ#)C$9;S?zROUU_O!$VY#IMq zph5p&-s41`kqr~XLf$s>Dbt-6N5p9TjBmE4<=^I9>I-0P9oSBpBCpD0*28?WCO56T zY*`h>a>wQ8)-vqx{cLpso|SJVSL9d8kL=%pF8+?Ta`{~>%ais$S=G(ZiaQ*2BT-k} zTS|36-b$A=*P(^IyXgy%OuTd1-SX=1ZN2TvGsE}c16j?yG@_4#4QXm7aF_=jY%V{^ zyqvRn8WN!LqdY<1GKobJb@@wXZJOIW%Q-lZ=A$qM!!W@Uipg~-Dk}ZQ230tSdCSl!4ETDzO0bgP3H$wv_ zh0(QpdIbJY0T%{NRalu(Mir+=ry=%eWQS%j7uT>POku_@mJ`64GDG$mudsy29##@a zZ^P%tRk?rNIaIcevj(6}Q1hGFs>|Y}Gy8j!H)Fk#;;DiO` zcqU=Ek}4c2S8mC_jm7D&0t@v%=`hwTpDHF_GnX1~qa})+vv^(B(?!Gf1bUq&%ZkP0$uRkDVEUrdXs&MQ>& zzFf3g*>{13I79(6tXP`IiIv`NTuml-q?j^O_Db z;6RRE6Ph6J6yD03kmE;q1~TBmj67Fd^(dmqIn)T4f)Y$XiDwj(>rhox%5&tm#XtW8 DDg__> diff --git a/facebook/classes.py b/facebook/classes.py index b04d1cb..01ac478 100644 --- a/facebook/classes.py +++ b/facebook/classes.py @@ -28,6 +28,7 @@ class User: self.url = '' self.name = '' self.url_other_picture = '' + self.doc def add_to_db(self): # Lägg till profilen till arrango diff --git a/facebook/helpers.py b/facebook/helpers.py index 355d2a8..cbe1410 100644 --- a/facebook/helpers.py +++ b/facebook/helpers.py @@ -13,8 +13,9 @@ def sleep_(t): variation = 4 # Testa olika sovlängder för att inte få användaren blockerad sleep(t * variation * random.randrange(85, 115, 1) / 100) if random.randrange(0, 60, 1) == 1: - for s in range(0, 300): - print(f"Sover {300 - s} sekunder till... ", end="\r") + longsleep = random.randrange(200, 300) + for s in range(0, longsleep): + print(f"Sover {longsleep - s} sekunder till... ", end="\r") sleep(1) print() sleep(random.randrange(0, 10, 1) / 4) diff --git a/facebook/scrapers.py b/facebook/scrapers.py index 301cdd3..14d5830 100644 --- a/facebook/scrapers.py +++ b/facebook/scrapers.py @@ -7,7 +7,7 @@ from config import * from helpers import sleep_, update_cookie, write_error -def profile_picture_reactions(profile, user, all_pictures, first=False, single = False): +def profile_picture_reactions(profile, user, all_pictures, first_user=False, single = False): # Fixa url:er osv if user.username.isnumeric(): @@ -51,7 +51,7 @@ def profile_picture_reactions(profile, user, all_pictures, first=False, single = user=user.username, url=user.url_photos, ) - if first == True: + if first_user == True: print(profile.viewing().prettify()) exit() print( @@ -61,13 +61,17 @@ def profile_picture_reactions(profile, user, all_pictures, first=False, single = ) # Hitta länk till olika saker hos användarem, inkl facebook-id - user.id = "" + for a in profile.viewing().find_all("a", href=True): if "Profile pictures" in a.text: user.url_album = url_bas + a["href"] # Länk till album för profilbulder if "profile_id" in a["href"]: l = a["href"] - user.id = re.search("\d+", l[l.find("id=") + 3 :]).group(0) + try: + user.id = re.search("\d+", l[l.find("id=") + 3 :]).group(0) + except: + user.id = False + if "Likes" in a.text: user.url_likes = url_bas + a["href"] if "About" in a.text: @@ -88,8 +92,8 @@ def profile_picture_reactions(profile, user, all_pictures, first=False, single = else: # Spara ner profilen till databasen och avsluta sökningen på användaren user.url_album = False - if first == False: - user.doc['checked'] = True + if first_user == False: + user.checked() user.add_to_db() print('Hittar inget album för profilbilder.') write_error(7, soup=profile.viewing(), user=user.username, url=user.url_album, url_name='user.url_album') @@ -113,23 +117,29 @@ def profile_picture_reactions(profile, user, all_pictures, first=False, single = user.profile_pictures = len(url_pics) except: user.profile_pictures = 0 - user.doc['checked'] = True + user.checked() user.add_to_db() return # Lägg till profilen till arrango user.add_to_db() # Gå igenom alla profilbilder - if single == True and first == False: - url_pics = url_pics[0] + if single == True and first_user == False: + url_pics = url_pics[:1] + for pic in url_pics: + if pic in all_pictures: + return None # Skriv ut vilken bild som behandlas print(f"Bild {url_pics.index(pic) + 1} av {user.profile_pictures}", end="\r",) picture = Picture(user.username) picture.url = url_bas + pic picture.id = str(picture.url[picture.url.find("fbid=") + 5 :]) - picture.id = str(re.search('\d+', picture.id).group()) + try: + picture.id = str(re.search('\d+', picture.id).group()) + except: + pass # if picture.id in all_pictures: # print('Redan kollat bild', picture.id) # continue @@ -185,7 +195,9 @@ def profile_picture_reactions(profile, user, all_pictures, first=False, single = # Hämta reaktioner för bilden sleep_(3) + profile.browser.open(url_reactions) + update_cookie(profile.browser.session.cookies, profile.name) try: @@ -195,7 +207,7 @@ def profile_picture_reactions(profile, user, all_pictures, first=False, single = picture.no_reactions = re.search(r"total_count=(\d+)", url_limit).group(1) limit = re.search(r"limit=(\d+)", url_limit).group(1) except UnboundLocalError: #fel9 - write_error(9, soup=profile.viewing(), traceback=traceback.format_exc()) + write_error(9, soup=profile.viewing(), traceback=traceback.format_exc(), url=url_reactions, url_name='url_reactions') # Bilder med väldigt många likes går inte att visa så här? continue @@ -209,6 +221,7 @@ def profile_picture_reactions(profile, user, all_pictures, first=False, single = try: sleep_(4) profile.browser.open(url_limit) + url_limit = '' update_cookie(profile.browser.session.cookies, profile.name)