mirror of
https://github.com/anatolykopyl/dochunt.git
synced 2026-03-26 12:54:41 +00:00
🚀 Somewhat working version
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,6 +1,7 @@
|
||||
/venv
|
||||
/.vscode
|
||||
.DS_Store
|
||||
__pycache__
|
||||
|
||||
config.ini
|
||||
vk_config.v2.json
|
||||
56
main.py
56
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)
|
||||
|
||||
19
utils/authenticate.py
Normal file
19
utils/authenticate.py
Normal file
@@ -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()
|
||||
9
utils/detect.py
Normal file
9
utils/detect.py
Normal file
@@ -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()
|
||||
Reference in New Issue
Block a user