Skip to content
Extraits de code Groupes Projets
Valider 5f18d9ca rédigé par Bastien Le Querrec's avatar Bastien Le Querrec
Parcourir les fichiers

Attrap_bot: stocke la date de détection du dernier RAA vu

parent c31f4207
Branches
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Pipeline #8698 réussi
...@@ -4,6 +4,7 @@ import hashlib ...@@ -4,6 +4,7 @@ import hashlib
import json import json
import logging import logging
import os import os
import pytz
import requests import requests
import smtplib import smtplib
import ssl import ssl
...@@ -156,10 +157,13 @@ class Attrap_bot: ...@@ -156,10 +157,13 @@ class Attrap_bot:
status_file_path = f'{query_id}.latest.txt' status_file_path = f'{query_id}.latest.txt'
if os.path.isfile(status_file_path): if os.path.isfile(status_file_path):
status = open(status_file_path, 'r').read().strip() status = open(status_file_path, 'r').read().strip()
last_raa_id = status.split('|')[0]
last_raa_first_seen_on = datetime.datetime.fromtimestamp(float(status.split('|')[1]), pytz.utc)
send_results = True send_results = True
else: else:
logger.info('Requête lancée pour la première fois, les résultats ne seront pas envoyés') logger.info('Requête lancée pour la première fois, les résultats ne seront pas envoyés')
status = '0000000000000000000000000000000000000000000000000000000000000000' last_raa_id = '0000000000000000000000000000000000000000000000000000000000000000'
last_raa_first_seen_on = datetime.datetime.now(pytz.utc)
if self.config['send_on_new_queries']: if self.config['send_on_new_queries']:
send_results = True send_results = True
else: else:
...@@ -173,59 +177,68 @@ class Attrap_bot: ...@@ -173,59 +177,68 @@ class Attrap_bot:
if os.path.isfile(status_file_path): if os.path.isfile(status_file_path):
os.remove(status_file_path) os.remove(status_file_path)
status_file = open(status_file_path, 'w') status_file = open(status_file_path, 'w')
status = f'{last_raa_id}|{int(round(last_raa_first_seen_on.timestamp()))}'
status_file.write(status) status_file.write(status)
status_file.close() status_file.close()
else: else:
# Si le dernier RAA n'est pas celui connu, on analyse les résultats # Si le dernier RAA n'est pas celui connu, on analyse les résultats
latest = raa[0] latest = raa[0]
if latest['id'] != status: if latest['id'] != last_raa_id:
email_message = "" email_message = ""
# On récupère les derniers RAA jusqu'à ce qu'on trouve le dernier analysé # On récupère les derniers RAA jusqu'à ce qu'on trouve le dernier analysé
raa_candidates = [] raa_candidates = []
for result in raa: for result in raa:
if result['id'] != status: if result['id'] != last_raa_id:
raa_candidates.append(result) raa_candidates.append(result)
else: else:
break break
# Maintenant, on prend les derniers RAA à analyser, pour commencer par les plus anciens en premier # Maintenant, on prend les derniers RAA à analyser, pour commencer par les plus anciens en premier
for result in raa_candidates[::-1]: for result in raa_candidates[::-1]:
status = result['id'] # On vérifie que la date de détection du RAA est plus récente (au cas où l'API n'ait pas renvoyé
# tous les résultats, ce qui arrive pendant une mise à jour de la base de données)
# On affiche le résultat dans la console first_seen_on = datetime.datetime.fromisoformat(result['first_seen_on'])
if (self.config['console_output']): if first_seen_on > last_raa_first_seen_on:
print(f"\033[92m{result['name']}\033[0m ({result['date']}) : {result['url']}") last_raa_id = result['id']
last_raa_first_seen_on = result['first_seen_on']
if send_results:
# On ajoute le résultat à la liste des RAA à publier # On affiche le résultat dans la console
if send_to_mastodon: if (self.config['console_output']):
if not raa_to_publish_mastodon.get(query['mastodon']): print(f"\033[92m{result['name']}\033[0m ({result['date']}) : {result['url']}")
raa_to_publish_mastodon[query['mastodon']] = {}
# On regroupe les toots par RAA (un toot par RAA) if send_results:
if not raa_to_publish_mastodon[query['mastodon']].get(result['id']): # On ajoute le résultat à la liste des RAA à publier
raa_to_publish_mastodon[query['mastodon']][result['id']] = result if send_to_mastodon:
# On indique le hashtag de la requête if not raa_to_publish_mastodon.get(query['mastodon']):
if not raa_to_publish_mastodon[query['mastodon']][result['id']].get('hashtags'): raa_to_publish_mastodon[query['mastodon']] = {}
raa_to_publish_mastodon[query['mastodon']][result['id']]['hashtags'] = [] # On regroupe les toots par RAA (un toot par RAA)
raa_to_publish_mastodon[query['mastodon']][result['id']]['hashtags'].append(hashtag) if not raa_to_publish_mastodon[query['mastodon']].get(result['id']):
raa_to_publish_mastodon[query['mastodon']][result['id']] = result
if send_email: # On indique le hashtag de la requête
if not raa_to_publish_email.get(query['email']): if not raa_to_publish_mastodon[query['mastodon']][result['id']].get('hashtags'):
raa_to_publish_email[query['email']] = {} raa_to_publish_mastodon[query['mastodon']][result['id']]['hashtags'] = []
# On regroupe les mails par administration (un mail par administration) raa_to_publish_mastodon[query['mastodon']][result['id']]['hashtags'].append(hashtag)
if not raa_to_publish_email[query['email']].get(result['administration']):
raa_to_publish_email[query['email']][result['administration']] = {} if send_email:
if not raa_to_publish_email[query['email']][result['administration']].get(result['id']): if not raa_to_publish_email.get(query['email']):
raa_to_publish_email[query['email']][result['administration']][result['id']] = result raa_to_publish_email[query['email']] = {}
# On indique le hashtag de la requête # On regroupe les mails par administration (un mail par administration)
if not raa_to_publish_email[query['email']][result['administration']][result['id']].get('queries'): if not raa_to_publish_email[query['email']].get(result['administration']):
raa_to_publish_email[query['email']][result['administration']][result['id']]['queries'] = [] raa_to_publish_email[query['email']][result['administration']] = {}
raa_to_publish_email[query['email']][result['administration']][result['id']]['queries'].append(query_id) if not raa_to_publish_email[query['email']][result['administration']].get(result['id']):
raa_to_publish_email[query['email']][result['administration']][result['id']] = result
# On indique le hashtag de la requête
if not raa_to_publish_email[query['email']][result['administration']][result['id']].get('queries'):
raa_to_publish_email[query['email']][result['administration']][result['id']]['queries'] = []
raa_to_publish_email[query['email']][result['administration']][result['id']]['queries'].append(query_id)
if os.path.isfile(status_file_path): if os.path.isfile(status_file_path):
os.remove(status_file_path) os.remove(status_file_path)
status_file = open(status_file_path, 'w') status_file = open(status_file_path, 'w')
status = f'{last_raa_id}|{int(round(last_raa_first_seen_on.timestamp()))}'
status_file.write(status) status_file.write(status)
status_file.close() status_file.close()
......
Mastodon.py>=1.8.1 Mastodon.py>=1.8.1
pycodestyle>=2.12.1 pycodestyle>=2.12.1
pytz>=2024.2
pyyaml>=6.0.2 pyyaml>=6.0.2
requests>=2.32.3 requests>=2.32.3
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter