| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- Reviewed: no -->
- <sect1 id="zend.gdata.books">
- <title>Using the Book Search Data API</title>
- <para>
- The Google Book Search Data <acronym>API</acronym> allows client applications to view
- and update Book Search content in the form of Google Data <acronym>API</acronym> feeds.
- </para>
- <para>
- Your client application can use the Book Search Data <acronym>API</acronym> to issue
- full-text searches for books and to retrieve standard book information,
- ratings, and reviews. You can also access individual users'
- <ulink url="http://books.google.com/googlebooks/mylibrary/">library collections and
- public reviews</ulink>. Finally, your application can submit authenticated requests
- to enable users to create and modify library collections, ratings, labels,
- reviews, and other account-specific entities.
- </para>
- <para>
- For more information on the Book Search Data <acronym>API</acronym>, please refer to the
- official <ulink url="http://code.google.com/apis/books/gdata/developers_guide_php.html">PHP
- Developer's Guide</ulink> on code.google.com.
- </para>
- <sect2 id="zend.gdata.books.authentication">
- <title>Authenticating to the Book Search service</title>
- <para>
- You can access both public and private feeds using the Book Search
- Data <acronym>API</acronym>. Public feeds don't require any authentication, but they are
- read-only. If you want to modify user libraries, submit reviews or
- ratings, or add labels, then your client needs to authenticate before
- requesting private feeds. It can authenticate using either of two
- approaches: AuthSub proxy authentication or ClientLogin username/password
- authentication. Please refer to the <ulink
- url="http://code.google.com/apis/books/gdata/developers_guide_php.html#Authentication">Authentication
- section in the <acronym>PHP</acronym> Developer's Guide</ulink> for more detail.
- </para>
- </sect2>
- <sect2 id="zend.gdata.books.searching_for_books">
- <title>Searching for books</title>
- <para>
- The Book Search Data <acronym>API</acronym> provides a number of feeds that list
- collections of books.
- </para>
- <para>
- The most common action is to retrieve a list of books that match a
- search query. To do so you create a <classname>VolumeQuery</classname> object
- and pass it to the <methodname>Books::getVolumeFeed()</methodname> method.
- </para>
- <para>
- For example, to perform a keyword query, with a filter on
- viewability to restrict the results to partial or full view books, use
- the <methodname>setMinViewability()</methodname> and <methodname>setQuery()</methodname>
- methods of the <classname>VolumeQuery</classname> object. The following code snippet
- prints the title and viewability of all volumes whose metadata or text matches
- the query term "domino":
- </para>
- <programlisting language="php"><![CDATA[
- $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();
- }
- ]]></programlisting>
- <para>
- The <classname>Query</classname> class, and subclasses like
- <classname>VolumeQuery</classname>, are responsible for constructing feed
- <acronym>URL</acronym>s. The VolumeQuery shown above constructs a <acronym>URL</acronym>
- equivalent to the following:
- </para>
- <programlisting language="php"><![CDATA[
- http://www.google.com/books/feeds/volumes?q=keyword&min-viewability=partial
- ]]></programlisting>
- <para>
- Note: Since Book Search results are
- public, you can issue a Book Search query without authentication.
- </para>
- <para>
- Here are some of the most common <classname>VolumeQuery</classname>
- methods for setting search parameters:
- </para>
- <para>
- <methodname>setQuery()</methodname>: Specifies a search
- query term. Book Search searches all book metadata and full text for
- books matching the term. Book metadata includes titles, keywords,
- descriptions, author names, and subjects.
- Note that any spaces, quotes or other punctuation in the parameter
- value must be <acronym>URL</acronym>-escaped (Use a plus (<emphasis>+</emphasis>) for a
- space). To search for an exact phrase, enclose the phrase in quotation marks.
- For example, to search for books matching the phrase "spy plane", set
- the <property>q</property> parameter to <command>%22spy+plane%22</command>.
- You can also use any of the <ulink url="http://books.google.com/advanced_book_search">
- advanced search operators</ulink> supported by Book Search. For example,
- <command>jane+austen+-inauthor:austen</command> returns matches that mention
- (but are not authored by) Jane Austen.
- </para>
- <para>
- <methodname>setStartIndex()</methodname>: Specifies
- the index of the first matching result that should be included in the
- result set. This parameter uses a one-based index, meaning the first
- result is 1, the second result is 2 and so forth. This parameter works
- in conjunction with the max-results
- parameter to determine which results to return. For example, to
- request the third set of 10 results—results 21-30—set
- the <property>start-index</property> parameter to <emphasis>21</emphasis> and the
- max-results parameter to <emphasis>10</emphasis>.
- Note: This isn't a general cursoring
- mechanism. If you first send a query with
- <command>?start-index=1&max-results=10</command> and then send another
- query with <command>?start-index=11&max-results=10</command>, the
- service cannot guarantee that the results are equivalent to
- <command>?start-index=1&max-results=20</command>, because insertions and
- deletions could have taken place in between the two queries.
- </para>
- <para>
- <methodname>setMaxResults()</methodname>:
- Specifies the maximum number of results that should be included
- in the result set. This parameter works in conjunction with the
- start-index parameter to determine which
- results to return. The default value of this parameter is
- <emphasis>10</emphasis> and the maximum value is <emphasis>20</emphasis>.
- </para>
- <para>
- <methodname>setMinViewability()</methodname>: Allows you to filter the results according
- to the books' <ulink
- url="http://code.google.com/apis/books/docs/dynamic-links.html#terminology">viewability
- status</ulink>. This parameter accepts one of three values:
- <emphasis>'none'</emphasis> (the default, returning all matching books regardless of
- viewability), <emphasis>'partial_view'</emphasis> (returning only books
- that the user can preview or view in their entirety), or
- <emphasis>'full_view'</emphasis> (returning only books that the user can
- view in their entirety).
- </para>
- <sect3 id="zend.gdata.books.partner_restrict">
- <title>Partner Co-Branded Search</title>
- <para>
- Google Book Search provides <ulink
- url="http://books.google.com/support/partner/bin/answer.py?hl=en&answer=65113">Co-Branded
- Search</ulink>, which lets content partners provide full-text search of
- their books from their own websites.
- </para>
- <para>
- If you are a partner who wants to do Co-Branded Search using the
- Book Search Data <acronym>API</acronym>, you may do so by modifying the feed
- <acronym>URL</acronym> above to point to your Co-Branded Search implementation. if,
- for example, a Co-Branded Search is available at the following
- <acronym>URL</acronym>:
- </para>
- <programlisting language="php"><![CDATA[
- http://www.google.com/books/p/PARTNER_COBRAND_ID?q=ball
- ]]></programlisting>
- <para>
- then you can obtain the same results using the Book Search Data
- <acronym>API</acronym> at the following <acronym>URL</acronym>:
- </para>
- <programlisting language="php"><![CDATA[
- http://www.google.com/books/feeds/p/PARTNER_COBRAND_ID/volumes?q=ball+-soccer
- ]]></programlisting>
- <para>
- To specify an alternate <acronym>URL</acronym> when querying a volume feed, you can
- provide an extra parameter to <methodname>newVolumeQuery()</methodname>
- </para>
- <programlisting language="php"><![CDATA[
- $query =
- $books->newVolumeQuery('http://www.google.com/books/p/PARTNER_COBRAND_ID');
- ]]></programlisting>
- <para>
- For additional information or support, visit our
- <ulink url="http://books.google.com/support/partner/">Partner help center</ulink>.
- </para>
- </sect3>
- </sect2>
- <sect2 id="zend.gdata.books.community_features">
- <title>Using community features</title>
- <sect3 id="zend.gdata.books.adding_ratings">
- <title>Adding a rating</title>
- <para>
- A user can add a rating to a book. Book Search uses a 1-5
- rating system in which 1 is the lowest rating. Users cannot
- update or delete ratings.
- </para>
- <para>
- To add a rating, add a <classname>Rating</classname> object to a
- <classname>VolumeEntry</classname> and post it to the annotation feed. In the
- example below, we start from an empty <classname>VolumeEntry</classname> object.
- </para>
- <programlisting language="php"><![CDATA[
- $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);
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.gdata.books.reviews">
- <title>Reviews</title>
- <para>
- In addition to ratings, authenticated users can submit reviews or
- edit their reviews. For information on how to request previously
- submitted reviews, see <ulink
- url="#zend.gdata.books.retrieving_annotations">Retrieving annotations</ulink>.
- </para>
- <sect4 id="zend.gdata.books.adding_review">
- <title>Adding a review</title>
- <para>
- To add a review, add a <classname>Review</classname> object to a
- <classname>VolumeEntry</classname> and post it to the annotation
- feed. In the example below, we start from an existing
- <classname>VolumeEntry</classname> object.
- </para>
- <programlisting language="php"><![CDATA[
- $annotationUrl = $entry->getAnnotationLink()->href;
- $review = new Zend_Gdata_Books_Extension_Review();
- $review->setText("This book is amazing!");
- $entry->setReview($review);
- $books->insertVolume($entry, $annotationUrl);
- ]]></programlisting>
- </sect4>
- <sect4 id="zend.gdata.books.editing_review">
- <title>Editing a review</title>
- <para>
- To update an existing review, first you retrieve the
- review you want to update, then you modify it, and
- then you submit it to the annotation feed.
- </para>
- <programlisting language="php"><![CDATA[
- $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);
- ]]></programlisting>
- </sect4>
- </sect3>
- <sect3 id="zend.gdata.books.labels">
- <title>Labels</title>
- <para>
- You can use the Book Search Data <acronym>API</acronym> to label volumes with
- keywords. A user can submit, retrieve and modify labels. See
- <ulink url="#zend.gdata.books.retrieving_annotations">Retrieving
- annotations</ulink> for how to read previously submitted labels.
- </para>
- <sect4 id="zend.gdata.books.submitting_labels">
- <title>Submitting a set of labels</title>
- <para>
- To submit labels, add a <classname>Category</classname> object
- with the scheme <constant>LABELS_SCHEME</constant> to a
- <classname>VolumeEntry</classname> and post it to the annotation feed.
- </para>
- <programlisting language="php"><![CDATA[
- $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);
- ]]></programlisting>
- </sect4>
- </sect3>
- <sect3 id="zend.gdata.books.retrieving_annotations">
- <title>Retrieving annotations: reviews, ratings, and labels</title>
- <para>
- You can use the Book Search Data <acronym>API</acronym> to retrieve annotations
- submitted by a given user. Annotations include reviews, ratings, and
- labels. To retrieve any user's annotations, you can send an
- unauthenticated request that includes the user's user ID. To retrieve the
- authenticated user's annotations, use the value <emphasis>me</emphasis> as the user
- ID.
- </para>
- <programlisting language="php"><![CDATA[
- $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();
- }
- }
- ]]></programlisting>
- <para>
- For a list of the supported query parameters, see the
- <ulink url="#zend.gdata.books.query_parameters">query parameters</ulink>
- section.
- </para>
- </sect3>
- <sect3 id="zend.gdata.books.deleting_annotations">
- <title>Deleting Annotations</title>
- <para>
- If you retrieved an annotation entry containing ratings,
- reviews, and/or labels, you can remove all annotations
- by calling <methodname>deleteVolume()</methodname> on that entry.
- </para>
- <programlisting language="php"><![CDATA[
- $books->deleteVolume($entry);
- ]]></programlisting>
- </sect3>
- </sect2>
- <sect2 id="zend.gdata.books.sharing_with_my_library">
- <title>Book collections and My Library</title>
- <para>
- Google Book Search provides a number of user-specific
- book collections, each of which has its own feed.
- </para>
- <para>
- The most important collection is the user's My Library, which
- represents the books the user would like to remember, organize, and
- share with others. This is the collection the user sees when accessing
- his or her <ulink url="http://books.google.com/books?op=library">My Library
- page</ulink>.
- </para>
- <sect3 id="zend.gdata.books.retrieving_books_in_library">
- <title>Retrieving books in a user's library</title>
- <para>
- The following sections describe how to retrieve a list
- of books from a user's library, with or without query
- parameters.
- </para>
- <para>
- You can query a Book Search public feed without authentication.
- </para>
- <sect4 id="zend.gdata.books.retrieving_all_books_in_library">
- <title>Retrieving all books in a user's library</title>
- <para>
- To retrieve the user's books, send a query to the
- My Library feed. To get the library of the authenticated
- user, use <emphasis>me</emphasis> in place of <constant>USER_ID</constant>.
- </para>
- <programlisting language="php"><![CDATA[
- $feed = $books->getUserLibraryFeed();
- ]]></programlisting>
- <para>
- Note: The feed may not contain all of the user's books, because
- there's a default limit on the number of results returned. For
- more information, see the <property>max-results</property> query parameter in
- <ulink url="#zend.gdata.books.searching_for_books">Searching for books</ulink>.
- </para>
- </sect4>
- <sect4 id="zend.gdata.books.retrieving_books_in_library_with_query">
- <title>Searching for books in a user's library</title>
- <para>
- Just as you can <ulink
- url="#zend.gdata.books.searching_for_books">search across all books</ulink>,
- you can do a full-text search over just the books in a
- user's library. To do this, just set the appropriate
- paramters on the <classname>VolumeQuery</classname> object.
- </para>
- <para>
- For example, the following query returns all the books in
- your library that contain the word "bear":
- </para>
- <programlisting language="php"><![CDATA[
- $query = $books->newVolumeQuery(
- 'http://www.google.com/books/feeds/users' .
- '/USER_ID/collections/library/volumes');
- $query->setQuery('bear');
- $feed = $books->getVolumeFeed($query);
- ]]></programlisting>
- <para>
- For a list of the supported query parameters, see the
- <ulink url="#zend.gdata.books.query_pParameters">query parameters</ulink>
- section. In addition, you can search for books that have been
- <ulink url="#zend.gdata.books.labels">labeled by the user</ulink>:
- </para>
- <programlisting language="php"><![CDATA[
- $query = $books->newVolumeQuery(
- 'http://www.google.com/books/feeds/users/' .
- 'USER_ID/collections/library/volumes');
- $query->setCategory(
- $query->setCategory('favorites');
- $feed = $books->getVolumeFeed($query);
- ]]></programlisting>
- </sect4>
- </sect3>
- <sect3 id="zend.gdata.books.updating_library">
- <title>Updating books in a user's library</title>
- <para>
- You can use the Book Search Data <acronym>API</acronym> to add a book to, or remove
- a book from, a user's library. Ratings, reviews, and labels are valid
- across all the collections of a user, and are thus edited using the
- annotation feed (see <ulink
- url="#zend.gdata.books.community_features">Using community features</ulink>).
- </para>
- <sect4 id="zend.gdata.books.library_book_add">
- <title>Adding a book to a library</title>
- <para>
- After authenticating, you can add books to the current user's library.
- </para>
- <para>
- You can either create an entry from scratch if you
- know the volume ID, or insert an entry read from any feed.
- </para>
- <para>
- The following example creates a new entry and adds it to the library:
- </para>
- <programlisting language="php"><![CDATA[
- $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
- );
- ]]></programlisting>
- <para>
- The following example adds an existing
- <classname>VolumeEntry</classname> object to the library:
- </para>
- <programlisting language="php"><![CDATA[
- $books->insertVolume(
- $entry,
- Zend_Gdata_Books::MY_LIBRARY_FEED_URI
- );
- ]]></programlisting>
- </sect4>
- <sect4 id="zend.gdata.books.library_book_remove">
- <title>Removing a book from a library</title>
- <para>
- To remove a book from a user's library, call
- <methodname>deleteVolume()</methodname> on the
- <classname>VolumeEntry</classname> object.
- </para>
- <programlisting language="php"><![CDATA[
- $books->deleteVolume($entry);
- ]]></programlisting>
- </sect4>
- </sect3>
- </sect2>
- </sect1>
|