Expression régulière : solution de fortune pour sauvegarder les données de son blog

Publié le 24 février 2008 par Samuel Martin

Un premier billet relatait un problème d'export de données que je rencontre actuellement. Gandi via l'interface de dotclear2.0 ne permet pas un export  des données images, sons, vidéos... Si vous lisez mon premier article vous vous rendrez compte qu'il existe une solution avec wget en utilisation unique. Cette dernière nécessite du temps, et n'est pas vraiment idéale ! C'est alors qu'intervient les expressions régulières. Si contrairement à moi votre export(Menu Import/Export de dotclear) textuelle fonctionne vous pouvez utiliser le code PHP ci-dessous.

Les expressions régulières vont permettre d'extraire toutes les urls de type http://monsite.fr/public/toto.jpg ou /public/titi.png. Le script php parcourt votre fichier et stocke dans un tableau l'ensemble des urls. Une fois les urls collectées on demande à wget de télécharger chaque image. C'est rapide et évite à wget de parcourir tout votre site.

Télécharger une sauvegarde de votre blog

Depuis l'interface admin de dotclear:
  • Rubrique Import/Export > onglet Export > Bouton export 
  • Vous récupérez un fichier xxx.txt

Préparer votre sauvegarde .txt

Cette partie est pour le moment obligatoire, le script php actuel n'est pas parfait.
  • Ouvrir votre sauvegarde dans un éditeur (geany par exemple)
  • Rechercher/Remplacer toutes les occurences \" par "
  • Effacer tout le début du code jusqu'à : ...post_open_tb,nb_comment,nb_trackback]

Copier le script gandi.php

  • Placer le script gandi.php au même endroit que votre sauvegarde
  • Lancer la commande php gandi.php votrefichier.txt > gandibackup.txt
  • Un nouveau fichier gandibackup.txt est créé, il suffit d'appeler wget -i gandibackup.txt pour télécharger toutes vos données
Ce script peut être évidemment fortement optimisé, le mieux serait de mettre un formulaire en ligne afin de permettre à tout le monde de charger son backup et récupérer en sortie une liste de fichiers à télécharger.