虽然不太常用网络相册,但是有时候也会把照片传到 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 后就可以用脚本批量上传照片了。总是比在网页上一个一个地传要方便许多的。 🙂
其实 wine 的 picasa 还是挺好用的 🙂
至少我用来简单处理照片很方便,界面也不丑
@zhuli
哈,我相信你说的不假,不过感觉好像许多 Linuxer 都有一种类似于“洁癖”的东西,比如我知道 KDE 下又许多工具很好用,但是除非实在是没有什么替代方案了,也不太想引入整个 KDE 系统,对于使用轻量级 DE 的许多用户来说,安装 Gnome 的一堆东西也会让人很不满意。wine 也是一样。
这真是一种奇怪的心理,也许有机会可以找懂心理学的朋友聊一聊是怎么回事。 🙂
我没洁癖……
抄了你这段代码用。
我改了点,用起来不像你的这么麻烦。将上传的照片都放到一个新album里,不要去找album id了。
代码在http://gist.github.com/144571
@kylexlau
恩,这样确实更方便了一些。 🙂