用 Zend GData Client Library 检索照片 前一个例子展示了利用 PHP 从 Picasa Web Albums 读取和使用数据是多么地容易。但是,只读访问有其局限性。要执行需要写访问的更复杂的操作,比如添加照片或相
用 Zend GData Client Library 检索照片
前一个例子展示了利用 PHP 从 Picasa Web Albums 读取和使用数据是多么地容易。但是,只读访问有其局限性。要执行需要写访问的更复杂的操作,比如添加照片或相册,就需要向应用程序中添加用户身份验证,而这要借助于 Google 认可的两种验证方法之一:AuthSub 或 ClientLogin。
要手动执行这类身份验证是件非常麻烦的事情,需要大量代码来应对一个典型的身份验证过程中可能出现的各种情况。幸运的是,您不必为此费心:Zend 的 GData Client Library 可以帮您处理所有细节,它专门为想要集成 PHP 应用程序和 Google Data API 的开发人员设计。这个库可以单独下载(相关链接,请参见 参考资料),它提供了针对 Google Data API 的一个面向对象的方便接口,并封装了大多数的常见任务(包括身份验证),这样一来,您就可以着重处理应用程序的核心功能了。
清单 5 用 Zend GData Client Library 重复实现了 清单 4 的功能:
|
清单 5:用 Zend GData Client Library 检索相册内的照片:
<!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 // load library require_once 'Zend/Loader.php'; Zend_Loader::loadClass('Zend_Gdata'); Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); Zend_Loader::loadClass('Zend_Gdata_Photos'); Zend_Loader::loadClass('Zend_Http_Client'); // create authenticated HTTP client for Picasa service $svc = Zend_Gdata_Photos::AUTH_SERVICE_NAME; $user = "userid_cnnew1@gmail.com"; $pass = "secret"; $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $svc); $gphoto = new Zend_Gdata_Photos($client); // generate query to get album feed $query = $gphoto->newAlbumQuery(); $query->setUser("default"); $query->setAlbumName("France2008"); // get and parse album feed // get album name and number of photos try { $feed = $gphoto->getAlbumFeed($query); } catch (Zend_Gdata_App_Exception $e) { echo "Error: " . $e->getResponse(); } ?> <h1><?php echo $feed->getTitle(); ?></h1> <?php echo $feed->getTotalResults(); ?> photo(s) found. <p/>
<?php // process each photo entry // print each entry's title, size, dimensions, tags, and thumbnail image foreach ($feed as $entry) { $title = $entry->getTitle(); $summary = $entry->getSummary(); $thumbnail = $entry->getMediaGroup()->getThumbnail(); $tags = $entry->getMediaGroup()->getKeywords(); $size = $entry->getGphotoSize(); $height = $entry->getGphotoHeight(); $width = $entry->getGphotoWidth(); echo "<h2>$summary</h2>\n"; echo "<table><tr><td><img src=\"" . $thumbnail[1]->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>
|
清单 5 先是加载 Zend 类库,然后初始化 Zend_Http_Client 类的一个实例。为此客户提供所需的用户身份验证信息,并打开到 Picasa 服务的一个验证过的连接。一旦这个验证过的连接打开,getAlbumFeed() 方法就会被用来检索此相册提要。此方法接受一个 AlbumQuery 对象,此对象由如下两个参数配置:
对 getAlbumFeed() API 调用的响应是一个 XML 提要,这个提要类似于 清单 1 中的那个,并随后被解析和转换成一个 PHP 对象。此对象公开 getter 和 setter 方法,这就让通过对象/属性注释从 XML 提要内的节点检索特定的信息块变得十分容易。例如,getSummary() 方法检索照片汇总,而 getGphotoSize() 方法则检索以字节为单位的照片大小。
图 4 展示了输出结果:
图 4. 列出相册内照片的 Web 页