|
|
7#

楼主 |
发表于 2010-3-2 12:04:55
|
只看该作者

向用户图书馆添加图书
您已经了解了如何检索用户图书馆的内容......但如何向用户图书馆添加新标题呢?使用 Google Book Search Data API,您只需 POST 一个包含图书的唯一卷标识符的 XML 编码 <entry> 到用户的图书馆提要。清单 7 展示了这样一个 POST 请求示例:
清单 7. 向用户图书馆添加一本图书的 POST 请求示例
POST /books/feeds/users/me/collections/library/volumes HTTP/1.1
Host: books.google.com
Connection: close
User-Agent: MyCompany-MyApp-1.0 Zend_Framework_Gdata/1.9.0
authorization: GoogleLogin
Content-Type: application/atom+xml
Accept-encoding: identity
Content-Length: 97
<atom:entry xmlns:atom="http://www.w3.org/2005/Atom">
<atom:id>BOOK_VOLUME_ID_HERE</atom:id>
</atom:entry>
要使用 Zend_Gdata_Books 完成相同的任务,初始化一个新的 Zend_Gdata_Books_VolumeEntry 对象,向它分配一个卷标识符,然后使用 insertVolume() 方法将它附加到用户的图书馆提要。清单 8 展示了相关代码:
清单 8. 向用户图书馆添加图书
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_Books');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
// set credentials for ClientLogin authentication
$user = "xxx@gmail.com";
$pass = "secret";
try {
// perform login
$client = Zend_Gdata_ClientLogin::getHttpClient(
$user, $pass, 'print');
$books = new Zend_Gdata_Books($client);
// add book to user's library using volume ID
$id = 'BOOK_VOLUME_ID_HERE';
$entry = new Zend_Gdata_Books_VolumeEntry();
$entry->setId(new Zend_Gdata_App_Extension_Id($id));
$books->insertVolume(
$entry,
Zend_Gdata_Books::MY_LIBRARY_FEED_URI
);
// display success message
echo "Volume added successfully with ID: $id";
} catch (Exception $e) {
die('ERROR:' . $e->getMessage());
}
?>
添加图书评论和标签
除允许用户向其图书馆添加图书外,Google Book Search API 还允许用户向图书添加评论和标签。评论和标签存储为 Google 所称的 “注释(annotation)”,如果您回顾一下 清单 1,您将看到每个条目都包含一个注释 URL。因此,要向一本图书添加评论或标签,您只需为该图书创建一个 XML 编码的 <entry>,将评论和/或标签附加到这个条目,然后将整个条目 POST 到概述的注释 URL。
清单 9 展示了这样一个 POST 请求示例:
清单 9. 一个用于添加图书评论的 POST 请求示例
POST /books/feeds/users/me/volumes HTTP/1.1
Host: www.google.com
Connection: close
User-Agent: MyCompany-MyApp-1.0 Zend_Framework_Gdata/1.9.0
authorization: GoogleLogin
Accept-encoding: identity
Content-Type: application/atom+xml
Content-Length: 3291
<atom:entry xmlns:atom="http://www.w3.org/2005/Atom">
<openAccess xmlns="http://schemas.google.com/books/2008"
value="http://schemas.google.com/books/2008#disabled"/>
<atom:category term="http://schemas.google.com/books/2008#volume"
scheme="http://schemas.google.com/g/2005#kind"/>
<atom:id>http://www.google.com/books/feeds/volumes/BOOK_VOLUME_ID_HERE
</atom:id>
<atom:link href="http://bks7.books.google.com/books?id=BOOK_VOLUME_ID_HERE
&printsec=frontcover&img=1&zoom=5&sig=ACfU3U0ayCK47roiq
7r_hf_Iy-tQ&source=gbs_gdata"
rel="http://schemas.google.com/books/2008/thumbnail" type="image/x-unknown"/>
<atom:link href="http://books.google.com/books?id=BOOK_VOLUME_ID_HERE
&ie=ISO-8859-1&source=gbs_gdata"
rel="http://schemas.google.com/books/2008/info" type="text/html"/>
<atom:link href="http://www.google.com/books/feeds/users/me/volumes"
rel="http://schemas.google.com/books/2008/annotation"
type="application/atom+xml"/>
<atom:link href="http://books.google.com/books?id=BOOK_VOLUME_ID_HERE
&ie=ISO-8859-1" rel="alternate" type="text/html"/>
<atom:link href="http://www.google.com/books/feeds/volumes/BOOK_VOLUME_ID_HERE"
rel="self" type="application/atom+xml"/>
<atom:title type="text">The Two Minute Rule</atom:title>
<atom:updated>2009-12-28T10:15:44.000Z</atom:updated>
<dc:creator xmlns:dc="http://purl.org/dc/terms">Robert Crais</dc:creator>
<dc:date xmlns:dc="http://purl.org/dc/terms">2006-01-01</dc:date>
<dc:format xmlns:dc="http://purl.org/dc/terms">Dimensions 10.8x17.2x3.0 cm
</dc:format>
<dc:format xmlns:dc="http://purl.org/dc/terms">465 pages</dc:format>
<dc:format xmlns:dc="http://purl.org/dc/terms">book</dc:format>
<dc:identifier xmlns:dc="http://purl.org/dc/terms">BOOK_VOLUME_ID_HERE
</dc:identifier>
<dc:identifier xmlns:dc="http://purl.org/dc/terms">ISBN:1111111111
</dc:identifier>
<dc:identifier xmlns:dc="http://purl.org/dc/terms">ISBN:1111111111111
</dc:identifier>
<dc:language xmlns:dc="http://purl.org/dc/terms">en</dc:language>
<dc:publisher xmlns:dc="http://purl.org/dc/terms">Pocket Books
</dc:publisher>
<dc:subject xmlns:dc="http://purl.org/dc/terms">Fiction / Action & Adventure
</dc:subject>
<dc:subject xmlns:dc="http://purl.org/dc/terms">Fiction / Suspense
</dc:subject>
<dc:subject xmlns:dc="http://purl.org/dc/terms">Fiction / Action & Adventure
</dc:subject>
<dc:title xmlns:dc="http://purl.org/dc/terms">The Two Minute Rule
</dc:title>
<gbs:embeddability xmlns:gbs="http://schemas.google.com/books/2008"
value="http://schemas.google.com/books/2008#not_embeddable"/>
<gd:rating xmlns:gd="http://schemas.google.com/g/2005" min="1" max="5"
average="4.20"/>
<gbs:review xmlns:gbs="http://schemas.google.com/books/2008">
This book is amazing - v!</gbs:review>
<gbs:viewability xmlns:gbs="http://schemas.google.com/books/2008"
value="http://schemas.google.com/books/2008#view_no_pages"/>
</atom:entry>
清单 10 展示了一个使用目标图书的卷标识符和 Zend_Gdata 库来添加评论的示例:
清单 10. 添加一条图书评论
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_Books');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
// set credentials for ClientLogin authentication
$user = "xxx@gmail.com";
$pass = "secret";
try {
// perform login
$client = Zend_Gdata_ClientLogin::getHttpClient(
$user, $pass, 'print');
$books = new Zend_Gdata_Books($client);
// add review to book
$id = 'BOOK_VOLUME_ID_HERE';
$entry = $books->getVolumeEntry($id);
$review = new Zend_Gdata_Books_Extension_Review();
$review->setText("This book is amazing - v!");
$entry->setReview($review);
$books->insertVolume(
$entry,
$entry->getAnnotationLink()->getHref()
);
// display success message
echo "Review successfully added with ID: $id";
} catch (Exception $e) {
die('ERROR:' . $e->getMessage());
}
?>
在 清单 10 中,getVolumeEntry() 方法用于通过图书的卷标识符来检索该图书的当前条目,然后,一个包含评论文本的 Zend_Gdata_Books_Extension_Review 对象通过 setReview() 方法附加到该条目。然后 insertVolume() 方法负责创建 POST 请求并更新 Google 服务器上的相应条目。
类似地,Google Book Search 还允许用户使用描述性的关键字为每本书设置标签。这是一个有用的社区特性,能够生成更有效、更相关的搜索结果。清单 11 通过一个示例展示如何通过编程方式将这些标签附加到一个图书条目:
清单 11. 添加图书标签
<?php
// load Zend Gdata libraries
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata_Books');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
// set credentials for ClientLogin authentication
$user = "xxx@gmail.com";
$pass = "secret";
try {
// perform login
$client = Zend_Gdata_ClientLogin::getHttpClient(
$user, $pass, 'print');
$books = new Zend_Gdata_Books($client);
// add labels to book
$id = 'BOOK_VOLUME_ID_HERE';
$entry = $books->getVolumeEntry($id);
$entry->setCategory(array(
new Zend_Gdata_App_Extension_Category('crime',
'http://schemas.google.com/books/2008/labels'),
new Zend_Gdata_App_Extension_Category('suspense',
'http://schemas.google.com/books/2008/labels'),
new Zend_Gdata_App_Extension_Category('elvis cole',
'http://schemas.google.com/books/2008/labels')
));
$books->insertVolume(
$entry,
$entry->getAnnotationLink()->getHref()
);
// display success message
echo "Labels successfully added for ID: $id";
} catch (Exception $e) {
die('ERROR:' . $e->getMessage());
}
?>
在 清单 11 中,每个标签都表示为一个 Zend_Gdata_App_Extension_Category 实例,然后使用 setCategory() 方法将这些实例附加到图书条目,然后调用 insertVolume() 方法来将这些标签添加到 Google Book Search 数据库中的图书条目。
添加到 Google Book Search 的评论和标签并不是私有的,它们对所有 Internet 用户可见,用户可以通过 Google Books Web 站点或一个公共提要 URL 访问它们。为说明这一点,假设您可以查看一个特定用户创建的所有评论和标签,您只需在以下 URL 访问该用户的注释提要:http://books.google.com/books/feeds/users/USER_ID/volumes。注意,这个 URL 中的 USER_ID 必须是该用户在 Google Book Search 上的唯一识别号,而不是该用户的 Google Accounts 用户名。您可以在该用户的 “My Library” URL 链接中找到 Google Book Search 识别号。
结束语
尽管还处于开发阶段,Google Book Search Data API 仍然为开发人员将图书搜索结果集成到 Web 应用程序中提供了无限可能性。本文中的示例向您介绍了 Google Book Search 卷提要,展示了如何通过关键字、作者和标题搜索视频,如何从搜索结果提要提取图书元数据,包括出版商和作者信息、缩略图和 ISBN 编号。本文还简要介绍了 Google Book Search 的一些社区特性,展示如何以编程方式向图书条目添加评论和书签。
这些示例证明,当开发人员创建新的 Web 应用程序时,Google Book Search REST API 能够向他们提供大量的灵活性和自由度。如果您试图混搭图书搜索数据和来自其他 Web 服务的数据,或者只需构建一个针对作者、出版商或消费者的定制搜索界面,这个 API 都非常有用。试用这个 API 一段时间,看看您将有什么新的想法!
后注:
常用缩略词
API:应用程序编程接口
DOM:文档对象模型
HTTP:超文本传输协议
HTML:超文本标记语言
ISBN:国际标准书号
REST:具象状态传输
URL:统一资源定位符
XML:可扩展标记语言 |
|