mirror of
https://github.com/anatolykopyl/dochunt.git
synced 2026-03-26 21:04:43 +00:00
🚀 Somewhat working version
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,6 +1,7 @@
|
|||||||
/venv
|
/venv
|
||||||
/.vscode
|
/.vscode
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
__pycache__
|
||||||
|
|
||||||
config.ini
|
config.ini
|
||||||
vk_config.v2.json
|
vk_config.v2.json
|
||||||
56
main.py
56
main.py
@@ -1,33 +1,45 @@
|
|||||||
import argparse
|
|
||||||
import configparser
|
import configparser
|
||||||
from PIL import Image
|
import ast
|
||||||
import pytesseract
|
from time import sleep
|
||||||
import vk_api
|
from rich import print#, inspect
|
||||||
from rich import print
|
|
||||||
from rich.console import Console
|
from rich.console import Console
|
||||||
c = Console()
|
|
||||||
|
from utils.authenticate import authenticate
|
||||||
|
from utils.detect import detect
|
||||||
|
|
||||||
config = configparser.ConfigParser()
|
config = configparser.ConfigParser()
|
||||||
config.read('config.ini')
|
config.read('config.ini')
|
||||||
login = config['DEFAULT']['login']
|
terms = ast.literal_eval(config['SEARCH']['terms'])
|
||||||
password = config['DEFAULT']['password']
|
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)')
|
queries = []
|
||||||
parser.add_argument('-p', '--password', action='store', help='Your vk password')
|
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():
|
# If the image we are getting is new do stuff
|
||||||
code = c.input("Enter 2FA code: ", style="bold cyan")
|
if image_url_clean != query['last_url']:
|
||||||
return code, True
|
photos_processed += 1
|
||||||
|
query['last_url'] = image_url_clean
|
||||||
|
|
||||||
vk_session = vk_api.VkApi(login=args.login, password=args.password, auth_handler=_2fa_handler)
|
text = detect(image_url+query['string'])
|
||||||
vk_session.auth()
|
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()
|
sleep(1)
|
||||||
|
|
||||||
c.print(vk.docs.search(q=".jpg"))
|
|
||||||
|
|
||||||
#print(pytesseract.image_to_string(Image.open("test.png")))
|
|
||||||
|
|||||||
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