Procházet zdrojové kódy

Parser variable renaming and null checkings

feature/use_fb_data
Figg před 4 měsíci
rodič
revize
361536d4cc
1 změnil soubory, kde provedl 22 přidání a 28 odebrání
  1. 22
    28
      million/parsing/facebook_parser.py

+ 22
- 28
million/parsing/facebook_parser.py Zobrazit soubor

@@ -9,59 +9,53 @@ def parse_facebook_exports_from_folder(folder_path: str) -> FacebookExport:
9 9
     Parcourt un dossier, lit chaque fichier JSON et les fusionne dans un seul objet FacebookExport.
10 10
 
11 11
     :param folder_path: Chemin vers le dossier contenant les fichiers JSON
12
-    :return: Un objet FacebookExport
12
+    :return: Un objet FacebookExport ou None si aucun résultat trouvé
13 13
     """
14
-    if not os.path.isdir(folder_path):
15
-        raise FileNotFoundError(f"Le dossier {folder_path} n'existe pas.")
16
-    
17
-    json_files = [f for f in os.listdir(folder_path) if f.endswith('.json')]
18
-    
19
-    if not json_files:
20
-        raise FileNotFoundError(f"Aucun fichier JSON trouvé dans le dossier {folder_path}.")
21
-
22 14
     merged_facebook_export = None
23 15
 
24
-    for file_name in json_files:
25
-        #file_path = os.path.join(folder_path, file_name)
16
+    with os.scandir(folder_path) as it:
17
+        for entry in it:
18
+            if not (entry.is_file() and entry.name.endswith('.json')): continue
26 19
 
27
-        facebook_export = parse_facebook_export(file_name)
20
+            facebook_export = parse_facebook_export(entry.path)
28 21
 
29
-        if merged_facebook_export is None:
30
-            merged_facebook_export = facebook_export
31
-        else:
32
-            merged_facebook_export.messages.extend(facebook_export.messages)
33
-            merged_facebook_export.participants.update(facebook_export.participants)
22
+            if merged_facebook_export is None:
23
+                merged_facebook_export = facebook_export
24
+            else:
25
+                merged_facebook_export.messages.extend(facebook_export.messages)
26
+    
27
+    if merged_facebook_export is None: return None
34 28
 
35
-    if merged_facebook_export is None:
36
-        raise ValueError(f"Aucun fichier valide n'a été trouvé ou parsé dans le dossier {folder_path}.")
29
+    merged_facebook_export.messages = sorted(merged_facebook_export.messages, key=lambda m: m.date_time)
30
+    merged_facebook_export.participants = sorted(merged_facebook_export.participants, key=lambda m: m.name)
37 31
     
38 32
     return merged_facebook_export
39 33
 
40
-def parse_facebook_export(file_name: str) -> FacebookExport:
34
+def parse_facebook_export(file_path: str) -> FacebookExport:
41 35
     """
42
-    Parse un fichier JSON en instance de la classe model.FacebookExport
36
+    Parse un fichier JSON en instance de la classe FacebookExport
43 37
 
44
-    :param file_name: Le chemin du fichier à ouvrir
38
+    :param file_path: Le chemin du fichier à ouvrir
45 39
     :return: Une instance de FacebookExport initialisée avec les données du fichier JSON
46 40
     """
47
-    if not file_name.lower().endswith('.json') or not os.path.exists(file_name):
48
-        raise ValueError(f"Le fichier {file_name} n'existe pas ou n'est pas un fichier JSON.")
41
+    if not file_path.lower().endswith('.json') or not os.path.exists(file_path):
42
+        raise ValueError(f"Le fichier {file_path} n'existe pas ou n'est pas un fichier JSON.")
49 43
 
50 44
     try:
51
-        json_data = read_broken_fb_json(file_name)
45
+        json_data = read_broken_fb_json(file_path)
52 46
         return FacebookExport.from_dict(json_data)
53 47
     except Exception as e:
54 48
         raise Exception(f"Erreur lors de la conversion du JSON en FacebookExport: {str(e)}")
55 49
 
56
-def read_broken_fb_json(file_name: str) -> Any:
50
+def read_broken_fb_json(file_path: str) -> Any:
57 51
     """
58 52
     Lit un fichier JSON issu de Facebook et renvoie le contenu après correction de l'encodage
59 53
 
60
-    :param file_name: Le chemin du fichier à ouvrir
54
+    :param file_path: Le chemin du fichier à ouvrir
61 55
     :return: Le contenu du fichier JSON sous forme d'objet
62 56
     """
63 57
     # https://stackoverflow.com/questions/50008296/facebook-json-badly-encoded
64
-    with open(file_name, 'rb') as f:
58
+    with open(file_path, 'rb') as f:
65 59
         binary_data = f.read()
66 60
         repaired = re.sub(
67 61
             rb'\\u00([\da-f]{2})',

Načítá se…
Zrušit
Uložit