libere-tes-chaine-de-mots/import_data/41_importation_wordpress.py

74 lines
2.6 KiB
Python
Raw Normal View History

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
2024-11-30 22:03:49 -05:00
## %% Obtenir le répertoire du fichier courant
# Obtenir le répertoire du fichier courant
try:
2024-11-30 22:03:49 -05:00
# Ceci fonctionnera lors de l'exécution en tant que script
script_dir = Path(__file__).parent.parent
except NameError:
2024-11-30 22:03:49 -05:00
# 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()
2024-11-30 22:03:49 -05:00
## %% Convertir le XML en dictionnaire Python
wordpress_dict = xmltodict.parse(wordpress_xml)
2024-11-30 22:03:49 -05:00
## %% Créer un DataFrame à partir des éléments du canal RSS
items_df = pd.DataFrame(wordpress_dict['rss']['channel']['item'])
2024-11-30 22:03:49 -05:00
## %% 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()
2024-11-30 22:03:49 -05:00
## %% 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()))
2024-11-30 22:03:49 -05:00
## %% 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
2024-11-30 22:03:49 -05:00
## %% Appliquer la conversion Markdown au contenu
items_df_filter['texte'] = items_df_filter['content:encoded'].apply(lambda x: wp_to_markdown(x))
2024-11-30 22:03:49 -05:00
## %% Renommer les colonnes pour correspondre au format standard
items_df_filter.rename(columns={"link": "uri", "wp:post_type": "type"}, inplace=True)
2024-11-30 22:03:49 -05:00
## %% Ajouter des colonnes d'identification
items_df_filter['index'] = "rs_wordpress_jevalideca"
items_df_filter['network'] = "Wordpress"
items_df_filter['chemin'] = wordpress_xml_path
2024-11-30 22:03:49 -05:00
## %% Remplacer les valeurs NaN par des chaînes vides
items_df_filter.fillna(value="", inplace=True)
2024-11-30 22:03:49 -05:00
## %% Envoyer les données à la base de données
documents_to_database(items_df_filter[['title',
'uri',
'type',
'creation_timestamp',
'texte',
'index',
'network',
2024-11-30 22:03:49 -05:00
'chemin']])