mirror of
https://gist.github.com/6ba37e4d4084e858f917e271550ce5f6.git
synced 2024-09-20 00:34:20 +03:00
69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
|
from iqdb import Iqdb
|
||
|
from library import Library
|
||
|
from metadata import Metadata
|
||
|
from database import Database
|
||
|
|
||
|
from datetime import datetime
|
||
|
from pathlib import Path
|
||
|
import re
|
||
|
import logging
|
||
|
import time
|
||
|
|
||
|
class PicSorter:
|
||
|
def __init__(self):
|
||
|
self.dir_tmp = Path('R:/')
|
||
|
self.dir_input = Path('./input')
|
||
|
self.dir_logs = Path('./logs')
|
||
|
self.dir_library = Path('./library')
|
||
|
self.setup_folders()
|
||
|
self.setup_logging()
|
||
|
|
||
|
def setup_folders(self):
|
||
|
self.dir_tmp.mkdir(exist_ok=True)
|
||
|
self.dir_logs.mkdir(exist_ok=True)
|
||
|
self.dir_library.mkdir(exist_ok=True)
|
||
|
|
||
|
def setup_logging(self):
|
||
|
logfile = Path(self.dir_logs, datetime.now().strftime('%Y-%m-%d.log'))
|
||
|
logging.basicConfig(
|
||
|
filename=logfile,
|
||
|
level=logging.INFO,
|
||
|
format='%(asctime)s %(levelname)s %(module)s: %(message)s',
|
||
|
datefmt='%H:%M:%S',
|
||
|
)
|
||
|
|
||
|
def process_folder(self):
|
||
|
iqdb = Iqdb()
|
||
|
library = Library(self.dir_library)
|
||
|
metadata = Metadata(self.dir_tmp)
|
||
|
db = Database()
|
||
|
for filename in self.dir_input.rglob('*.jpg'):
|
||
|
print("Process ", filename)
|
||
|
try:
|
||
|
url = iqdb.search(filename)
|
||
|
if url is None:
|
||
|
logging.warn("%s not found", filename)
|
||
|
library.move_to_orphan(Path(filename))
|
||
|
continue
|
||
|
|
||
|
m = re.search(r".*posts\/(\d{3,})", url)
|
||
|
if not m:
|
||
|
continue
|
||
|
post_id = int(m.group(1))
|
||
|
if db.is_exists(post_id):
|
||
|
logging.info("Skipping exists post %d", post_id)
|
||
|
continue
|
||
|
|
||
|
meta_result = metadata.process(url)
|
||
|
if meta_result is None:
|
||
|
continue
|
||
|
image_path, tags = meta_result
|
||
|
library.move(image_path, tags)
|
||
|
db.add(post_id, tags.tags_string)
|
||
|
time.sleep(5)
|
||
|
except Exception as ex:
|
||
|
raise ex
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
PicSorter().process_folder()
|