HikiのFlickrプラグインを書いてみた

使い方の説明が不親切だったので書き直しました。あとバージョンアップもしたのですが、ファイルが複数になったので公開できる場所ができたら最新版を公開します。

{{ simple_flickr photo_id, [:square|:thumbnail|:small|:medium|:large|:original], [true|false] }}

引数の1つ目(photo_id)

Flickrのphoto idで、Flickrの写真固有のページのURLの最後の部分がそれに当たる。

引数の2つ目(size)

表示するときの画像のサイズ。デフォルト値は :medium になっている。以下のサイズが指定できる。

:square or :s
画像を正方形に小さく表示(75x75)
:thumbnail or :t
サムネイル表示。最長の辺が100px
:small or :m
最長の辺が240px
:medium
最長の辺が500px
:large or :b
最長の辺が1024px(オリジナルのサイズが大きい画像のみで有効)
:original or :o
オリジナルの画像サイズ、形式で表示。

みたいな感じで使う。まだ要望があれば機能拡張する予定。

3つ目の引数(link_to_flickr)

Flickrの写真固有のページにリンクを張るかどうか。デフォルト値は true になっている。

以下ソース

require 'xmlrpc/client'
require 'rexml/document'

def simple_flickr photo_id, size = :medium, link_to_flickr = true
  api_key = @options['flickr_api_key']

  server = XMLRPC::Client.new('api.flickr.com', '/services/xmlrpc')
  res =  server.call('flickr.photos.getInfo', :api_key => api_key, :photo_id => photo_id.to_s)
  xml = REXML::Document.new(res)
  size = size.to_sym
  sizes = {
    :square => '_s', :s => '_s',
    :thumbnail => '_t', :t => '_t',
    :small => '_m', :m => '_m',
    :medium => '',
    :large => '_b', :b => '_b',
    :original => '_o', :o => '_o'
  }
  a = xml.root.attributes
  a_tag = '<a href="' + xml.elements['photo/urls/url'].text + '" target="_blank">'
  img_tag = %Q(<img src="http://farm#{a['farm']}.static.flickr.com/#{a['server']}/#{a['id']}_#{a['secret']}#{sizes[size]}.jpg">)
  if link_to_flickr
    a_tag + img_tag + '</a>'
  else
    img_tag
  end
end