用JSONP调用Picasa API

标签:Google, JavaScript

最近发现那个图像上传服务每天都要用掉1G流量,有点吃不消,于是准备转战Picasa相册了。

实际上由于提供了Picasa软件,我也懒得使用它的API来上传了,毕竟要装的东西太多了,而且我懒得和XML打交道。
不过Picasa API还能做些别的事,然而文档上全是XML的。由于懒得处理跨域,所以我直接就无视了。
Google上搜索了一下,发现加上alt=json参数就能以JSON输出了,于是就尝试了一下。

首先是这个最重要的地址:
http://picasaweb.google.com/data/feed/api/user/<USERID>
把<USERID>换成你自己的ID,就能显示你的Picasa账号信息了,例如:http://picasaweb.google.com/data/feed/api/user/keakon

接着是2个可选参数:
  • kind:指定类别(ablum、photo、comment、tag、user)
  • access:指定相册的可见性(all、public、private)

先给个查相册标题(ablum)的例子:
<script type="text/javascript">
function ablumName(json) {
  alert(eval(json).feed.entry[0].title.$t); // eval(json).feed.entry[0].gphoto$name.$t 可以拿到相册名
}
</script>
<script src="http://picasaweb.google.com/data/feed/api/user/keakon?kind=album&alt=json&callback=ablumName"></script>
由于我只创建了一个相册,所以我取的是entry[0],然后会拿到其相册标题(收集)。
简单起见,我并没用jQuery。可以看到,我请求的url最后给了个callback参数,当JSON对象返回时,它就作为参数传入ablumName函数了。嘛,毫无技术含量,就不解释了~

接着就来拿图像(photo)了。
虽然直接获取图像也是可以的,但一般会根据图像隶属的相册来获取,此时就要给出相册ID了。
如果相册标题是英文和数字的话,相册标题和相册名是一样的,可我用的是中文的相册标题,所以要像上面的方法拿到相册名。
或者你直接进相册,url的最后一段就是了,例如:
http://picasaweb.google.com/keakon/XqOCTI#
接着只要访问这个地址,就能拿到图像了:
http://picasaweb.google.com/data/feed/api/user/<USERID>/album/<ALBUMNAME>?kind=photo
此外还能使用相册ID:
http://picasaweb.google.com/data/feed/api/user/<USERID>/albumid/<ALBUMID>?kind=photo

于是看这个例子:
<script type="text/javascript">
function showImg(json) {
  document.write('<img src="' + eval(json).feed.entry[0].content.src + '" \/>'); // eval(json).feed.entry[0].gphoto$id.$t可以拿到图像ID
}
</script>
<script src="http://picasaweb.google.com/data/feed/api/user/keakon/album/XqOCTI?kind=photo&alt=json&callback=showImg"></script>
我在XqOCTI这个相册里取了第一张图,然后将其显示了出来。

当然也能直接根据相册名/ID+图像ID来查图像信息。
例如5321455200519321058这个图像ID,就可以查询这个地址:
http://picasaweb.google.com/data/feed/api/user/keakon/album/XqOCTI/photoid/5321455200519321058

而且还有强大的搜索功能,例如下面这个地址:
http://picasaweb.google.com/data/feed/api/user/keakon/album/XqOCTI?q=女仆

这2个的例子就不给了,没什么特别的。
详细信息可以查看Picasa Web Albums Data API文档

总之,大致的使用就是这样。有兴趣的可以自己研究下返回的数据,还能拿到非常多的信息。

0条评论 你不来一发么↓

    想说点什么呢?