幸ログ

ナレッジを溜めていきます

flickrawでアップロードするRubyスクリプトを書いてみた


なぜ?????

Flickrを使ってる僕はいつもアップロードする作業がとてもめんどくさいものでした。
アップロード作業をもっと楽したいなぁと思ったのでRubyで自動アップロードするスクリプトを作りました。
これで僕はサボれる!!!←


準備

まずは環境を整えましょう

FlickrAPIの取得

この話は[Ruby] RubyでFlickr APIを使って画像検索を参考してください。

flickrawの詳しいことはGithubを参考にしてください。

tokenとsecretの取得

下記のコードを実行することでtokenとsecretが取得できます。

# -*- coding: utf-8 -*-
require 'flickraw'

FlickRaw.api_key="your api_key"
FlickRaw.shared_secret="your shared_secret"

token = flickr.get_request_token
auth_url = flickr.get_authorize_url(token['oauth_token'], :perms => 'delete')

puts 'このURLをブラウザで開いて認証プロセスを完了させてください : '
puts '認証完了後、ブラウザに表示された数字を含む文字列を下にペーストしてください'
verify = gets.strip

begin
  flickr.get_access_token(token['oauth_token'], token['oauth_token_secret'], verify)
  login = flickr.test.login
  puts '認証完了 ユーザ名-> #{login.username} token-> #{flickr.access_token} secret-> #{flickr.access_secret}';
rescue FlickRaw::FailedResponse => e
  puts '認証失敗 : #{e.msg}';
end

flickrawの導入

gemコマンドでインストールできます。

$gem install fickraw

コーディング

Flickr_uploads.rb

#-*- coding: utf-8 -*-
require 'flickraw'
require 'rubygems'

def makedir()
  puts 'カレントディレクトリにuploadsフォルダがあるか調べています…'
  if File::exists?('uploads') == false 
    Dir::mkdir('./uploads')
    puts 'カレントディレクトリにuploadsディレクトリを作りました'
  else
    puts 'uploadsディレクトリの確認が出来ました。'
  end
end

class MyFlickr < FlickRaw::Flickr

  def initialize
    FlickRaw.api_key ='your api_key'
    FlickRaw.shared_secret = 'your shared_secret'
    @flickr = FlickRaw::Flickr.new
    @flickr.access_token = 'your access_token'
    @flickr.access_secret = 'access_secret'
  end

  def upload_photos(path = './uploads')
    makedir
    #カレントディレクトリの移動
    Dir.chdir(path)
    p Dir.pwd
    #Dir.globでパターンにマッチするファイル名を文字列の配列として返す File::FNM_CASEFOLDは大文字小文字を区別しないようにするためのもの
    Dir.glob('*.{jpg,jpeg,png}',File::FNM_CASEFOLD).each do |file|
      begin
        #自分のphotostreamにアップロードする画像がないかどうかを調べる
        photo = @flickr.photos.search(:user_id => 'your account', :text => '#{file}')

        #photoのオブジェクトをto_aで配列に変換し、空か判定する true=>アップロードの開始 false=>すでにアップロードされている
        if photo.to_a.empty? then
          @flickr.upload_photo '#{file}', :title => '#{file}', :is_public => 0, :is_friend => 0, :is_family => 0
          puts '#{Time.now} upload success #{file}'
        else
          puts '#{file} is already uploaded.'
        end
        #例外処理が起こった場合
      rescue => ex
        puts '#{Time.now} error'
        puts ex.message
      end
    end
  end
end

upload_to_Flickr.rb

#-*- coding: utf-8 -*-
require 'rubygems'
require 'flickraw'

#ロードパスにカレントディレクトを追加
$:.unshift File.dirname(__FILE__)
require './Flickr_uploads.rb'

myflickr_uploads = MyFlickr.new
myflickr_uploads.upload_photos

アップロードする画像データ(jpg,jpeg,png)をuploadsディレクリに移動し、 upload_to_Flickr.rbを実行すればアップロードされます。 ※uploadsディレクトリがない場合は作成されます。

以上です。