Blog / Article #29
Générer du faux texte dynamiquement avec l'API Bacon Ipsum

star

22 Octobre 2013

Générer du faux texte dynamiquement avec l'api bacon ipsum

bacon ipsum et Loripsum api

Créer dynamiquement des articles avec du faux texte

Je viens d'avoir des faux articles à créer, avec du faux texte en pagaille, pour voir un peu à quoi ressemblerait un blog une fois rempli. J'avais pour habitude d'aller copier mes paragraphes sur des sites basiques comme lipsum.com ou un peu plus modernes comme fillerati.com ou picksumipsum, et de revenir les coller dans mon champ texte à chaque article que je devais insérer. C'est valable quand on a relativement peu d'articles à enregistrer, et qu'on le fait donc à la main, par contre dès qu'il s'agit d'automatiser la chose , pour des quantités plus conséquentes, jusqu'ici je me codais une petite méthode statique qui allait chercher aléatoirement un certain nombre de mots contenus dans une chaîne, et ça faisait l'affaire, mais bon...

API Lorem Bacon Ipsum

En cherchant une seconde une API qui renvoie du faux texte à la pelle, je suis tombé sur baconipsum.com, qui propose de vous fournir tout ce qu'il peut en mots latins, mais aussi en viandes de toutes sortes, tout y passe, du bacon de maman au corned beef de tonton ! Je ne suis pas un viandar, je reste donc insensible a l'appel de la bidoche, ce générateur me convient donc parfaitement, ou plutôt son API, car c'est avant tout ce que je suis venu chercher...

L'API Bacon Ipsum est simple a utiliser, elle ne demande qu'une URL et quelques paramètres (optionnels pour certains) pour vous renvoyer du texte sur mesure, plein de sang par contre, contexte oblige^^.

Les paramètres sont les suivants :

  • typeall-meat pour de la viande seulement ou meat-and-filler pour de la viande mélangée à du Lorem Ipsum traditionnel
  • paras: nombre de paragraphes, réglé à 5 par défaut (optionnel)
  • sentences: nombre de phrases (ce paramètre écrase le nombre de paragraphes)
  • start-with-lorem: 1 ou 0 . Débuter le premier paragraphe avec 'Bacon ipsum dolor sit amet’ ou pas (optionnel)

Ce qui peut donner une URL comme celle ci 
http://baconipsum.com/api/?type=meat-and-filler
ou comme celle la
https://baconipsum.com/api/?type=all-meat&sentences=1&start-with-lorem=1

L'application vous renverra un json contenant un joli tableau avec vos paragraphes ou vos phrases. C'est vraiment simple à utiliser. Du coup j'ai codé un petit script php sans prétentions permettant de faire le boulot.

Un petit script php

Dans un premier temps je renseigne quelques paragraphes dans mon tableau, puis je boucle dessus pour obtenir l'URL qui permettra a l'API de savoir ce qu'elle doit me renvoyer. Ensuite je récupère le colis contenant un json, sur le quel je boucle pour extraire les paragraphes désirés, et après.. on en fait ce qu'on veut !

$url = 'http://baconipsum.com/api/?';

$params = array(
    'type' => 'all-meat',
    'paras' => 6,
    'start-with-lorem' => true,
    //'sentences' => 2
);

$counter = 0;

foreach ($params as $param => $value) {
    $url .= $param . '=' . $value;
    if (++$counter < count($params))
        $url .= '&';
}

$json_data = file_get_contents($url);
$bacon_data = json_decode($json_data);

//var_dump($bacon_data);

$p_tag = "<p>%s</p>\n";
$html_out = '';
foreach ($bacon_data as $p) {
    $html_out .= sprintf($p_tag, $p);
}

echo $html_out;

Dans le principe on peut créer une méthode statique ou une fonction basique qui permettra d'appeler cette portion de code a chaque fois qu'on aura besoin de remplir des faux articles, je pense notamment au fameuses fixtures de Symfony2, puisque c'est pour elles que j'ai eu besoin de créer ce petit script.
Désormais mes articles seront remplis de viandes diverses dès le début ! Je n'ai pas prévu de bosser pour des végétariens mais si le cas se présente, je ferais l'effort de modifier mon générateur avant la présentation aux clients promis^^


Un peu plus tard....
En cherchant un peu plus, je suis tombé sur une autre API sympathique du même genre, qui propose davantage d'options et qui répond un peu plus vite que la précédente (chez moi a l'instant T). Il s'agit de  http://loripsum.net/, un site à la première apparence assez froide mais qui propose un retour sur investissement plus que satisfaisant !

J'ai eu le temps de bricoler une petite classe qui va bien, elle ramène un code HTML aléatoire assez complet, beaucoup plus que le simple Lorem/Bacon Ipsum pour le coup, car il y a des en-têtes, des listes ordonnées ou pas, des block-quotes, des liens, du gras, de l'italique etc etc..
C'est vraiment bien foutu et ça donne une page HTML pleine de tout, assez réelle quoi !

set_options(array(8,'code','bq','ul','link','long','headers','ol','decorate','prude'));            
        }
    }

    public function set_options(array $options) {
        foreach ($options as $option) {
            if (in_array($option, $this->get_available_options()) || is_numeric($option)) {
                $this->url_params .= '/' . $option;
            }
        }
    }

    public function get_stuff() {
        return file_get_contents($this->url . $this->url_params);
    }

    private function get_available_options() {
        return array(
            'short', 'medium', 'long',
            'verylong', 'decorate', 'link',
            'ul', 'ol', 'dl', 'bq', 'code',
            'headers', 'allcaps', 'prude', 'plaintext'
        );
    }
}

Elle s'utilise avec 2 lignes de code, et c'est tres simple a coller partout donc. Voici un exemple d'utilisation :

Class machin {
    private $Lorem;
    
    public function fixturation(){
        foreach($articles as $article){
            $article->setContent($this->get_lorem());
        }
    }
    //....
    private function get_lorem(){
        if($this->Lorem == null)
            $this->Lorem = new Loripsum(true);
        return $this->Lorem->get_stuff();
    }
    //...

J'ai juste ajouté une méthode get_lorem() qui va instancier l'objet dans un premier temps, puis l'utiliser si il existe déjà pour renvoyer la chaîne qui va bien, puisque c'est ce qu'on a envie de faire à la base ! Essayez chez vous, vous verrez c'est assez efficace je trouve ! On peut donc jongler avec Bacon Ipsum et Loripsum selon ce qu'on veut faire, à noter que les deux solution sont assez lente si on boucle plus de 35-50 fois... En général 15-30 articles suffisent pour avoir une bonne impression de la chose mais bon. Je n'ai pas chronométré mais il faut quand même y penser avant de lancer une itération de 28 745 faux articles en voulant jouer à Korben, c'est un coup à dormir devant, ou a planter le bouzin, vous êtes prévenus ^^ ! 


J'ai mis un bouton +1 en dessous je sais pas si il marche...

Auteur de l'article
Retour a la liste