酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

[Gem] FlickrawでFlickrに画像を簡単アップロード/ダウンロード [Rails]

Where?Flickr APIを簡単に扱うことができるgem Flickrawの紹介です。今回は例として、Webサイトから画像をダウンロードして、その画像を指定サイズにリサイズ&トリミングして、Flickrにアップロードするまでの流れを作ってみます。

Flickraw


あらすじ

今回の話の流れっす。

(1) Gemのインストール
(2) FlickrでApp KeyとApp Secretの取得
(3) Access Token/Access Secretの取得(Flickr APIの認証)
(4) 画像をDL => リサイズ/トリミング => Flickrにアップ

(1) Gemのインストール

いつもどおりGemfileに以下を追加して、bundle installを実行してください。

1
2
3
4
group :development do
  # Flickrライブラリ
  gem 'flickraw', require: "flickraw"
end

(2) App KeyとApp Secretの取得

A. ブラウザでFlickrにアクセスしてログイン

B. Apps on Flickr - Application Sharing!にアクセスして、App Keyを作成。するとついてにSecret(Shared Secret)も取得できます。

(3) Access Token/Access Secretの取得(Flickr APIの認証)

ターミナルでRailsアプリのプロジェクトフォルダに移動して、rails cを実行してから以下を順番に実行していきます。

1
2
3
4
5
6
7
FlickRaw.api_key="API Keyを貼り付け"
FlickRaw.shared_secret="Shared Secretを貼り付け"

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

puts auth_url #=> http://www.flickr.com/services/apps/xxxxxx/key

最後に出てきたurlをブラウザで開きます。するとアプリの認証画面が出てくるのでOKボタンを押して下さい。

ボタンを押すと番号が出ます。ターミナルに戻ってその番号を貼り付けます。

1
2
3
4
5
6
7
verify = "番号を貼り付け".strip

flickr.get_access_token(token['oauth_token'], token['oauth_token_secret'], verify)
login = flickr.test.login

puts flickr.access_token #<= Access Tokenです。メモして下さい。
puts flickr.access_secret #<= Access Secretです。メモして下さい。

access_tokenとaccess_secretが取得できました!

(4) 画像をDL => リサイズ/トリミング => Flickrにアップ

続いてWeb上の画像をダウンロードするRubyコードです。
(RMagickをつかっているのでまだだったらインストールお願いします!)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# -*- coding: utf-8 -*-
require 'flickraw'
require 'open-uri'
require 'RMagick'

# Web上の画像をダウンロード
url = "http://farm7.staticflickr.com/6053/6312937936_cebaf2feb9_b.jpg"
res = open(url)

# 画像をリサイズ/中央を中心にトリミング
file_path = "sample.jpg"
if res.content_type =~ /^image/
    picture = Magick::Image.from_blob(res.read).shift
    width = 300
    height = 200
    image = picture.resize_to_fill(width, height)
    image.write(file_path)
end
return nil unless file_path

FlickRaw.api_key="API Keyを貼り付け"
FlickRaw.shared_secret="Shared Secretを貼り付け"
flickr.access_token = "Access Tokenを貼り付け"
flickr.access_secret = "Access Secretを貼り付け"

login = flickr.test.login
photo_id = flickr.upload_photo file_path, :title => "Title", :description => "This is the description"
return nil unless photo_id

info = flickr.photos.getInfo(:photo_id => photo_id)
puts FlickRaw.url_o(info) #=> http://farmx.staticflickr.com/xxxx/xxxxxxxxxxxx_o.jpgとなっていれば成功

サンプルの実行結果です。元ファイルは500x333の画像です。

dog

変換後の画像は、300x200になっています。

Title

実際にはFlickrawはもっといろんなことができます。ご興味があれば公式ページへ!

Flickraw

まとめ

もう終わってたらごめんなさいですが、Flickrでは3ヶ月無料でProアカウントが使えるキャンペーンをやっているなどユーザーフレンドリーなサービスです。もしチャンスがあればぜひチャレンしてみて下さい!

Special Thanks

Flickraw 公式

rubyでFlickrに全写真アップロード - yuyunko’s blog

Flickr の Set 内の写真一覧を更新する Ruby スクリプトを作った - てっく煮ブログ

おすすめの書籍