Récupérer des informations d'un livre par Google Books API
Je l'avoue, je suis un rat de bibliothèque. Je possède des tonnes de livres pour étancher ma curiosité et lorsqu'est venu le temps de faire un inventaire de tout ce que j'avais, la charge de travail me semblait simplement trop pénible. Pour la rendre plus motivante et pour accélérer la saisie des données, j'ai écrit un petit script PHP qui récupère l'information à l'aide de la clé ISBN unique qui se trouve à l'endos d'un livre et de l'API de Google Books. Aucune clé n'est nécessaire.
J'ai d'abord dressé la liste des codes ISBN en les récupérant sur Amazon car a) je m'en suis procuré beaucoup à partir de ce marchand et b) c'est plus simple de compiler les codes numériques par copier/coller du site web que de les sortir un par un de la bibliothèque (paresseux vous dites ?). Si vous préférez le faire à la main, l'ISBN peut être retrouvé facilement en regardant autour du code barre ou sur une des premières pages, au même endroit où se trouve la classification et le copyright.
Ensuite, j'ai créé une page PHP avec un formulaire HTML comprenant un seul champ de recherche pour l'ISBN. Une fois le formulaire soumis, une requête était faite à Google et je faisais apparaître le résultat pour pouvoir valider que c'était bien le livre recherché. D'un simple click sur un bouton et l'information était stockée dans une table de ma base de données SQL. J'ai même osé sauvegarder une copie de l'image sur le disque pour une utilisation future (vous trouverez les détails dans un billet semblable où j'expliquais comment récupérer une image sur Amazon).
Pour ce qui est du script PHP, la portion qui nous intéresse est celle-ci :
$isbn = isset($_POST['isbn']) ? $_POST['isbn'] : '';Résultat :
// ou si vous préférez hardcodé
// $isbn = '0061234001';
$request = 'https://www.googleapis.com/books/v1/volumes?q=isbn:' . $isbn;
$response = file_get_contents($request);
$results = json_decode($response);
if($results->totalItems > 0){
// avec de la chance, ce sera le 1er trouvé
$book = $results->items[0];
$infos['isbn'] = $book->volumeInfo->industryIdentifiers[0]->identifier;
$infos['titre'] = $book->volumeInfo->title;
$infos['auteur'] = $book->volumeInfo->authors[0];
$infos['langue'] = $book->volumeInfo->language;
$infos['publication'] = $book->volumeInfo->publishedDate;
$infos['pages'] = $book->volumeInfo->pageCount;
if( isset($book->volumeInfo->imageLinks) ){
$infos['image'] = str_replace('&edge=curl', '', $book->volumeInfo->imageLinks->thumbnail);
}
print_r($infos);
}
else{
echo 'Livre introuvable';
}
ArrayDeux astuces :
(
[isbn] => 0061234001
[titre] => Freakonomics
[auteur] => Steven D. Levitt
[langue] => en
[publication] => 2006-10-05
[pages] => 320
[image] => http://bks2.books.google.com/books?id=9O6-UWVfDP0C&printsec=frontcover&img=1&zoom=1&source=gbs_api
)
- il est parfois possible d'obtenir une image de plus grand format (lorsque disponible) en modifiant la valeur du paramètre zoom. Voici un exemple avec zoom 1 et la même image plus grande avec zoom 4
- je suggère de retirer de l'URL la paire clé/valeur "&edge=curl" car dans certains cas, l'URL de l'image retournée par Google contient ce paramètre qui applique un effet recourbé sur le coin inférieur droit de l'image