diff --git a/RAAspotter.py b/RAAspotter.py index 86aa130d75c98f6740692fde86a40a0c65d5ebf6..e31532fc5f9eac4e904e8727c068217a85e7e4e4 100644 --- a/RAAspotter.py +++ b/RAAspotter.py @@ -12,6 +12,8 @@ from pyvirtualdisplay import Display from pdfminer.high_level import extract_text +import hashlib + logger = logging.getLogger(__name__) class RAAspotter: @@ -20,6 +22,7 @@ class RAAspotter: date = "" name = "" filename = "" + sha256 = "" def __init__(self, url, date, name, filename): if not url == "": @@ -31,6 +34,11 @@ class RAAspotter: if not filename == "": self.filename = filename + def get_sha256(self): + if (self.sha256 == ""): + self.sha256 = hashlib.sha256(self.filename.encode('utf-8')).hexdigest() + return self.sha256 + def __init__(self, data_dir, user_agent=""): logger.debug('Initialisation de RAAspotter') self.user_agent = user_agent @@ -87,9 +95,9 @@ class RAAspotter: def download_file(self, raa): try: - os.makedirs(os.path.dirname(self.data_dir+raa.filename), exist_ok=True) + os.makedirs(os.path.dirname(f'{self.data_dir}{raa.get_sha256()}.pdf'), exist_ok=True) file = self.session.get(raa.url) - f = open(self.data_dir+raa.filename,'wb') + f = open(f'{self.data_dir}{raa.get_sha256()}.pdf','wb') f.write(file.content); f.close() except (requests.exceptions.ConnectionError, requests.exceptions.ChunkedEncodingError): @@ -98,14 +106,11 @@ class RAAspotter: except Exception as exc: logger.warning(f'ATTENTION: Impossible de télécharger le fichier {raa.url}: {exc}') - def get_txt_file(filename): - return re.sub('(\.pdf)$', '.txt', filename) - def parse_pdf(self, raa, keywords): - if not os.path.isfile(self.data_dir+raa.filename): - logger.warning(f'ATTENTION: le fichier {raa.filename} n\'existe pas') + if not os.path.isfile(f'{self.data_dir}{raa.get_sha256()}.pdf'): + logger.warning(f'ATTENTION: le fichier {raa.get_sha256()}.pdf n\'existe pas') else: - text = extract_text(self.data_dir+raa.filename) + text = extract_text(f'{self.data_dir}{raa.get_sha256()}.pdf') found = False for keyword in keywords: if re.search(keyword, text, re.IGNORECASE|re.MULTILINE): @@ -115,15 +120,15 @@ class RAAspotter: RAAspotter.print_output(f' Le terme \033[1m{keyword}\033[0m a été trouvé.') # Écrit le texte du PDF dans un fichier texte pour une analyse future, puis supprime le PDF - f = open(RAAspotter.get_txt_file(self.data_dir+raa.filename),'w') + f = open(f'{self.data_dir}{raa.get_sha256()}.txt','w') f.write(text) f.close() - os.remove(self.data_dir+raa.filename) + os.remove(f'{self.data_dir}{raa.get_sha256()}.pdf') if found: RAAspotter.print_output('') def ocr(self, raa, retry_on_failure=True): - cmd = ['ocrmypdf', '-l', 'eng+fra', '--output-type', 'pdfa', '--redo-ocr', '--skip-big', '500' , self.data_dir+raa.filename, self.data_dir+raa.filename] + cmd = ['ocrmypdf', '-l', 'eng+fra', '--output-type', 'pdfa', '--redo-ocr', '--skip-big', '500' , f'{self.data_dir}{raa.get_sha256()}.pdf', f'{self.data_dir}{raa.get_sha256()}.pdf'] logger.debug(f'Lancement de ocrmypdf: {cmd}') try: output = subprocess.check_output(cmd, stderr=subprocess.STDOUT) @@ -138,7 +143,7 @@ class RAAspotter: def parse_raa(self, elements, keywords): for raa in elements: # Si le fichier n'a pas déjà été parsé, on le télécharge et on le parse - if not os.path.isfile(RAAspotter.get_txt_file(self.data_dir+raa.filename)): + if not os.path.isfile(f'{self.data_dir}{raa.get_sha256()}.txt'): logger.info(f'Nouveau fichier : {raa.name} ({raa.date}). URL : {raa.url}') self.download_file(raa) self.ocr(raa, True)