借助 Picasa Web Albums 开发 PHP 应用程序

来源:互联网 发布:永恒的记忆js下载 编辑:程序博客网 时间:2024/05/01 20:53
Picasa Web Albums 为 Web 应用程序开发人员提供了一种基于 REST 的 Data API,可用于处理存储于服务器上的照片和相册。PHP 的 SimpleXML 扩展和 Zend 的 GData Library 则非常适合于处理由此 API 生成的 XML 提要,借助于此,您就能够定制照片管理和共享的 PHP 应用程序。通过本文,了解这个 Picasa Web Albums Data API,看看如何能够用它来检索照片和照片元数据;添加、修改和删除照片;执行 Picasa 用户生成内容的关键字搜索。

简介

常用缩写词
  • API:应用程序编程接口
  • HTTP:超文本传输协议
  • MIME:多用途因特网邮件扩展协议
  • PHP:PHP 超文本预处理程序
  • REST:具象状态传输
  • URL:统一资源定位符
  • XML:可扩展标记语言

正如喜欢拍摄大量数字照片的人一样,我也经常碰到磁盘混乱的问题 — 旧照片占据了我计算机上数百兆字节的空间,这些照片只粗略进行了标记,有的甚至都没有标记。几个月前,在我尝试了 Google 免费的 Picasa 照片管理软件之后,才从混乱中找出了处理办法。

Picasa 不仅可以从 Web 上下载 — 它还能通过免费的照片共享网站 Picasa Web Albums 在线使用。在这个网站,用户可以上传照片和视频,将这些照片和视频分门别类地放入相册、用关键字标记这些照片和视频以便于搜索、与他人共享这些照片和视频。不过,最棒的还在幕后:与很多其他的 Google 工具一样,Picasa Web Albums 公开了一个 Data API,允许开发人员围绕在用户相册内存储的照片构建定制应用程序。您可以访问这个 API,它遵循 REST 模型。此 API 还具备针对很多常用语言(包括我最常使用的 PHP)的客户库。

本文将向您介绍 Google Picasa Web Albums Data API 并向您展示如何集成 PHP 应用程序和 Picasa 相册和照片。本文的示例包括如何检索相册和照片、通过定制的 Web 界面上传照片并按关键字搜索照片。现在,就请您加入进来,让我们立即开始吧!





回页首

Picasa Web Albums Data API 简介

在深入研究 PHP 代码之前,先来简单介绍 Picasa Web Albums Data API。与所有基于 REST 的服务一样,先要有一个对指定服务的 HTTP 请求。这个 HTTP 请求包含具有一个或多个输入参数的查询;服务器用 Atom 或 RSS 格式的响应(或提要)回复此查询,这类格式适合于在任何支持 XML 的客户机内解析。

一个典型的 Picasa 提要包含很多信息。举例来说,试着在浏览器中弹出 URL http://picasaweb.google.com/data/feed/api/user/userid?kind=photo into(在用您的 Google 帐户用户名替换了 userid 之后)并假设在 Picasa Web Albums 内已经保存了一些照片和相册,输出结果应该类似 清单 1。

遍览上述输出以熟悉其中的主要元素:

  • Picasa Web Albums Data API 用具有所需数据的提要响应 REST 请求。可用的提要有很多种:相册提要、照片提要、用户提要、用户联系提要等。不过,在很多情况下,XML 响应都会包含一个 <feed> 元素作为根元素。<feed> 元素又包含 <link> 元素(包含结果集当前页、后一页和前一页)和 <openSearch:> 元素(包含此搜索的汇总统计数据)。
  • 最外边的 <feed> 元素包含一个或多个 <entry> 元素,每个 <entry> 元素代表与查询相匹配的每个照片,而且还包含所代表照片的进一步信息,包括它的标题、文件名、发布日期以及作者。每个 <entry> 又包含 <link> 元素,它提供 URL 链接以查看和编辑此照片。
  • 每个 <entry> 内的一组 <gphoto:> 元素包含有关此照片的详细信息:大小、尺寸、相册、注释数量等。
  • 每个 <entry> 内的 <media:group> 元素包含照片的关键字和缩略图链接??




回页首

用 SimpleXML 检索照片

现在,我们来看看一个用 PHP 和 SimpleXML 解析 Picasa Web Albums 提要的例子。清单 2 接受 清单 1 的提要并使用 SimpleXML 从中提取相关的数据段并将其格式化成 Web 页:


清单 2:用 SimpleXML 检索照片列表

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Listing album contents</title>
<style>
body {
font-family: Verdana;
}
h2 {
color: red;
text-decoration: none;
}
span.attr {
font-weight: bolder;
}
img {
float: left;
}
</style>
</head>
<body>
<?php
$userid = 'userid%40googlemail.com';

// build feed URL
$feedURL = "http://picasaweb.google.com/data/feed/api/user/$userid?kind=photo";

// read feed into SimpleXML object
$sxml = simplexml_load_file($feedURL);

// get album name and number of photos
$counts = $sxml->children('http://a9.com/-/spec/opensearchrss/1.0/');
$total = $counts->totalResults;
?>
<h1><?php echo $sxml->title; ?></h1>
<?php echo $total; ?> photo(s) found.
<p/>

<?php
// iterate over entries in album
// print each entry's title, size, dimensions, tags, and thumbnail image
foreach ($sxml->entry as $entry) {
$title = $entry->title;
$summary = $entry->summary;

$gphoto = $entry->children('http://schemas.google.com/photos/2007');
$size = $gphoto->size;
$height = $gphoto->height;
$width = $gphoto->width;

$media = $entry->children('http://search.yahoo.com/mrss/');
$thumbnail = $media->group->thumbnail[1];
$tags = $media->group->keywords;

echo "<h2>$summary</h2>/n";
echo "<table><tr><td><img src=/"" .
$thumbnail->attributes()->{'url'} . "/"/></td>/n";
echo "<td><span class=/"attr/">File</span>: $title
<br />/n";
echo "<span class=/"attr/">Size</span>: $size bytes
($height x $width) <br />/n";
echo "<span class=/"attr/">Tags</span>: $tags
</td></tr></table>/n";
}
?>

</body>
</html>

图 1 展示了输出结果:


图 1. 列出照片的 Web 页


本文转自IBM Developerworks中国

      请点击此处查看全文