TigerZF
🌐Español

37.4. Usar la API de datos de Book Search

La API de datos de Google Book Search API permite a las aplicaciones cliente ver y actualizar contenido de Book Search en forma de feeds de la API de Google Data API.

Su aplicación cliente puede usar la API de datos de Book Search API para realizar búsquedas de texto completo de libros y recuperar información estándar de libros, calificaciones y reseñas. También puede acceder a las colecciones de bibliotecas y reseñas públicas de usuarios individuales. Por último, su aplicación puede enviar solicitudes autenticadas para permitir a los usuarios crear y modificar colecciones de bibliotecas, calificaciones, etiquetas, reseñas y otras entidades específicas de la cuenta.

Para más información sobre la API de datos de Book Search API, consulte la guía oficial para desarrolladores de PHP en code.google.com.

37.4.1. Autenticarse en el servicio Book Search

Puede acceder tanto a feeds públicos como privados usando la API de datos de Book Search API. Los feeds públicos no requieren ninguna autenticación, pero son de solo lectura. Si desea modificar bibliotecas de usuarios, enviar reseñas o calificaciones, o añadir etiquetas, entonces su cliente necesita autenticarse antes de solicitar feeds privados. Puede autenticarse usando cualquiera de dos enfoques: autenticación por proxy AuthSub o autenticación por nombre de usuario/contraseña con ClientLogin. Consulte la sección de autenticación en la Guía para desarrolladores de PHP para más detalles.

37.4.2. Buscar libros

La API de datos de Book Search API proporciona una serie de feeds que enumeran colecciones de libros.

La acción más común es recuperar una lista de libros que coincidan con una consulta de búsqueda. Para ello, crea un objeto VolumeQuery y lo pasa al método Books::getVolumeFeed().

Por ejemplo, para realizar una consulta por palabra clave, con un filtro sobre la visibilidad para restringir los resultados a libros de vista parcial o completa, use los métodos setMinViewability() y setQuery() del objeto VolumeQuery. El siguiente fragmento de código imprime el título y la visibilidad de todos los volúmenes cuyos metadatos o texto coinciden con el término de búsqueda "domino":

$books = new Zend_Gdata_Books();
$query = $books->newVolumeQuery();

$query->setQuery('domino');
$query->setMinViewability('partial_view');

$feed = $books->getVolumeFeed($query);

foreach ($feed as $entry) {
    echo $entry->getVolumeId();
    echo $entry->getTitle();
    echo $entry->getViewability();
}

La clase Query, y sus subclases como VolumeQuery, se encargan de construir URLs de feeds. El VolumeQuery mostrado arriba construye una URL equivalente a la siguiente:

http://www.google.com/books/feeds/volumes?q=keyword&min-viewability=partial

Nota: Dado que los resultados de Book Search son públicos, puede realizar una consulta de Book Search sin autenticación.

Estos son algunos de los métodos más comunes de VolumeQuery para establecer parámetros de búsqueda:

setQuery(): Especifica un término de consulta de búsqueda. Book Search busca en todos los metadatos de libros y el texto completo de los libros que coincidan con el término. Los metadatos del libro incluyen títulos, palabras clave, descripciones, nombres de autores y temas. Tenga en cuenta que cualquier espacio, comilla u otra puntuación en el valor del parámetro debe estar escapado para URL (Use un signo más (+) para un espacio). Para buscar una frase exacta, encierre la frase entre comillas. Por ejemplo, para buscar libros que coincidan con la frase "spy plane", establezca el parámetro q a %22spy+plane%22. También puede usar cualquiera de los operadores de búsqueda avanzada compatibles con Book Search. Por ejemplo, jane+austen+-inauthor:austen devuelve coincidencias que mencionan (pero no están escritas por) Jane Austen.

setStartIndex(): Especifica el índice del primer resultado coincidente que debe incluirse en el conjunto de resultados. Este parámetro usa un índice basado en uno, lo que significa que el primer resultado es 1, el segundo resultado es 2 y así sucesivamente. Este parámetro funciona junto con el parámetro max-results para determinar qué resultados devolver. Por ejemplo, para solicitar el tercer conjunto de 10 resultados—resultados 21-30—establezca el parámetro start-index a 21 y el parámetro max-results a 10. Nota: Esto no es un mecanismo general de cursor. Si primero envía una consulta con ?start-index=1&max-results=10 y luego envía otra consulta con ?start-index=11&max-results=10, el servicio no puede garantizar que los resultados sean equivalentes a ?start-index=1&max-results=20, porque podrían haberse producido inserciones y eliminaciones entre las dos consultas.

setMaxResults(): Especifica el número máximo de resultados que deben incluirse en el conjunto de resultados. Este parámetro funciona junto con el parámetro start-index para determinar qué resultados devolver. El valor predeterminado de este parámetro es 10 y el valor máximo es 20.

setMinViewability(): Permite filtrar los resultados según el estado de visibilidad de los libros. Este parámetro acepta uno de tres valores: 'none' (el predeterminado, que devuelve todos los libros coincidentes sin importar la visibilidad), 'partial_view' (que devuelve solo libros que el usuario puede previsualizar o ver en su totalidad), o 'full_view' (que devuelve solo libros que el usuario puede ver en su totalidad).

37.4.2.1. Búsqueda de marca compartida con socios (Partner Co-Branded Search)

Google Book Search proporciona la búsqueda de marca compartida, que permite a los socios de contenido ofrecer búsqueda de texto completo de sus libros desde sus propios sitios web.

Si es un socio que desea realizar una búsqueda de marca compartida usando la API de datos de Book Search API, puede hacerlo modificando la URL del feed anterior para que apunte a su implementación de búsqueda de marca compartida. Si, por ejemplo, una búsqueda de marca compartida está disponible en la siguiente URL:

http://www.google.com/books/p/PARTNER_COBRAND_ID?q=ball

entonces puede obtener los mismos resultados usando la API de datos de Book Search API en la siguiente URL:

http://www.google.com/books/feeds/p/PARTNER_COBRAND_ID/volumes?q=ball+-soccer

Para especificar una URL alternativa al consultar un feed de volúmenes, puede proporcionar un parámetro adicional a newVolumeQuery()

$query =
    $books->newVolumeQuery('http://www.google.com/books/p/PARTNER_COBRAND_ID');

Para información adicional o soporte, visite nuestro centro de ayuda para socios.

37.4.3. Usar las funciones de comunidad

37.4.3.1. Añadir una calificación

Un usuario puede añadir una calificación a un libro. Book Search usa un sistema de calificación de 1 a 5 en el que 1 es la calificación más baja. Los usuarios no pueden actualizar ni eliminar calificaciones.

Para añadir una calificación, añada un objeto Rating a un VolumeEntry y publíquelo en el feed de anotaciones. En el ejemplo siguiente, partimos de un objeto VolumeEntry vacío.

$entry = new Zend_Gdata_Books_VolumeEntry();
$entry->setId(new Zend_Gdata_App_Extension_Id(VOLUME_ID));
$entry->setRating(new Zend_Gdata_Extension_Rating(3, 1, 5, 1));
$books->insertVolume($entry, Zend_Gdata_Books::MY_ANNOTATION_FEED_URI);

37.4.3.2. Reseñas

Además de las calificaciones, los usuarios autenticados pueden enviar reseñas o editar sus reseñas. Para información sobre cómo solicitar reseñas enviadas anteriormente, consulte Recuperar anotaciones.

37.4.3.2.1. Añadir una reseña

Para añadir una reseña, añada un objeto Review a un VolumeEntry y publíquelo en el feed de anotaciones. En el ejemplo siguiente, partimos de un objeto VolumeEntry existente.

$annotationUrl = $entry->getAnnotationLink()->href;
$review        = new Zend_Gdata_Books_Extension_Review();

$review->setText("This book is amazing!");
$entry->setReview($review);
$books->insertVolume($entry, $annotationUrl);
37.4.3.2.2. Editar una reseña

Para actualizar una reseña existente, primero recupere la reseña que desea actualizar, luego modifíquela, y después envíela al feed de anotaciones.

$entryUrl = $entry->getId()->getText();
$review   = new Zend_Gdata_Books_Extension_Review();

$review->setText("This book is actually not that good!");
$entry->setReview($review);
$books->updateVolume($entry, $entryUrl);

37.4.3.3. Etiquetas

Puede usar la API de datos de Book Search API para etiquetar volúmenes con palabras clave. Un usuario puede enviar, recuperar y modificar etiquetas. Consulte Recuperar anotaciones para saber cómo leer etiquetas enviadas anteriormente.

37.4.3.3.1. Enviar un conjunto de etiquetas

Para enviar etiquetas, añada un objeto Category con el esquema LABELS_SCHEME a un VolumeEntry y publíquelo en el feed de anotaciones.

$annotationUrl = $entry->getAnnotationLink()->href;
$category      = new Zend_Gdata_App_Extension_Category(
    'rated',
    'http://schemas.google.com/books/2008/labels');
$entry->setCategory(array($category));
$books->insertVolume($entry, Zend_Gdata_Books::MY_ANNOTATION_FEED_URI);

37.4.3.4. Recuperar anotaciones: reseñas, calificaciones y etiquetas

Puede usar la API de datos de Book Search API para recuperar anotaciones enviadas por un usuario determinado. Las anotaciones incluyen reseñas, calificaciones y etiquetas. Para recuperar las anotaciones de cualquier usuario, puede enviar una solicitud no autenticada que incluya el ID de usuario. Para recuperar las anotaciones del usuario autenticado, use el valor me como ID de usuario.

$feed = $books->getVolumeFeed(
            'http://www.google.com/books/feeds/users/USER_ID/volumes');
<i>(or)</i>
$feed = $books->getUserAnnotationFeed();

// print title(s) and rating value
foreach ($feed as $entry) {
    foreach ($feed->getTitles() as $title) {
        echo $title;
    }
    if ($entry->getRating()) {
        echo 'Rating: ' . $entry->getRating()->getAverage();
    }
}

Para ver una lista de los parámetros de consulta admitidos, consulte la sección de parámetros de consulta.

37.4.3.5. Eliminar anotaciones

Si recuperó una entrada de anotación que contiene calificaciones, reseñas y/o etiquetas, puede eliminar todas las anotaciones llamando a deleteVolume() en esa entrada.

$books->deleteVolume($entry);

37.4.4. Colecciones de libros y My Library

Google Book Search proporciona varias colecciones de libros específicas del usuario, cada una con su propio feed.

La colección más importante es My Library del usuario, que representa los libros que el usuario desea recordar, organizar y compartir con otros. Esta es la colección que el usuario ve al acceder a su página de My Library.

37.4.4.1. Recuperar libros de la biblioteca de un usuario

Las siguientes secciones describen cómo recuperar una lista de libros de la biblioteca de un usuario, con o sin parámetros de consulta.

Puede consultar un feed público de Book Search sin autenticación.

37.4.4.1.1. Recuperar todos los libros de la biblioteca de un usuario

Para recuperar los libros del usuario, envíe una consulta al feed My Library. Para obtener la biblioteca del usuario autenticado, use me en lugar de USER_ID.

$feed = $books->getUserLibraryFeed();

Nota: El feed puede no contener todos los libros del usuario, porque hay un límite predeterminado en el número de resultados devueltos. Para más información, consulte el parámetro de consulta max-results en Buscar libros.

37.4.4.1.2. Buscar libros en la biblioteca de un usuario

Al igual que puede buscar en todos los libros, puede realizar una búsqueda de texto completo solo sobre los libros de la biblioteca de un usuario. Para ello, simplemente establezca los parámetros apropiados en el objeto VolumeQuery.

Por ejemplo, la siguiente consulta devuelve todos los libros de su biblioteca que contienen la palabra "bear":

$query = $books->newVolumeQuery(
    'http://www.google.com/books/feeds/users' .
    '/USER_ID/collections/library/volumes');
$query->setQuery('bear');
$feed = $books->getVolumeFeed($query);

Para ver una lista de los parámetros de consulta admitidos, consulte la sección de parámetros de consulta. Además, puede buscar libros que hayan sido etiquetados por el usuario:

$query = $books->newVolumeQuery(
    'http://www.google.com/books/feeds/users/' .
    'USER_ID/collections/library/volumes');
$query->setCategory(
$query->setCategory('favorites');
$feed = $books->getVolumeFeed($query);

37.4.4.2. Actualizar libros en la biblioteca de un usuario

Puede usar la API de datos de Book Search API para añadir un libro a, o eliminar un libro de, la biblioteca de un usuario. Las calificaciones, reseñas y etiquetas son válidas en todas las colecciones de un usuario, y por lo tanto se editan usando el feed de anotaciones (consulte Usar las funciones de comunidad).

37.4.4.2.1. Añadir un libro a una biblioteca

Después de autenticarse, puede añadir libros a la biblioteca del usuario actual.

Puede crear una entrada desde cero si conoce el ID del volumen, o insertar una entrada leída de cualquier feed.

El siguiente ejemplo crea una nueva entrada y la añade a la biblioteca:

$entry = new Zend_Gdata_Books_VolumeEntry();
$entry->setId(new Zend_Gdata_App_Extension_Id(VOLUME_ID));
$books->insertVolume(
    $entry,
    Zend_Gdata_Books::MY_LIBRARY_FEED_URI
);

El siguiente ejemplo añade un objeto VolumeEntry existente a la biblioteca:

$books->insertVolume(
    $entry,
    Zend_Gdata_Books::MY_LIBRARY_FEED_URI
);
37.4.4.2.2. Eliminar un libro de una biblioteca

Para eliminar un libro de la biblioteca de un usuario, llame a deleteVolume() en el objeto VolumeEntry.

$books->deleteVolume($entry);