flickrjはいけそうだ

flickrj(http://sourceforge.net/projects/flickrj/)はいい感じです。Ruby用に作られたいくつかのFlickr API Kitに比べると冗長なところはありますが、機能的な問題はなさそうです。JRubyから無事にアップロードや検索ができました。

require 'java'

import 'java.io.FileInputStream'
import 'com.aetrion.flickr.Flickr'
import 'com.aetrion.flickr.RequestContext'
import 'com.aetrion.flickr.REST'
import 'com.aetrion.flickr.auth.Permission'
import 'com.aetrion.flickr.photos.SearchParameters'
import 'com.aetrion.flickr.uploader.Uploader'
import 'com.aetrion.flickr.uploader.UploadMetaData'

API_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
SHARED_SECRET = 'XXXXXXXXXXXXXXXX'
AUTH_TOKEN = nil
PROXY_HOST = nil
PROXY_PORT = nil

rest = REST.new
if PROXY_HOST != nil && PROXY_HOST != ''
  rest.setProxy(PROXY_HOST, PROXY_PORT)
end

flickr = Flickr.new(API_KEY, rest)

authInterface = flickr.getAuthInterface
requestContext = RequestContext.getRequestContext
requestContext.setSharedSecret(SHARED_SECRET)
if AUTH_TOKEN != nil && AUTH_TOKEN != ''
  auth = authInterface.checkToken(AUTH_TOKEN)
else
  frob = authInterface.frob
  url = authInterface.buildAuthenticationUrl(Permission::WRITE, frob)
  p url.to_s
  gets
  auth = authInterface.getToken(frob)
end
requestContext.setAuth(auth)

uploader = Uploader.new(API_KEY, rest)
meta = UploadMetaData.new
meta.title = 'test!'
file = FileInputStream.new('XXXXXXXX.jpg')
uploader.upload(file, meta)
file.close

nsid = flickr.getPeopleInterface.findByUsername('shakiyam').getId

param = SearchParameters.new
param.setUserId(nsid)
param.setExtrasDateTaken(true)
flickr.getPhotosInterface.search(param, 10, 0).each do |photo|
  puts "#{photo.title} #{photo.getDateTaken}"
end

P.S. jickrは"This project is currently suspended"とあったのでダメですね。