日本看板


 
标题: RailsでFlickrを遊ぼう!
  本主题由 admin 于 2008-3-16 16:11 移动 
admin (蕨菜)
一代文豪
Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5


UID 1
精华 1
积分 13799
帖子 4848
威望 190
金钱 24375
慈善捐款(日元) 400
阅读权限 200
注册 2007-3-25
 
发表于 2007-9-17 20:02  资料  个人空间  短消息  加为好友 
RailsでFlickrを遊ぼう!

Ruby on Railsサイトには、Flickrのインタフェースを5分で作ってしまうというデモビデオがあります(screencasts)。ちょっと感動したので自分でも同じものを作ってみました。手順を書いておきます。

まず、自分はRailsの環境としてLocomotiveを使っていたのですが、flickr libraryの取得がうまくできなかったので、AWDwRで紹介のあったこちらのサイトで環境を再構築しました。

  • 1. Flickr API keyの取得
Flickr APIを利用するためには、flickrのサイトよりAPI keyを取得する必要があります。簡単な必要事項を入力すれば直ちにkeyが発行されます。公開サーバーでAPIを利用する場合はconfigurationが必要になりますが、ローカルで遊ぶだけなら必要ありません。
  • 2. flickrプロジェクトの作成
flickrという名前でrailsのプロジェクトを作成します。
  >rails flickr
  • 3. flickr libraryのインストール
rubyでflickr APIを使うためのライブラリFlickrをインストールします。
  >sudo gem install flickr
  • 4. 環境設定
flickr libraryを使えるように、configディレクトリにあるenvironment.rbの最後に以下を追加する。
  require 'flickr'
  • 5. application.rhtmlの作成
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>
  • 6. flickr.cssの作成
public/stylesheetsディレクトリにflickr.cssを作成し、application.rhtmlのスタイルを記述する。
  body {        background-color: #888;        font-family: Lucida Grande;        font-size: 11px;        margin: 25px;  }
  • 7. flickr controllerの作成
flickrという名前でcontrollerを作成する。
  > ruby script/generate controller flickr
  • 8. index.rhtmlの作成
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
  • 11. search methodの実装
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
  • 12. _photo.rhtmlの作成
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;  }
  • 14. 表示の確認
ブラウザをリロードし、検索ワード'rubyconf'を入れて表示を確かめる。
  • 15. index.rhtmlの修正
(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;  }
  • 17. spinner.gifの入手
こちらなどからspinner.gifを入手し、public/imagesディレクトリにコピー。
  • 18. 完成
ブラウザをリロードし試してみてください。僕の環境ではちょっと動作が重いですが、なかなか楽しめそうです。enjoy!






人生吧,0岁出场,10岁快乐成长,20岁为情彷徨,30岁基本定方向,40岁拼命打闯,50岁回头望望,
60岁告老还乡,70岁搓搓麻将,80岁晒晒太阳,90岁躺在床上,100岁挂在墙上・・・・・・
顶部
admin (蕨菜)
一代文豪
Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5


UID 1
精华 1
积分 13799
帖子 4848
威望 190
金钱 24375
慈善捐款(日元) 400
阅读权限 200
注册 2007-3-25
 
发表于 2007-9-17 20:04  资料  个人空间  短消息  加为好友 
Flickr on Railsをいじる

昨日Railsで作ったFlickrインタフェースを少し改良してみました。改良点は以下の通り。

flickrの特定ユーザを検索し、そのコレクションを表示できるようにする。
1つの検索インタフェースを使って、タグおよびユーザの両方の検索が切り替えでできるようにする。
表示レイアウトにタイトルバーナーを追加する。
手順は以下の通り。



1. select_tagの追加
検索の対象を選択するために、select_tagをindex.rhtmlの<fieldset>に追加する。選択肢はoptions_for_selectで記述する。

  <fieldset>
     <label for="tags">Tags:</label>
     <%= select_tag 'kind', options_for_select({'tag' => 'search_tag','user' => 'search_user'}) %>
     <%= text_field_tag 'tags' %>
     <%= submit_tag 'Find' %>
  </fieldset>

2. form_remote_tagの修正
select_tagで選択した対象(tag or user)をsearch methodに渡せるようにform_remote_tagを修正する。

  <%= form_remote_tag :url => {:action => 'search', :params => params[:kind]},
                :update => 'photos',
                   :complete => visual_effect(:blind_down, 'photos'),
                :before => %(Element.show('spinner')),
                :success => %(Element.hide('spinner')) %>

3. search methodの修正
select_tagでの選択肢によって処理を切り分けるためにcase文を使う。こちらにあったFlickr.rbのmethodを参照にしてsearch_user内の処理を記述する。

  def search
    flickr = Flickr.new 'your flickr API key'
   
    case params[:kind]
    when "search_tag"
      render :partial => "photo",
                 :collection => flickr.photos(:tags => params[:tags], :per_page => '30')
    when "search_user"
      user = flickr.users(params[:tags])
      render :partial => "photo", :collection => user.photos   
    end
  end

4. application.rhtmlの修正
タイトルバナーを表示するように、application.rhtmlの<body>を修正する。

  <body>
        <div id="banner">
                My Flickr
        </div>
        <div id="main">
                <%= yield %>
        </div>
  </body>

5. flickr.cssの修正
application.rhtmlに追加したbanner, mainのスタイルをflickr.cssに記述する。

  #banner {
    background: #C0C0C0;
    padding-top: 10px;
    padding-bottom: 10px;
    border-bottom: 2px solid;
    font: small-caps 40px/40px "Times New Roman", serif;
    color: #A52A2A;
    text-align: center;
  }

  #main {
    margin-left: 0em;
    padding-top: 2ex;
    padding-left: 2em;
    background: white;
  }

6. 完了
ブラウザでhttp://localhost:3000/flickrにアクセスし表示を確認。タブでtagまたはuserを選択し検索ワードを入れて検索。動いているようです。select_tagで選択した対象をsearch methodに渡す方法が分からずに悩みました。入力した検索ワードがヒットしない場合に、画面上にrailsのエラーメッセージが出てしまいます。これも直したいです。



Flickrインタフェースをさらに少し改良してみました。改良点は写真をオーバーレイ表示する機能の追加です。ネットを検索したらLightbox JSというスクリプトを使って既にこれを実現しているサイトがありましたので利用させて頂きました。

Seb Blog - Home

手順は以下の通り。

1. Lightbox JSを入手
こちらのサイトからLightbox JS v2.0をダウンロードする。

2. 必要ファイルをflickrプロジェクトにコピー
以下のファイルをプロジェクトの対応ディレクトリにコピーする。

lightbox.css => public/stylesheets/

lightbox.js => public/javascripts/

image-1.jpg, thumb-1.jpg以外のすべてのイメージファイル => public/images/

3. application.rhtmlの修正
lightbox.css, lightbox.jsを参照するようapplication.rhtmlの対応箇所に追加する。

<%= javascript_include_tag :defaults, 'lightbox' %>
<%= stylesheet_link_tag 'flickr', 'lightbox' %>

4. Lightboxリンクの作成
表示される写真にLightboxのリンクが貼られるように_photo.rhtmlを修正する。

<a href="<%= photo.sizes[3]['source'] %>" rel="lightbox"><img class="photo" src="<%= photo.sizes[0]['source'] %>"/></a>

5. index.rhtmlの修正
Lightboxが初期化されるようにindex.rhtmlにおけるform_remote_tagのcompleteオプションを修正する。

:complete => visual_effect(:blind_down, 'photos') + %(new Lightbox())

6.lightbox.jsの修正

var fileLoadingImage = "../images/loading.gif";               
var fileBottomNavCloseImage = "../images/closelabel.gif";





人生吧,0岁出场,10岁快乐成长,20岁为情彷徨,30岁基本定方向,40岁拼命打闯,50岁回头望望,
60岁告老还乡,70岁搓搓麻将,80岁晒晒太阳,90岁躺在床上,100岁挂在墙上・・・・・・
顶部
 



当前时区 GMT+9, 现在时间是 2008-10-7 23:35

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
清除 Cookies - 联系我们 - 日本看板 - Archiver