Ruby on Railsサイトには、Flickrの
インタフェースを5分で作ってしまうというデモビデオがあります(
screencasts)。ちょっと感動したので自分でも同じものを作ってみました。手順を書いておきます。
まず、自分はRailsの環境としてLocomotiveを使っていたのですが、flickr libraryの取得がうまくできなかったので、
AWDwRで紹介のあった
こちらのサイトで環境を再構築しました。
Flickr APIを利用するためには、
flickrのサイトよりAPI keyを取得する必要があります。簡単な必要事項を入力すれば直ちにkeyが発行されます。公開サーバーでAPIを利用する場合はconfigurationが必要になりますが、ローカルで遊ぶだけなら必要ありません。
flickrという名前でrailsのプロジェクトを作成します。
>rails flickr
rubyでflickr APIを使うための
ライブラリFlickrをインストールします。
>sudo gem install flickr
flickr libraryを使えるように、config
ディレクトリにあるenvironment.rbの最後に以下を追加する。
require 'flickr'
viewのlayoutディレクトリ内に、以下のapplication.rhtmlファイルを作成する。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-type" c /> <title>Flickr</title> <%= javascript_include_tag :defaults %> <%= stylesheet_link_tag 'flickr' %> </head> <body> <%= yield %> </body> </html>
public/stylesheetsディレクトリにflickr.cssを作成し、application.rhtmlのスタイルを記述する。
body { background-color: #888; font-family: Lucida Grande; font-size: 11px; margin: 25px; }
flickrという名前でcontrollerを作成する。
> ruby script/generate controller flickr
views/flickrディレクトリにindex.rhtmlを作成し、以下を記述する。
<%= form_remote_tag :url => {:action => 'search'}, :update => 'photos' %> <fieldset> <label for="tags">Tags:</label> <%= text_field_tag 'tags' %> <%= submit_tag 'Find' %> </fieldset> <div id="photos"></div> <%= end_form_tag %>
- 9. index.rhtmlに対するスタイルをflickr.cssに記述する。
form { margin: 0; margin-bottom: 10px; background-color: #eee; border: 5px solid #333; padding: 25px; } fieldset { border: none; }
- 10. サーバーの起動
- ruby script/server -b=xxx.xxx.xxx.xxx -p=xxxx
サーバーを起動し、
http://localhost:3000/flickrにアクセスして表示を確かめる。
>ruby script/server
controllersディレクトリ内のflickr_controller.rbにsearch methodを記述する。1.で取得したFlickr API keyをFlickr.newのパラメータとして渡す。
def search flickr = Flickr.new 'your flickr API key' render :partial => "photo", :collection => flickr.photos(:tags => params[:tags], :per_page => '24') end
indexのpartial viewとして、views/flickrディレクトリに_photo.rhtmlを作成し、以下を記述する。
<img class="photo" src="<%= photo.sizes[0]['source'] %>">
- 13. _photo.rhtmlに対するスタイルをflickr.cssに記述する。
#photos img { border: 1px solid #000; width: 75px; height:75px; margin: 5px; }
ブラウザをリロードし、検索ワード'rubyconf'を入れて表示を確かめる。
(1)表示エフェクトの追加,(2)spinner.
gif(データロード待ちの間くるくる回っているやつ)の表示のためにindex.rhtmlを以下のように修正する。
<%= form_remote_tag :url => {:action => 'search'}, :update => 'photos', :complete => visual_effect(:blind_down, 'photos'), :before => %(Element.show('spinner')), :success => %(Element.hide('spinner')) %> <%= image_tag 'spinner.gif', :id => 'spinner', :style => 'display: none' %> <fieldset> <label for="tags">Tags:</label> <%= text_field_tag 'tags' %> <%= submit_tag 'Find' %> </fieldset> <div id="photos" style="display: none"></div> <%= end_form_tag %>
- 16. spinnerのスタイルをflickr.cssに記述する。
#spinner { float: right; margin: 10px; }
こちらなどからspinner.gifを入手し、public/imagesディレクトリにコピー。
ブラウザをリロードし試してみてください。僕の環境ではちょっと動作が重いですが、なかなか楽しめそうです。enjoy!
