Browse Source

Parser variable renaming and null checkings

feature/use_fb_data
Figg 4 months ago
parent
commit
361536d4cc
1 changed files with 22 additions and 28 deletions
  1. 22
    28
      million/parsing/facebook_parser.py

+ 22
- 28
million/parsing/facebook_parser.py View File

9
     Parcourt un dossier, lit chaque fichier JSON et les fusionne dans un seul objet FacebookExport.
9
     Parcourt un dossier, lit chaque fichier JSON et les fusionne dans un seul objet FacebookExport.
10
 
10
 
11
     :param folder_path: Chemin vers le dossier contenant les fichiers JSON
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
     merged_facebook_export = None
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
     return merged_facebook_export
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
     :return: Une instance de FacebookExport initialisée avec les données du fichier JSON
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
     try:
44
     try:
51
-        json_data = read_broken_fb_json(file_name)
45
+        json_data = read_broken_fb_json(file_path)
52
         return FacebookExport.from_dict(json_data)
46
         return FacebookExport.from_dict(json_data)
53
     except Exception as e:
47
     except Exception as e:
54
         raise Exception(f"Erreur lors de la conversion du JSON en FacebookExport: {str(e)}")
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
     Lit un fichier JSON issu de Facebook et renvoie le contenu après correction de l'encodage
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
     :return: Le contenu du fichier JSON sous forme d'objet
55
     :return: Le contenu du fichier JSON sous forme d'objet
62
     """
56
     """
63
     # https://stackoverflow.com/questions/50008296/facebook-json-badly-encoded
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
         binary_data = f.read()
59
         binary_data = f.read()
66
         repaired = re.sub(
60
         repaired = re.sub(
67
             rb'\\u00([\da-f]{2})',
61
             rb'\\u00([\da-f]{2})',

Loading…
Cancel
Save