Le site de tickets de Bibliomondo utilise le logiciel libre Redmine (entre parenthèses, de tous les systèmes de nos prestataires, c’est celui que je trouve le plus pratique à utiliser).

L’interface web est déjà très fonctionnelle, avec notamment la possibilité de se créer des rapports personnalisés. Par exemple, j’ai créé un rapport affichant les tickets qui me sont assignés et dont la dernière mise à jour date de plus de 30 jours. Je regrette juste de ne pas pouvoir programmer un export automatique à intervalle régulier 😦

Mais on peut aussi utiliser l’API Redmine pour récupérer, voire créer des tickets ! C’est une API REST tout ce qu’il y a de plus standard, avec en sortie du JSON ou de l’XML.

Il faut au préalable récupérer sa clé d’API dans intime, on le trouve dans « Mon compte », dans le menu de droite : « Clé d’accès API > Afficher »

La façon la plus simple d’interroger l’API est d’utiliser cURL.

Par exemple, pour récupérer la liste de tous les tickets, au format JSON

curl -X GET --header 'Accept: application/json' 'https://intime.bibliomondo.com/issues.json?key=XXXXXXXXXXXXXXXX'

Attention : par défaut, une limite de 25 semble être appliquée, pour l’enlever, il suffit d’ajouter « &limit=XXX » à la fin de l’URL (en mettant 500 ou 1000, ça devrait être bon)

On peut utiliser plusieurs filtres :

  • par projet : « &project_id=XX »
  • par statut (nouveau, en cours, résolu…) : « &status_id=XX »
    NB : vous pouvez voir la liste des statuts possibles avec :

    curl -X GET --header 'Accept: application/json' 'https://intime.bibliomondo.com/issue_statuses.json?key=XXXXXXXXXXXXXXXXXx' 
  • par tracker (anomalie, évolution…) : « &tracker_id=XX »
    idem, vous pouvez voir la liste des trackers possibles avec :

    curl -X GET --header 'Accept: application/json' 'https://intime.bibliomondo.com/trackers.json?key=XXXXXXXXXXXXXXXXXx' 
  • par personne à qui est assigné le ticket : « &assigned_to_id=XX »
  • par date de création : « &created_on=%3DAAAA-MM-JJ » (NB : la doc recommande d’encoder en hexadécimal les opérateurs de comparaison de date : %3D pour =, %3E pour >, %3C pour <)
  • par date de modification: « &updated_on=%3DAAAA-MM-JJ »
  • etc

On peut évidemment trier. Exemple : « &sort=category:desc,updated_on »

Je vous renvoie à la documentation de l’API pour plus de détail.

Voici un exemple de ce qu’on peut récupérer :

<?xml version="1.0" encoding="UTF-8"?>
<issues total_count="4" offset="0" limit="25" type="array">
<issue>
<id>XXX</id>
<project id="XXX" name="PortFolio - Lille"/>
<tracker id="1" name="Anomalie"/>
<status id="1" name="Nouveau"/>
<priority id="3" name="Bas"/>
<author id="XXX" name="XXX"/>
<subject>Bug redmine ?</subject>
<description>XXX</description>
<start_date>2018-05-31</start_date>
<due_date/>
<done_ratio>0</done_ratio>
<is_private>false</is_private>
<estimated_hours/>
<custom_fields type="array">
<custom_field id="1" name="Banque d'heure">
<value>0</value>
</custom_field>
<custom_field id="5" name="Produit">
<value></value>
</custom_field>
<custom_field id="7" name="#IncidentSupport">
<value></value>
</custom_field>
<custom_field id="8" name="#Mantis">
<value></value>
</custom_field>
<custom_field id="17" name="Versions">
<value></value>
</custom_field>
<custom_field id="20" name="Commentaire Projet">
<value></value>
</custom_field>
<custom_field id="22" name="Retour">
<value></value>
</custom_field>
<custom_field id="25" name="Pays">
<value>France</value>
</custom_field>
</custom_fields>
<created_on>2018-05-31T13:37:01Z</created_on>
<updated_on>2018-05-31T13:37:01Z</updated_on>
<closed_on/>
</issue>
</issues>

On peut ainsi imaginer de planifier une tâche cron qui chercherait à intervalle régulier les tickets qui n’ont pas eu de réponse depuis X jours, et qui les enverrait par mail.

Le seul problème, c’est que l’API renvoie forcément tous les champs des tickets, il n’y a pas moyen de demander juste le numéro et le titre par exemple. Il faut donc ensuite parser le JSON ou l’XML.

Je privilégierais alors l’XML, cela me semble plus facile à parser.


On pourrait aussi afficher une page html plutôt que d’envoyer un mail. Il suffit d’utiliser php_curl :

<?php
// Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://intime.bibliomondo.com/issues.json?key=XXXXXXXXXXXXXX");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
$headers = array();
$headers[] = "Accept: application/json";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
print_r($result) ;
?>

 

 

 

Publicités