Categories

Poor Man’s Picasaweb Photo Uploading Script

虽然不太常用网络相册,但是有时候也会把照片传到 Picasaweb 上作为一个备份。如果安装了 Picasa 的话可以很方便地上传,另外,也有为 IE 做的 ActiveX 控件可以方便地批量上传照片。但是 Linux 下地 Picasa 据说是用 wine 模拟的,不想用,而浏览器也没有 ActiveX 可以用,手工一个一个地上传颇有一些麻烦。后来发现 Google 其实提供了它的各种服务的 API 的 Python binding 可以比较方便地使用,这样就可以弄一个脚本来上传了。

这个 API binding 叫做 gdata-python-client ,在 Arch Linux 下有一个 python-gdata 的包可以安装。它包含了诸如电子文档、电子表格、地图、YouTube、笔记本等许多服务的 API ,当然,也有 Picasaweb 的 API 。

按照它的文档,可以直接使用用户名密码的方式登录,也可以重定向到 Google 获取一个认证 Token 的方式,登录之后就可以对相册做一系列的操作了,比如列出所有相册、列出相册里的照片、查看照片和相册的元信息等,当然,还可以对相册做一系列的修改,包括新建相册和上传照片等。

有了这些工具,就可以很容易打造出批量上传照片的脚本了,比如下面这个 Poor Man’s Uploading Script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/python
 
import gdata.photos.service
import getpass
import socket
import glob
import sys
import os
 
if len(sys.argv) < 3:
    print 'Usage:'
    print '%s album_id pattern' % sys.argv[0]
    sys.exit(1)
 
album_id = sys.argv[1]
pattern  = os.path.expanduser(sys.argv[2])
username = raw_input('username: ') 
 
gd_client = gdata.photos.service.PhotosService()
gd_client.email = username + '@gmail.com'
gd_client.password = getpass.getpass()
gd_client.source = socket.gethostname()
gd_client.ProgrammaticLogin()
 
album_url = '/data/feed/api/user/%s/albumid/%s' % (username, album_id)
for f in glob.glob(pattern):
    print 'Uploading %s...' % f
    gd_client.InsertPhotoSimple(album_url, os.path.split(f)[-1],
        '', f)

之所以叫做是 Poor Man’s ,是因为实在是非常简陋,基本上就是 Google 的 API 的一层非常浅的包装(当然 Google 的 API 本身的封装好像也是比较“裸”的),原本我想至少做一个可以选择已有的相册或者创建新相册的,但是如果用命令行的那种提问、输入、回车的方式的话,不仅写起来麻烦,而且恐怕写好了我自己都不会想用;另一个选项就是做 GUI ,比如用 wxPython 或者 PyGTK 一类的东西,但是我已经好久好久没有做过 GUI 的东西了,现在总是觉得做 GUI 还是 Web 更方便的;然而如果再做一个本地的 Web 界面的话,肯定一做起来就想做得更加完善一些,比如元信息的编辑之类的加进去,到头来必然是重新发明轮子,因为 Picasaweb 本身的 Web 界面已经做得相当出色了。如果真的想要一个方便的本地界面的话,可以装上 Gnome 的一堆东西和 Mono 的另一堆东西用 F-Spot ,据说是可以支持上传到 picasa 的。

所以我最后就直接用了这么一个简陋的脚本:它要完成的任务就是把数据从本地转移到 Picasaweb 上,剩下的整理、元信息的编辑等全都直接回到 Picasaweb 的 web 页面上完成。使用起来略有点麻烦,在 web 上新建相册,从相册的 RSS 链接可以看到它的 Album ID ,是一串很长的数字,得到 ID 后就可以用脚本批量上传照片了。总是比在网页上一个一个地传要方便许多的。 🙂

5 comments to Poor Man’s Picasaweb Photo Uploading Script

  • 其实 wine 的 picasa 还是挺好用的 🙂

    至少我用来简单处理照片很方便,界面也不丑

  • @zhuli
    哈,我相信你说的不假,不过感觉好像许多 Linuxer 都有一种类似于“洁癖”的东西,比如我知道 KDE 下又许多工具很好用,但是除非实在是没有什么替代方案了,也不太想引入整个 KDE 系统,对于使用轻量级 DE 的许多用户来说,安装 Gnome 的一堆东西也会让人很不满意。wine 也是一样。

    这真是一种奇怪的心理,也许有机会可以找懂心理学的朋友聊一聊是怎么回事。 🙂

  • lnzju

    我没洁癖……

  • kylexlau

    抄了你这段代码用。

    我改了点,用起来不像你的这么麻烦。将上传的照片都放到一个新album里,不要去找album id了。

    代码在http://gist.github.com/144571

  • @kylexlau
    恩,这样确实更方便了一些。 🙂