読者です 読者をやめる 読者になる 読者になる

Flickr APIで著作権フリーの画像を取得

rails gem ruby flickr api

Flickr API Documentation

まずはFlickrAPIについてお勉強。

Flickr Service

ドキュメントめちゃ充実してるので必ず確認。

Flickraw Documentation

rubyのgemはいくつかあるが一番メジャーなflickrawを使う。

RDoc Documentation

こちらも各メソッドごとに詳細なドキュメントがあるので便利。

Setup手順

  1. accounts作成
  2. api keyを作成
  3. Authentication
    • 下記参照。access_token/access_secretを取得。 これでひと通りの準備は完了。

Authentication

アカウントを作って、api keyを手に入れたら、認証を行います。access_token/access_secret取得のためです。 このまま使わずkey/secretを入れてくださいね。

require 'flickraw'
FlickRaw.api_key="-- api key --"
FlickRaw.shared_secret="-- secret --"

token = flickr.get_request_token
auth_url = flickr.get_authorize_url(token['oauth_token'], :perms => 'delete')
puts "Open this url in your process to complete the authication process : #{auth_url}"
puts "Copy here the number given when you complete the process."
verify = gets.strip

begin
  flickr.get_access_token(token['oauth_token'], token['oauth_token_secret'], verify)
  login = flickr.test.login
  puts "You are now authenticated as #{login.username} with token #{flickr.access_token} and secret #{flickr.access_secret}"
rescue FlickRaw::FailedResponse => e
  puts "Authentication failed : #{e.msg}"
end

これを実行すると

Open this url in your process to complete the authication process : http://www.flickr.com/services/oauth/authorize?oauth_token=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&perms=delete
Copy here the number given when you complete the process.

って言われるのでurlをブラウザで開く。そうすると番号(xxx-xxx-xxx)が出てくるのでそれをターミナルに貼ると

You are now authenticated as dev_grood with token XXXXXXXXXXXXXX-XXXXXXXXX and secret XXXXXXXXXXXXXX

そうすると無事に access_tokenとaccess_secretをゲット。 authenticationについての詳しい内容はこちら

railsでの使用例

flickrawをgemfileに追加&bundle installしたら、

  def flickr_search(word)
    FlickRaw.api_key       = Settings.flickr_api_key
    FlickRaw.shared_secret = Settings.flickr_shared_secret
    flickr.access_token    = Settings.flickr_access_token
    flickr.access_secret   = Settings.flickr_access_secret
    flickr.test.login
    @photos = flickr.photos.search(text: word, license:"1,2,3,4,5,6")
  end

photosの中身は、

[
{"id"=>"4468814441", "owner"=>"10519936@N07", "secret"=>"65580f2645", "server"=>"2752", "farm"=>3, "title"=>"China_12-10-07_273.jpg", "ispublic"=>1, "isfriend"=>0, "isfamily"=>0}, 
{"id"=>"3930972474", "owner"=>"29925020@N03", "secret"=>"35b2474f29", "server"=>"3446", "farm"=>4, "title"=>"China Backpacking Trip", "ispublic"=>1, "isfriend"=>0, "isfamily"=>0}, 
・・・
]

こんな感じのものがかえってきます。

Flickrは画像のURLがここではかえってこず、パラメータを組み合わせてURLを作ってあげる必要があるのがちょっと面倒。なので

- @photos.each do |photo|
    - url = "http://farm#{photo.farm}.static.flickr.com/#{photo.server}/#{photo.id}_#{photo.secret}_m.jpg"
    = image_tag(url)

viewでこんな感じにurlを作ってimage_tag(url)として表示。できたー。

CC = Creative Commonsについて

flickrには写真ごとにライセンスがあって、ブログなどで使う場合には、それを正しく確認しておかないといけません。

{"id"=>"0", "name"=>"All Rights Reserved", "url"=>""}
{"id"=>"1", "name"=>"Attribution-NonCommercial-ShareAlike License", "url"=>"http://creativecommons.org/licenses/by-nc-sa/2.0/"}
{"id"=>"2", "name"=>"Attribution-NonCommercial License", "url"=>"http://creativecommons.org/licenses/by-nc/2.0/"}
{"id"=>"3", "name"=>"Attribution-NonCommercial-NoDerivs License", "url"=>"http://creativecommons.org/licenses/by-nc-nd/2.0/"}
{"id"=>"4", "name"=>"Attribution License", "url"=>"http://creativecommons.org/licenses/by/2.0/"}
{"id"=>"5", "name"=>"Attribution-ShareAlike License", "url"=>"http://creativecommons.org/licenses/by-sa/2.0/"}
{"id"=>"6", "name"=>"Attribution-NoDerivs License", "url"=>"http://creativecommons.org/licenses/by-nd/2.0/"}
{"id"=>"7", "name"=>"No known copyright restrictions", "url"=>"http://www.flickr.com/commons/usage/"}
{"id"=>"8", "name"=>"United States Government Work", "url"=>"http://www.usa.gov/copyright.shtml"}
 
↓見難いので整形
 
0. All Rights Reserved
1. Attribution-NonCommercial-ShareAlike License
2. Attribution-NonCommercial License
3. Attribution-NonCommercial-NoDerivs License
4. Attribution License
5. Attribution-ShareAlike License
6. Attribution-NoDerivs License
7. No known copyright restrictions
8. United States Government Work
 

商用の場合、4,5,6 商用でなければ、1,2,3,4,5,6

といったところがfreeで使える可能性のあるライセンスとなります。

区分けについて日本語ではこちらにいろいろ書いてあるのでご参考:

Flickrで著作権的に問題のない画像を見つけて公開する方法 - 涙目で仕事しないSE

参考