Auto-blog, VroumVroumBlog et effet Streisand
Suite à ce billet de SebSauvage, j'ai trouvé cette idée des AutoBlogs excellente, du coup j'ai pas pu résister, vous me connaissez ! Je m'y suis attelé ce midi pour reprendre le code de VroumVroumBlog et lui donner une cure de jeunesse et voilà j'ai tout réécrit au final !
Voici donc VroumVroumBlog 0.2, complètement nouveau et tout beau ! Il reprends les idées et certains trucs de la version de Sebsauvage :
- Très simple : un seul fichier à copier, un seul fichier à configurer pour que ça marche
- Gestion de ATOM 1.0 / RSS 2.0 en entrée
- Recopie automatiquement les articles du flux source dans sa base de données
- Recopie automatiquement les images liées dans les articles du flux source
- Re-publication des articles dans un flux RSS 2.0
- Clonage aisé !
Mais ma version ajoute :
- Utilisation de SQLite3 comme base de données plutôt qu'un fichier sérialisé (permet d'améliorer les performances)
- SQLite3 est normalement installé par défaut partout, mais sinon, sous debian/ubuntu : apt-get install php5-sqlite3
- La base de données peut être téléchargée et directement réutilisée avec un autre logiciel
- Code objet propre, codé pour PHP 5.3
- Gestion de RSS 1.0 / RDF en entrée en plus
- Recherche performante full-text !
- 850 lignes de code (oui je l'ai un peu fait grossir, mais au final ça ne fait que +9Ko par rapport à la version 0.1.126)
- Toujours un seul fichier unique, et aucune dépendance
- Séparation des bases de données de recherche (n'est utile que localement) et d'articles (utile à cloner)
- Possibilité de traduire l'interface
- Possibilité de faire une "ferme" d'auto-blogs avec un seul fichier à maintenir
- Possibilité d'utiliser des rewrite-rule pour faire de jolies URLs (facultatif)
- Pagination plus évoluée
- Possibilité d'indiquer plusieurs domaines pour le miroir des images/médias
- Recherche des médias dans les tags image (src) et dans les liens (href), ainsi par exemple un PDF mis en lien et se trouvant sur un domaine autorisé sera aussi recopié
- Gestionnaire réseau plus solide avec timeout pour éviter des attentes inutiles
- Gestion des erreurs en cas de flux XML invalide
- Gestionnaire d'exceptions et d'erreurs propre
- Rétro-compatible avec les fichiers de configuration des version 0.1.XXX (mais pas avec les données)
Téléchargement et installation
C'est pas tout ça, mais on commence où ? Et bien avec une démo qui n'est rien d'autre que l'auto-blog de Sebsauvage : http://autoblog.kd2.org/sebsauvage.net/
Pour télécharger le code source : http://autoblog.kd2.org/source.txt
Un fichier de configuration d'exemple (pour ce blog), commenté : http://autoblog.kd2.org/vvb.ini
Pour installer : télécharger le code source, renommer ce code source en index.php, télécharger le fichier de configuration, le modifier selon ses besoins, envoyer ces deux fichiers dans un nouveau répertoire que l'on créera chez son hébergeur favori. Ensuite se rendre à l'adresse du blog, ça fera tout tout seul comme un grand.
Recherche full-text
Il est désormais possible de faire des requêtes complexes dans la recherche du blog, par exemple :
Comment traduire l'auto-blog en français ?
Simple, télécharger ce fichier : http://autoblog.kd2.org/config.txt, le renommer en config.php et le placer dans le même répertoire que index.php.
Comment avoir de jolies URLs
Pour avoir de jolies URLs comme http://autoblog.kd2.org/sebsauvage.net/Oyez-Oyez par exemple, il vous faut créer un fichier .htaccess dans le répertoire de votre auto-blog, contenant :
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*) /sebsauvage.net/index.php?$1 [QSA,L]
Évidemment dans votre cas il faudra remplacer /sebsauvage.net/ par le bon répertoire où vous avez mis votre auto-blog. La deuxième étape est de rajouter ou d'éditer le fichier config.php de votre auto-blog et d'y placer :
<?php define('LOCAL_URI', ''); ?>
C'est tout.
Comment faire une ferme d'auto-blogs ?
Encore une fois c'est simple. Imaginons que vous ayé créé http://bohwaz.net/streisand.me/ pour y mettre plein de blogs automatiques. Vous allez télécharger le code source ci-dessus, le renommer en autoblog.php et le mettre dans ce répertoire. Dans ce même répertoire vous mettez aussi un fichier config.php contenant :
<?php define('ROOT_DIR', dirname($_SERVER['SCRIPT_FILENAME'])); ?>
Enfin, pour chaque blog que vous voulez "auto-recopier", vous créez un nouveau répertoire, par exemple "sebsauvage", et vous mettez dedans un fichier vvb.ini comme si vous installiez un auto-blog seul, mais au lieu de mettre le code source dans index.php, vous ne mettez dans index.php que ça :
<?php require_once dirname(__DIR__) . '/autoblog.php'; ?>
Vous pouvez faire comme moi et mélanger ces trois recettes afin d'avoir une ferme avec de jolies URLs et une interface en français.
EDIT du 18 juillet 2011 : une version 0.2.4 est désormais dispo, corrigeant plusieurs problèmes et ajoutant quelques petits trucs, merci à tous ceux qui m'ont signalé les bugs et aidé à les corriger :-)
Edit 26 août 2012 : il existe des forks de mon VroumVroumBlog par Mitsu : version HTML5 et par Hoaro : Ferme autoblog"
Arthur
Bravo, beau boulot !
Je teste ça dans la journée.
Sinon, petite correction rapide dans ton exemple : ancien et récent sont inversés dans la pagination.
BohwaZ
Arf merci c'est corrigé, petite inversion de logique, ça arrive quand on code tard ^^
Kevin
Voilà, j'ai ajouté ton blog sur mon site : mirror.kevinvuilleumier.n...
Merci pour ce script très précieux.
BoboTiG
Excellent travail !
Je te propose un p'tit patch : pastebin.com/ahXfvcfx
En outre, il ajoute une règle CSS pour les balises pre ; "améliore" le rapatriement des médias (pas moyen de faire fonctionner @copy(...) ; fixe la constante LOCAL_URI (lors de l'inclusion de autoblog.php du dossier parent, les liens des numéros de pages sont mauvais) ; idem pour $path, chez moi il manque un slash.
À noter que je suis sous Debian GNU/Linux testing avec apache2, SQLite 3 et PHP 5, sans les modifs de la constante, de $path et de @copy => pas d'images ni de pagination correcte.
En tout cas très bon boulot :)
Bonne continuation.
BohwaZ
@BoboTiG j'ai répondu à ton patch sur ton adresse mail, j'ai appliqué certains trucs et sorti une 0.2.3 avec ces modifs.
Steph
Mon provider n'est pas en 5.3.0, domage
Gilles
La ferme a du mal chez moi : abgw.alwaysdata.net/autob...
Il manque le vvb.ini ?
Ma structure : autoblog.php à la racine + htaccess pour les url + config.php et un sousrép avec vvb.ini du blog + config.php qui contient la trad + index.php qui renvoi sur autoblog
BohwaZ
Hello, il faut se rendre à l'adresse abgw.alwaysdata.net/répertoire/ ou "répertoire" est le nom du répertoire qui contient vvb.ini/index.php d'un blog à recopier (par exemple chez moi : autoblog.kd2.org/sebsauvage.net/).
Enky
Bonjour,
je trouve l'initiative vraiment bonne alors je participe ;)
J'ai décider de faire une ferme.
J'ai un petit problème, j'ai une configuration qui est peut être exotique, je m’explique :
J'ai un Nginx en Reverseproxy devant un apache.
Mon RP redirige vers /urlinterne/czh.biz/autob...
Et le document root de mon apache est le répertoire juste au dessus de /czh.biz "www" (un petit dessin /www/czh.biz/autoblog/)
Le premier blog que je réplique : sebsauvage.net
ce qui donne /czh.biz/autoblog/sebsauvage.net chez apache.
et autoblog.czh.biz/sebsauva... coté publique
Jusque la c'est simple ;)
Donc la ou ça merdoi c'est que je me retrouve avec des autoblog.czh.biz/czh.biz/...
Oui regardez le vilain "/czh.biz/autoblog/sebsauvage.net" qui remonte dans l'url ... c'est caca hein !
Une idée ? par ce que tous les autres sites que j’hébergent ne me font pas ça !
Enjoy.
Merci
BohwaZ
Hello, effectivement j'ai pas trop l'habitude de ce genre de config. Tu peux mettre la ligne suivante dans un nouveau fichier dans le même répertoire et me recopier ce que ça met comme résultat ?
Enky
Alors comme je savais pas quel repertoire j'ai fait les deux :)
Racine :
Array ( snip )
Un autoblog :
Array ( snip )
Merci
BohwaZ
OK bon j'explique un peu le souci : le script n'a pas accès à la "vraie" URL servie en front par ton nginx, on peux le voir ici :
Ça c'est la requête qui est faite au script, donc le script quand il essaye de construire une URL il se dis "je suis dans /czh.biz/autoblog/sebsauvage.net/", et pas "je suis dans /autoblog/sebsauvage.net/" car il n'a aucun moyen de le savoir automatiquement.
Mais c'est pas grave, j'ai quand même une solution pour ton cas, il suffit de forcer l'URL au lieu de laisser VroumVroum la découvrir automatiquement. Pour cela, mettre dans ton config.php :
Cela devrait désormais fonctionner au poil :-)
Enky
Presque, maintenant j'ai :
autoblog.czh.biz/sebsauva...
Il y a toujours un sebsauvage.net en trop, mais c'est deja beaucoup mieux ;)
BohwaZ
Pardon j'ai oublié un bout ;-)
Enky
Hahaha, trop fort ;)
Merci, ça fonctionne nickel.
Bon maintenant je prépare un index et une liste de blog.
Encore merci pour le debug et la rapidité de t'es réponses.
PS : que la question de validation soit toujours la même c'est normal ?
BohwaZ
Oui c'est normal, ça marche très bien comme ça :)
Gilles
Tout fonctionne ou presque : abgw.alwaysdata.net/sebsa...
J'ai mis le .htaccess que tu fournis mais ça donne pas la bonne URL.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*) index.php?$1 [QSA,L]
Au final la bonne URL serait : abgw.alwaysdata.net/sebsa... hors l'index enlève le "index.php" donc comment faire pour une bonne URL sans aucune référence à "index.php" ?
Merci :)
Sinon Seb a refait une sortie 0.1.29 avec une lecture possible de laquadrature (balise description machin) sur son blog :)
BohwaZ
Essaye : /index.php au lieu de index.php dans ta rewrite rule. Ou alors j'ai pas compris ton histoire de "bonne URL" ?
Kevin
J'ai remarqué un souci : le script ne met pas à jour un article lorsqu'il a été édité, c'est bien dommage. Par exemple, le dernier article de SebSauvage a été mis à jour deux fois, mais le script n'a toujours que la première version.
BohwaZ
Kevin : je regarde ça demain, merci :)
BohwaZ
Voilà qui est corrigé (et optimisé aussi) dans la 0.2.5 qui est dispo.
BoboTiG
Du coup petite coquille : ( ! ) Fatal error: Call to undefined method VroumVroum_Blog::checkArticle() on line 437.
Gilles
Bon alors pour le HTACCESS : sur AlwaysData ;)
abgw.alwaysdata.net/sebsa... => pas de HTACCESS et URL "propre" sans index.php mais en fait il subsiste le point d'interrogation.
Comment le supprimer ?
Est-ce normal si je n'ai pas de "index.php" et que ça marche alors que je n'ai pas mis de HTACCESS ?
Voilà :)
Gilles
@22 : idem mais ligne 432
BoboTiG
Ah oui 432 :D
BohwaZ
Merci corrigé dans la 0.2.6 ;-)
Kevin
Merci, ça fonctionne au poil ;)
Gilles
Nickel :)
Remarque : en fait, sans htaccess, les URL sont SEO déjà...
Sioban
Hum, j'ai quelques soucis avec le config.txt pour passer en français, mais ce n'est pas bien grave.
Comme je gère des alias, le .htaccess ne convient pas, il me faut des <location></location>, mais bon c'est un détail que j'ai géré.
En revanche ce qui serait pas mal pour les fermes d'autoblog, c'est un index.php maître qui référence automatiquement les autoblogs présents dans des sous-répertoires (en reprenant les infos des vvb.ini par exemple). Mais moi, je sais faire que du statique...
PostBlue
Comme le commentaire précédent, je déplore un peu la disparition d'un index.php automatique à l'instar de celui de Sebsauvage.
Je vais me pencher dessus, ça ne doit pas être bien compliqué, mais c'est un peu la pierre angulaire, là ça fait "pas fini".
Sinon, beau travail !
BohwaZ
Pour la liste automatiques des auto-blogs, mettre dans le répertoire parent le fichier suivant : http://svn.kd2.org/svn/misc/apps/autoblog/list.php (et le renommer en index.php)
memiks
Bonjour,
J'ai développé une version de l'autoblog qui gère curl pour la récupération des fichiers.
J'ai aussi changé le retour de la fonction afin qu'elle renvoie true ou false pour gérer le changement des urls (l'url restait sur l'ancien contenu)...
Si cela intéresse quelqu'un :
memiks.fr/autoblogs/autob...
BohwaZ
Juste une question : qu'est-ce qu'apporte curl ici ?
memiks
Et bien j'ai du utiliser curl pour pouvoir récupérer les ressources d'un blog en local car fgetsopen n'en voulait pas (des .webm).
De plus curl peut être utilisés pour passer des proxy https par ex.
Et il est plus rapide il me semble.
Anonyme
Très bon projet, que je vient de découvrir :)
Néanmoins sur la version actuelle, certains sites plantent sur leur update (et leur affichage), en particulier lorsqu'une ressource n'est pas trouvée (erreur 404).
Le probleme semble venir d'une exception non gérée ligne 563 de autoblog.php. Il y a bien un try-catch a cet endroit, mais malgrès le commentaire ("// Ignore copy errors"), l'exception est renvoyé.
Commenter la ligne 568 ("throw $e;") semble corriger le problème :)
Bonne continuation :)
BohwaZ
Effectivement, sûrement un oubli d'une ligne de debug au commit. Voilà qui est corrigé, merci !