import datetime import re import xmltodict import pandas as pd import markdownify import os from pathlib import Path from utils.documents_to_database import documents_to_database ## %% Obtenir le répertoire du fichier courant # Obtenir le répertoire du fichier courant try: # Ceci fonctionnera lors de l'exécution en tant que script script_dir = Path(__file__).parent.parent except NameError: # Ceci fonctionnera dans des environnements interactifs script_dir = Path().absolute() project_root = script_dir wordpress_xml_path = os.path.join(project_root, 'import_data', 'data', 'Wordpress', 'jevalideca', 'wordpress.xml') with open(wordpress_xml_path, "r") as xml_file: wordpress_xml = xml_file.read() ## %% Convertir le XML en dictionnaire Python wordpress_dict = xmltodict.parse(wordpress_xml) ## %% Créer un DataFrame à partir des éléments du canal RSS items_df = pd.DataFrame(wordpress_dict['rss']['channel']['item']) ## %% Filtrer les éléments pour ne garder que les pages et les articles publiés items_df_filter = items_df[ (items_df['wp:post_type'].isin(['page', 'post'])) & (items_df['wp:status'] == 'publish')].copy() ## %% Convertir la date de publication en timestamp items_df_filter['creation_timestamp'] = items_df_filter['wp:post_date'].apply( lambda x: int(datetime.datetime.fromisoformat(x).timestamp())) ## %% Définir une fonction pour convertir le contenu WordPress en Markdown def wp_to_markdown(x): try: md_text = re.sub(r'\n+', ' ', markdownify.markdownify(x, heading_style='ATX')).strip() except Exception as e: print(e) md_text = str() pass return md_text ## %% Appliquer la conversion Markdown au contenu items_df_filter['texte'] = items_df_filter['content:encoded'].apply(lambda x: wp_to_markdown(x)) ## %% Renommer les colonnes pour correspondre au format standard items_df_filter.rename(columns={"link": "uri", "wp:post_type": "type"}, inplace=True) ## %% Ajouter des colonnes d'identification items_df_filter['index'] = "rs_wordpress_jevalideca" items_df_filter['network'] = "Wordpress" items_df_filter['chemin'] = wordpress_xml_path ## %% Remplacer les valeurs NaN par des chaînes vides items_df_filter.fillna(value="", inplace=True) ## %% Envoyer les données à la base de données documents_to_database(items_df_filter[['title', 'uri', 'type', 'creation_timestamp', 'texte', 'index', 'network', 'chemin']])