33from datetime import datetime , UTC
44from typing import List , Dict
55
6- # Constantes de l'outil de veille
76SOURCE_SITE = "github"
87GITHUB_TOKEN = os .getenv ("GITHUB_TOKEN" )
98
10- # ... (THEMES, HEADERS, RateLimitError, sanitize_text, normalize_github_repo, build_query_for_theme restent inchangés) ...
119
1210THEMES = [
1311 "large-language-model" , "llm" , "transformer" , "text-generation" , "retrieval-augmented-generation" ,
@@ -69,24 +67,17 @@ def search_github_repos(query: str, per_page: int = 20) -> List[Dict]:
6967
7068 if resp .status_code == 403 :
7169 retry_after = resp .headers .get ("Retry-After" )
72- # Lève l'erreur pour la gestion du break dans scrape_github
7370 raise RateLimitError (retry_after = int (retry_after ) if retry_after and retry_after .isdigit () else None )
74-
75- # 🎯 CORRECTION CLÉ DANS CE BLOC :
76- # Utiliser 'resp.raise_for_status()' si vous souhaitez détecter les 4xx/5xx généraux,
77- # mais pour la robustesse, nous allons d'abord vérifier le statut et analyser le JSON.
78-
71+
7972 if resp .status_code != 200 :
80- # Pour toutes les autres erreurs non 403, nous loguons et retournons vide.
8173 print (f"[WARN] HTTP Status { resp .status_code } for query: { query } " )
8274 return []
8375
84- # Si le statut est 200, nous essayons d'analyser le JSON
8576 data = resp .json ()
8677 return data .get ("items" , [])
8778
8879 except RateLimitError :
89- raise # Relance RateLimitError
80+ raise
9081 except requests .exceptions .RequestException as e :
9182 print (f"[ERREUR CONNEXION/HTTP] GitHub Search: { e } " )
9283 return []
@@ -99,7 +90,7 @@ def scrape_github(themes: List[str] = THEMES, limit_per_theme: int = 20) -> List
9990 """Scrape GitHub pour les thèmes donnés et retourne les éléments unifiés."""
10091
10192 all_items = []
102- stop_scraping = False # Drapeau de contrôle
93+ stop_scraping = False
10394
10495 try :
10596 for theme in themes :
@@ -112,7 +103,6 @@ def scrape_github(themes: List[str] = THEMES, limit_per_theme: int = 20) -> List
112103 try :
113104 items = search_github_repos (q , limit_per_theme )
114105
115- # SÉCURITÉ SUPPLÉMENTAIRE :
116106 if not isinstance (items , list ):
117107 print (f"[FATAL WARN] search_github_repos a retourné { type (items )} au lieu de list. Arrêt." )
118108 stop_scraping = True
@@ -122,11 +112,9 @@ def scrape_github(themes: List[str] = THEMES, limit_per_theme: int = 20) -> List
122112 all_items .extend (normalized_items )
123113
124114 except RateLimitError :
125- # Gère spécifiquement l'erreur de Rate Limit
126115 print (f"[RATE LIMIT] Limite atteinte. Arrêt de la veille GitHub pour cette itération." )
127116 stop_scraping = True
128117 except Exception as e :
129- # Gère toutes les autres exceptions de niveau thème (très peu probables maintenant)
130118 print (f"[ERREUR THÈME] '{ theme } ': { e } " )
131119 continue
132120
0 commit comments