diff --git a/Attrap_bot.py b/Attrap_bot.py index 10c592384557819539aaed003350c420b08b27c5..6970c93a2703665dc7cb6143a18e42e2db559220 100644 --- a/Attrap_bot.py +++ b/Attrap_bot.py @@ -136,78 +136,91 @@ class Attrap_bot: status_file_path = f'{query_id}.latest.txt' if os.path.isfile(status_file_path): status = open(status_file_path, 'r').read().strip() + send_results = True else: - status = None + logger.info('Requête lancée pour la première fois, les résultats ne seront pas envoyés') + status = '0000000000000000000000000000000000000000000000000000000000000000' + if self.config['do_not_send_on_new_queries']: + send_results = False + else: + send_results = True # On interroge l'API d'Attrap response = json.loads(requests.get(request_url, timeout=(10, 120)).content) raa = response['elements'] - # Si le dernier RAA n'est pas celui connu, on analyse les résultats - latest = raa[0] - if latest['id'] != status: - email_message = "" - - # On récupère les derniers RAA jusqu'à ce qu'on trouve le dernier analysé - raa_candidates = [] - for result in raa: - if result['id'] != status: - raa_candidates.append(result) - else: - break - - # Maintenant, on prend les derniers RAA à analyser, pour commencer par les plus anciens en premier - for result in raa_candidates[::-1]: - status = result['id'] - raa_name = result['name'] - raa_date = result['date'] - raa_administration = result['administration'] - raa_administration_name = result['administration_name'] - raa_url = result['url'] - - # On affiche le résultat dans la console - if (self.config['console_output']): - print(f'\033[92m{raa_name}\033[0m ({raa_date}) : {raa_url}') - - # On publie sur Mastodon - if mastodon_sender: - toot = f'{raa_name} ({raa_date})\n\n{raa_url}' - if query['mastodon']['prefix'] and not query['mastodon']['prefix'] == '': - prefix = query['mastodon']['prefix'] - prefix = prefix.replace('{id}', query_id) - prefix = prefix.replace('{administration}', raa_administration) - prefix = prefix.replace('{administration_name}', raa_administration_name) - toot = f"{prefix}\n\n{toot}" - if query['mastodon']['suffix'] and not query['mastodon']['suffix'] == '': - suffix = query['mastodon']['suffix'] - suffix = suffix.replace('{id}', query_id) - suffix = suffix.replace('{administration}', raa_administration) - suffix = suffix.replace('{administration_name}', raa_administration_name) - toot = f"{toot}\n\n{suffix}" - mastodon_sender.send(toot) - time.sleep(3) - logger.debug('Attente 3 secondes après envoi sur Mastodon...') - - # On complète le mail - if smtp_sender: - if email_message == "": - email_message = f"Attrap ({query_id})\nRequête : {search}" - email_message = f"{email_message}\n\n{raa_administration_name} :\n{raa_name} ({raa_date})\nURL : {raa_url}" - - # On envoie le mail si le message est prêt - if not email_message == "": - smtp_sender.send( - query['email']['from'], - query['email']['to'], - f"[Attrap] [{query_id}] Nouveaux éléments trouvés", - email_message - ) - + if len(raa) == 0: if os.path.isfile(status_file_path): os.remove(status_file_path) status_file = open(status_file_path, 'w') status_file.write(status) status_file.close() + else: + # Si le dernier RAA n'est pas celui connu, on analyse les résultats + latest = raa[0] + if latest['id'] != status: + email_message = "" + + # On récupère les derniers RAA jusqu'à ce qu'on trouve le dernier analysé + raa_candidates = [] + for result in raa: + if result['id'] != status: + raa_candidates.append(result) + else: + break + + # Maintenant, on prend les derniers RAA à analyser, pour commencer par les plus anciens en premier + for result in raa_candidates[::-1]: + status = result['id'] + raa_name = result['name'] + raa_date = result['date'] + raa_administration = result['administration'] + raa_administration_name = result['administration_name'] + raa_url = result['url'] + + # On affiche le résultat dans la console + if (self.config['console_output']): + print(f'\033[92m{raa_name}\033[0m ({raa_date}) : {raa_url}') + + # On publie sur Mastodon + if mastodon_sender and send_results: + toot = f'{raa_name} ({raa_date})\n\n{raa_url}' + if query['mastodon']['prefix'] and not query['mastodon']['prefix'] == '': + prefix = query['mastodon']['prefix'] + prefix = prefix.replace('{id}', query_id) + prefix = prefix.replace('{administration}', raa_administration) + prefix = prefix.replace('{administration_name}', raa_administration_name) + toot = f"{prefix}\n\n{toot}" + if query['mastodon']['suffix'] and not query['mastodon']['suffix'] == '': + suffix = query['mastodon']['suffix'] + suffix = suffix.replace('{id}', query_id) + suffix = suffix.replace('{administration}', raa_administration) + suffix = suffix.replace('{administration_name}', raa_administration_name) + toot = f"{toot}\n\n{suffix}" + mastodon_sender.send(toot) + time.sleep(3) + logger.debug('Attente 3 secondes après envoi sur Mastodon...') + + # On complète le mail + if smtp_sender and send_results: + if email_message == "": + email_message = f"Attrap ({query_id})\nRequête : {search}" + email_message = f"{email_message}\n\n{raa_administration_name} :\n{raa_name} ({raa_date})\nURL : {raa_url}" + + # On envoie le mail si le message est prêt + if not email_message == "" and send_results: + smtp_sender.send( + query['email']['from'], + query['email']['to'], + f"[Attrap] [{query_id}] Nouveaux éléments trouvés", + email_message + ) + + if os.path.isfile(status_file_path): + os.remove(status_file_path) + status_file = open(status_file_path, 'w') + status_file.write(status) + status_file.close() def get_mastodon_sender(self, config_id): if self.config.get('mastodon'): diff --git a/config.default.yml b/config.default.yml index da282b4a79a1f10c0ca99deefd24d7f9243e1aa2..62ce52bdc29031179c058431477c26345e78a18f 100644 --- a/config.default.yml +++ b/config.default.yml @@ -1,2 +1,3 @@ data_source: "https://attrap.fr/api/v1/search?s={search}&administration={administration}&sort=first_seen_on_desc&size=50&start_date={start_date}" console_output: True +do_not_send_on_new_queries: True