From eacb568dc79a992453b530cccaf92ea14d198e30 Mon Sep 17 00:00:00 2001 From: Anatoly Kopyl Date: Tue, 6 Apr 2021 03:44:09 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Somewhat=20working=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + main.py | 56 ++++++++++++++++++++++++++----------------- utils/authenticate.py | 19 +++++++++++++++ utils/detect.py | 9 +++++++ 4 files changed, 63 insertions(+), 22 deletions(-) create mode 100644 utils/authenticate.py create mode 100644 utils/detect.py diff --git a/.gitignore b/.gitignore index 730f515..a5c7feb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /venv /.vscode .DS_Store +__pycache__ config.ini vk_config.v2.json \ No newline at end of file diff --git a/main.py b/main.py index 56dd7be..36c6dbe 100644 --- a/main.py +++ b/main.py @@ -1,33 +1,45 @@ -import argparse import configparser -from PIL import Image -import pytesseract -import vk_api -from rich import print +import ast +from time import sleep +from rich import print#, inspect from rich.console import Console -c = Console() + +from utils.authenticate import authenticate +from utils.detect import detect config = configparser.ConfigParser() config.read('config.ini') -login = config['DEFAULT']['login'] -password = config['DEFAULT']['password'] +terms = ast.literal_eval(config['SEARCH']['terms']) +interests = ast.literal_eval(config['SEARCH']['interests']) -parser = argparse.ArgumentParser(description='List the content of a folder') +c = Console() +vk = authenticate() -parser.add_argument('-l', '--login', action='store', help='Your vk login (phone or email)') -parser.add_argument('-p', '--password', action='store', help='Your vk password') +queries = [] +for i in range(len(terms)): + queries.append({ + 'string': terms[i], + 'last_url': '' + }) -args = parser.parse_args() +photos_processed = 0 +photos_saved = 0 +while True: + for query in queries: + response = vk.docs.search(q=query['string'], count=1) + image_url = response.popitem()[1][0]['url'] # WTF not readable + image_url_clean = image_url.split('?')[0] # Get url without params -def _2fa_handler(): - code = c.input("Enter 2FA code: ", style="bold cyan") - return code, True + # If the image we are getting is new do stuff + if image_url_clean != query['last_url']: + photos_processed += 1 + query['last_url'] = image_url_clean -vk_session = vk_api.VkApi(login=args.login, password=args.password, auth_handler=_2fa_handler) -vk_session.auth() + text = detect(image_url+query['string']) + for interest in interests: + if interest in text: + photos_saved += 1 + c.print('Found an interesting photo!', style="green") + c.print(image_url) -vk = vk_session.get_api() - -c.print(vk.docs.search(q=".jpg")) - -#print(pytesseract.image_to_string(Image.open("test.png"))) + sleep(1) diff --git a/utils/authenticate.py b/utils/authenticate.py new file mode 100644 index 0000000..cc4d9e4 --- /dev/null +++ b/utils/authenticate.py @@ -0,0 +1,19 @@ +import vk_api +import configparser +from rich.console import Console +c = Console() + +config = configparser.ConfigParser() +config.read('config.ini') +login = config['CREDENTIALS']['login'] +password = config['CREDENTIALS']['password'] + +def _2fa_handler(): + code = c.input("Enter 2FA code: ", style="italic cyan") + return code, True + +def authenticate(): + vk_session = vk_api.VkApi(login=login, password=password, auth_handler=_2fa_handler) + vk_session.auth() + + return vk_session.get_api() \ No newline at end of file diff --git a/utils/detect.py b/utils/detect.py new file mode 100644 index 0000000..5c95e55 --- /dev/null +++ b/utils/detect.py @@ -0,0 +1,9 @@ +import pytesseract +from PIL import Image +import io +import requests + +def detect(url): + response = requests.get(url) + img = Image.open(io.BytesIO(response.content)) + return pytesseract.image_to_string(img).lower()