yuyunko's blog

ぼうびろく

rubyでFlickrに全写真アップロード

いよいよFlickrに全写真をアップロード。

Flickr.rb

# -*- encoding: utf-8 -*-
require 'pp'
require 'rubygems'

require 'flickraw'

class MyFlickr < FlickRaw::Flickr

    API_KEY=''
    SHARED_SECRET=''
    ACCESS_TOKEN=''
    ACCESS_SECRET=''

    def initialize
        FlickRaw.api_key = API_KEY
        FlickRaw.shared_secret = SHARED_SECRET
        @flickr = FlickRaw::Flickr.new
        @flickr.access_token = ACCESS_TOKEN
        @flickr.access_secret = ACCESS_SECRET
    end

    def uploadPhotos(path=".")
        Dir.chdir(path)
        pp Dir.pwd
        Dir.glob('*.{jpg,jpeg,png}',File::FNM_CASEFOLD).each do |f|
            puts "#{f}"
            begin
                photo = @flickr.photos.search(:user_id => 'me', :text => "#{f}")

                if photo.to_a.empty? then
                    @flickr.upload_photo "#{f}", :title => "#{f}", :is_public => 0, :is_friend => 0, :is_family => 0
                    puts "#{Time.now} upload success #{f}"
                else
                    puts "#{f} is already uploaded."
                end
            rescue => ex
                puts "#{Time.now} error raised"
                puts ex.message
            end
        end
    end
end

uploadFlickr.rb

# -*- encoding: utf-8 -*-
require 'pp'
require 'rubygems'

require 'flickraw'

$:.unshift(File.dirname(__FILE__))
# http://cyakarin.kuronowish.com/index.cgi?path
require './Flickr.rb'

myflickr = MyFlickr.new
if ARGV.size == 1 then
    myflickr.uploadPhotos ARGV[0]
else
    myflickr.uploadPhotos
end

これでFlickrに写真を全てアップロード出来る。
既にアップロードされているかどうかを毎回検索してアップロードされて
いなければアップロードする、という処理を行なっている。
なので非常に遅い・・・。

次はアップロードされている写真をsqliteかなんかのDBに格納しておいて、
そのDBと比較してアップするか否かを決める方針にしたい。