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ディレクトリがない場合は作成されます。
以上です。