événements culturels

visualisations et représentations

Automatisez la publication de vos événements sur projet-ode - 1ère partie

Avec ce super projet-ode, la tentation était grande de faire joujou avec l'API fournie. Au programme «j'ai testé pour vous» je vais vous raconter comment vous pouvez vous servir du webservice (ou API) pour publier automatiquement vos événements dans la base de donnée projet-ode.

En effet, à partir du moment où vous avez un site internet et où vos événements sont stockés dans une base de donnée, vous pouvez exploiter celle-ci pour autre chose qu'afficher votre contenu sur votre site. Par exemple… envoyer directement et automatiquement votre contenu à projet-ode.

En avant donc pour la démonstration : utiliser l'API fournie par projet-ode pour poster les événements listés sur lereacteur.info à partir de la base de données du site lereacteur.info.
Comme je ne vais pas réécrire ce que les autres ont déjà fait bien mieux que moi, je vais me servir de la librairie Open Source Buzz permettant de faciliter l'appel à l'API REST. 
Un exemple de code[1] qui permet d'enregistrer un événement dans la base de données du projet-ode.

Deux remarques :

  • L'url de l'API à appeler est en https et non en http.
    Ce qui donne https://projet-ode.org/api/v1/events
    au lieu de http://projet-ode.org/api/v1/events
  • Pour utiliser l'API vous devrez vous authentifier avec une clé que vous trouverez sur la page webservices.

Les champs obligatoires sont peu nombreux (4) :

  1. Un Titre
  2. Une date et une heure de début
  3. Une date et une heure de fin
  4. L'organisateur de l'événement

Mais vous avez beaucoup d'autres possibilités à disposition comme les détails nécessaires à la réservation, la communication et la possibilité de donner des catégories et des mots-clés.
Vous pouvez voir la liste ici : projet-ode.org/webservices/#event-post-parameters

Évidemment, le bout de code donné en exemple, même s'il marche parfaitement ne va pas s'éxécuter tout seul quand on le sifflera. Il faut l'entourer de gentils sbires qui vont exécuter quelques tâches du genre :

  1. chercher quels sont les derniers événements créés et non publiés sur projet-ode
  2. Mettre en forme les informations avant de les envoyer
  3. Vérifier que l'envoi s'est bien passé
  4. Enregistrer l'identifiant retourné par projet-ode
  5. Mettre en place une exécution automatique du code toute les heures (par exemple)

Une fois que le code sera installé et paramétré sur votre site web, l'export vers projet-ode se fera automatiquement dès qu'un nouveau contenu sera publié chez vous. Über cool !

Pour vous donner une idée, j'ai publié les 10 dernières expositions en date en Pays de la Loire sans avoir besoin de saisir une seule donnée.

Ce mécanisme permet même de gérer les modifications d'un événement : le code peut surveiller les événements modifiés sur votre site web et changer ceux-ci dans la base projet-ode. J'en parlerai dans un prochain post.

J'espère que cela vous donnera une idée un peu plus précise de ce qu'on peut faire avec projet-ode. N'hésitez pas à me poser des questions sur la mailing-liste s'il manque des infos, j'essaierai de vous donner une réponse pertinente !

Exemple de code  ↑

use Buzz\Client\Curl;
$api_url = 'https://projet-ode.org/api/v1/events';
$api_key = 'Token ma_cle_api';

$client = new Curl();
$client->setVerifyPeer(false);
$browser = new Buzz\Browser($client);

$response = $browser->post(
    $api_url,
    array(
        'Authorization' => $api_key,
        'Content-Type' => 'application/vnd.collection+json'
    ),'
    {"template": 
        { "data": 
            [
                {"name": "title", "value": "un titre"}, 
                {"name": "organiser", "value": "lereacteur.info"}, 
                {"name": "start_time", "value": "2014-04-25T00:00:00+01:00"}, 
                {"name": "end_time", "value": "2014-04-26T00:00:00+01:00"}
            ]
        }
    }
    ');

echo $response->getContent();
echo $response->getStatusCode();

J'ai volontairement simplifié. Je détaillerai le reste dans un autre post