前回の続き。 今回は任意のアルバムから写真の情報を取得する。

写真情報の取得

your_album_nameアルバムから取得する場合は以下のような感じ。

require 'picasa'

client = Picasa::Client.new(
  user_id: 'your@email',
  access_token: 'your_access_token'
)

albums = client.album.list.entries
album = albums.find { |a| a.title == 'your_album_name' }

photos = client.album.show(album.id).entries

photos.each do |photo|
  puts "#{photo.id}, #{photo.exif.time}, #{photo.title}, #{photo.exif.model}"
end

Exif情報から撮影機器のモデル名を取得することもできた。 これで最初にやりたかったことはほぼできたが、 このスクリプトだと1000枚しか処理できないという欠点があるのでもう少し続ける。

大量の写真情報の取得

start-indexオプションを使って以下のように書くことで、1000枚以上の写真を処理することができる。 ただし、start-indexの最大値は10001らしいので、この方法でも11000枚までしか処理できない。 11000枚で十分事足りたので、この対処法までは調べていない。

PAGE_NUM_MAX = 11

page_num = [album.numphotos / 1000, PAGE_NUM_MAX].min

page_num.times do |page|
  opt = {}
  opt['start-index'] = page * 1000 + 1
  photos = client.album.show(album.id, opt).entries
  photos.each do |photo|
    puts "#{photo.id}, #{photo.exif.time}, #{photo.title}, #{photo.exif.model}"
  end
end

albumの指定まではこれまでと変わらないので省略した。