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
Merci bcp pour ce post : méthode ultra simple, super efficace !
Une version java aurait été le nirvana ;) mais je vais le faire moi-même (fainéant que je suis).
thx
shebu
Merci pour le sujet qui est très bien expliqué clair et précis
Je me permet d'ajouter qu'il serait judicieux d'ajouter l'argument country dans l'URL comme ceci
$request = 'https://www.googleapis.com/books/v1/volumes?country=FR&q=isbn:' . $isbn;
Car cela provoque quelque fois des erreurs suivant le type de serveur sur lequel nous nous trouvons, en l’occurrence pour moi sur un serveur OVH
Merci pour ce post.
Est-il possible d'utiliser cette portion de code dans une application iOS commerciale ?
Merci
Tout le code que j'écris sur mon blogue est libre de droit.
Pour ce qui est de l'inclusion dans une application iOS commerciale, tu dois respecter les termes d'utilisation de Google.
bonjour
bravo pour ce script très utile.
est il possible de récupérer d'autres infos (editions, genre).
merci
Bonjour. Super article, merci beaucoup ! La question du précédent internautes est très intéressantes.
Merci beaucoup pour ces quelques précieuses lignes de code ! Ça va m'être très utile ! :)
Bravo !
Pour la lecture https, j'ai contourné l'erreur de lecture avec la fonction ci-dessous et ça marche :
// http://stackoverflow.com/questions/1975461/file-get-contents-with-https
function getSslPage($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, false);
// curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
// ------------------------------
$isbn = "9782081602762";
$response = getSslPage('https://www.googleapis.com/books/v1/volumes?country=FR&q=isbn:' . $isbn);
... ensuite, le code proposé ci-avant