Commit 2461c141 authored by Matthieu Boileau's avatar Matthieu Boileau

Use spip_site.yml as unique input file

parent 324ca624
......@@ -2,5 +2,6 @@ content/
attachments/
.idea
__pycache__/
*_clean.yml
*.log
spip_calcul.yml
spip_yml
......@@ -13,26 +13,17 @@ Les fichiers récupérés sont dans `attachments/spip/`.
### 2. Exporter certaines tables de la base de données spip
1. Se connecter à la base mysql du site spip avec phpmyadmin
2. Successivement, sélectionner et exporter les tables suivantes en format `yaml` :
```bash
spip_articles -> spip_articles.yml # le contenu et les métadonnées des articles
spip_rubriques -> spip_rubriques.yml # permet de construire la table breve_id -> category et le contenu des rubriques
spip_breves -> spip_breves.yml # le contenu des brèves
spip_documents -> spip_documents.yml # permet de construire la table document_id -> document_path
spip_auteurs -> spip_auteurs.yml # permet de construire la table author_id -> author_name
spip_auteurs_liens -> spip_auteurs_liens.yml # permet de construire la table article_id -> author_name
```
2. Exporter la table globale du site en format `yaml`, par exemple dans le fichier `spip_site.yml`
### 3. Nettoyer l'export `yaml`
Depuis le répertoire de ce projet, lancer le script `yaml_cleaner.py` pour nettoyer l'encodage des caractères dans certains fichiers yaml :
Depuis le répertoire de ce projet, lancer le script `process_yaml.py` pour découper en sous fichiers yaml et nettoyer l'encodage des caractères :
```
python3 yaml_cleaner.py
python3 process_yaml.py spip_site.yml
```
Ce script produit les fichiers `spip_*_clean.yml`.
Ce script produit les fichiers `./spip_yml/spip_*_clean.yml`.
### 4. Explorer la structure des rubriques du site Spip
......@@ -63,5 +54,5 @@ rsync -av attachments/spip/ ../website/content/attachments/spip/
## Notes
- les balises html ne sont pas converties car elles sont supportées par la syntaxe markdown, seuls les champs `href` sont traités
- les balises html ne sont pas converties car elles sont supportées par la syntaxe markdown, seuls les champs `href` et `img` sont traités
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Split YAML file into separate files and clean them
"""
import argparse
import codecs
import itertools as it
import os
import shutil
from yaml_cleaner import clean_yaml
SPIPFILES = "spip_auteurs.yml", \
"spip_auteurs_liens.yml", \
"spip_articles.yml", \
"spip_breves.yml", \
"spip_documents.yml", \
"spip_rubriques.yml"
OUTPUTDIR = "spip_yml"
def reset_output_directory():
"""Erase existing output files and create empty output directories"""
if os.path.exists(OUTPUTDIR):
print(f">>> Cleaning output directory: ./{OUTPUTDIR}/")
shutil.rmtree(OUTPUTDIR)
os.makedirs(OUTPUTDIR)
def split_yaml(yml_filename):
"""Split Spip YAML file into SPIPFILES"""
print(f">>> Splitting {yml_filename} into:")
with codecs.open(yml_filename, "r", encoding='utf-8', errors='ignore') as yml_file:
filename = ''
filepath = ''
for key, group in it.groupby(yml_file, lambda line: line.startswith('# ')):
if key:
filename = f"{list(group)[0].split('.')[1].strip()}.yml"
filepath = os.path.join(OUTPUTDIR, filename)
if not key and filename in SPIPFILES:
print(f" {filename}")
content = "".join(list(group))
with open(filepath, 'w') as yml_subfile:
yml_subfile.write(content)
def clean_yaml_files(yml_files):
"""Clean SPIPFILES"""
for yml_filename in yml_files:
yml_filepath = os.path.join(OUTPUTDIR, yml_filename)
clean_yaml(yml_filepath)
def parse_cl_args():
"""Parse command line arguments"""
parser = argparse.ArgumentParser(description="Split and clean Spip YAML file")
parser.add_argument('spipfile', metavar='spipfile', type=str, help="Spip YAML filename")
return parser.parse_args()
if __name__ == '__main__':
args = parse_cl_args()
reset_output_directory()
split_yaml(args.spipfile)
clean_yaml_files(SPIPFILES)
......@@ -381,12 +381,13 @@ class Website:
DEFAULT_AUTHOR = "Webmaster"
ATTACHMENTS_PREFIX = "attachments/spip/"
RUBRIQUES_FILENAME = "spip_rubriques_clean.yml"
ARTICLES_FILENAME = "spip_articles_clean.yml"
BREVES_FILENAME = "spip_breves_clean.yml"
DOCUMENTS_FILENAME = "spip_documents.yml"
AUTHORS_FILENAME = "spip_auteurs_clean.yml"
AUTHORS_LINKS_FILENAME = "spip_auteurs_liens.yml"
SPIPDIR = "spip_yml"
RUBRIQUES_FILENAME = os.path.join(SPIPDIR, "spip_rubriques_clean.yml")
ARTICLES_FILENAME = os.path.join(SPIPDIR, "spip_articles_clean.yml")
BREVES_FILENAME = os.path.join(SPIPDIR, "spip_breves_clean.yml")
DOCUMENTS_FILENAME = os.path.join(SPIPDIR, "spip_documents.yml")
AUTHORS_FILENAME = os.path.join(SPIPDIR, "spip_auteurs_clean.yml")
AUTHORS_LINKS_FILENAME = os.path.join(SPIPDIR, "spip_auteurs_liens.yml")
@staticmethod
def _load_and_clean_yaml(filename):
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment