ä½¿ç¨ Rails æå»º Flickr åºç¨
è´¡ç®è
ï¼Brian Leonard
2007 å¹´ 12 æ [修订å?·ï¼V6.0-6]
æ¬æç¨ä»ç»?å¦ä½å建ä¸ä¸ªæ?ç´¢ Flickr æ°æ?®åºç Ruby on Rails åºç¨ç¨åº?ã
注æ?ï¼ æ¬æç¨éè¦?ç´æ¥è¿æ¥Internetï¼å¦ææ¨æ£å¨ä½¿ç¨ä»£ç?ï¼åä¸?伿£å¸¸å·¥ä½ã
ç®å½
|
|
 |
æç¨éæ±
æ¬æç¨éè¦?使ç¨å¦ä¸ææ¯ï¼
è·å? Flickr API Key
æ¨å¿
é¡»æ API Key æ?è½ä½¿ç¨ Flickr APIã
- æå¼ web æµ?è§å¨ï¼è®¿é® http://www.flickr.com/services/api/misc.api_keys.htmlã
- ç¹å»âApply for your key online nowâ?ã
- æç
§æ¥éª¤è·å? Flickr Keyã
- å¤?å¶ Flickr çæ?ç API Keyï¼å¹¶å°å
¶ä¿?åå¨ææ¬æä»¶ä¸æå
¶ä»æ¹ä¾¿çä½?ç½®ã
å®è£
Flickr åº
- å¨âå·¥å
·â?è?å?ä¸éæ©âRuby Gemsâ?ã
- å¨âRuby Gemsâ?对è¯?æ¡ä¸ç¹å»âNew Gemsâ?é项å?¡ã
- å¨âSearchâ?åæ®µä¸é®å
¥
flickrï¼ç¶å?æ Enter é®ã
- éæ© flickrï¼ç¶å?ç¹å»âInstallâ?ãå¨âInstallation Settingsâ?对è¯?æ¡ä¸ç¹å»âOKâ?ã
- 确认æ¶å°æ?åçæ¶æ?¯ï¼ç¶å?å
³é对è¯?æ¡ã
å建 Ruby on Rails 项ç®
- éæ©âæä»¶â?>âæ°å»ºé¡¹ç®â?ã
- å¨âç±»å«â?æ¡ä¸éæ© Rubyï¼å¨â项ç®â?æ¡ä¸éæ© Ruby on Rails åºç¨ç¨åº?ï¼ç¹å»âä¸ä¸æ¥â?ã
å¨â项ç®å??ç§°â?åæ®µä¸é®å
¥ flickrï¼ç¶å?å?å»â宿?â?ã
Flickr åºè¦?æ±å° Flickr API Key ç´æ¥æ·»å è³å
¶èæ¬ä¸ãæ¨å?¯ä»¥è¿æ ·å?ï¼ä½ä¸é?¢ä»ç»?çæ¹æ³è®©æ¨ä¸?å¿
妿¤äº¦å?¯ä½¿ç¨ Flickr åºã
-
å¨â项ç®â?çªå?£ä¸ï¼å±å¼âConfigurationâ?èç¹ï¼ç¶å?æå¼
environment.rb æä»¶ã
-
å°ä¸å代ç ?æ·»å è³ environment.rb æä»¶æå?ãç¡®ä¿?å°æ¨ç Flickr API Key è¾å
¥å° MY_KEY å?é?ä¸ãè®¿é® Flickr API æ¶éè¦?该 Keyã
| 代ç ?ç¤ºä¾ 1ï¼æ·»å Flickr API Key |
require 'rubygems'
require 'flickr'
MY_KEY='è¾å
¥æ¨ç Flicker API Key'
class Flickr
alias old_initialize initialize
def initialize(api_key=MY_KEY, email=nil, password=nil)
puts "new_initialize " + MY_KEY
old_initialize(api_key, email, password)
@host="http://api.flickr.com"
@activity_file='flickr_activity_cache.xml'
end
end
|
- ä»ä¸»è?å?ä¸ï¼éæ©âæä»¶â?>âå
¨é¨ä¿?åâ?ã
å¨é¡¹ç®ä¸æ·»å æ ·å¼?
- å¨â项ç®â?çªå?£ä¸ï¼å±å¼âViewsâ?èç¹ï¼å?³é®ç¹å»âlayoutsâ?èç¹ï¼ç¶å?éæ©âæ°å»ºâ?->âRHTML Fileâ?ãå°æä»¶å½å??为
application å¹¶ç¹å»â宿?â?ã
-
å° application.rhtml ä¸ç代ç ?æ¿æ?¢æ?å¦ä¸ä»£ç ?ï¼
代ç ?ç¤ºä¾ 2ï¼application.rhtml æé代ç ? |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title>Flickr</title>
<%= javascript_include_tag :defaults %>
<%= stylesheet_link_tag 'flickr' %>
</head>
<body>
<%= yield %>
</body>
</html>
|
-
å±å¼âPublicâ?èç¹ï¼å?³é®ç¹å»âsylesheetsâ?ï¼ç¶å?éæ©âæ°å»ºâ?>âå
¶ä»â?ã
- å¨âæ°å»ºæä»¶â?对è¯?æ¡ä¸ï¼è®¾ç½®âç±»å«â?为â
å
¶ä»â?ï¼âæä»¶ç±»åâ?为âå±å? æ ·å¼?表â?ãç¹å»âä¸ä¸æ¥â?ã
å°æä»¶å½å??为 flickr å¹¶ç¹å»â宿?â?ã
æä»¶ flickr.css ä¼å¨ç¼è¾åºæå¼ã
å°å¦ä¸æ ·å¼?æ·»å å° flickr.css ä¸ï¼
| 代ç ?ç¤ºä¾ 3ï¼æ ·å¼?代ç ? |
body {
background-color: #888;
font-family: Lucida Grande;
font-size: 11px;
margin: 25px;
}
form {
margin: 0;
margin-bottom: 10px;
background-color: rgb(222,231,236);
border: 5px solid #333;
padding: 25px;
}
fieldset {
border: none;
}
#spinner { float: right; margin: 10px; }
#photos img {
border: 1px solid #000;
width: 75px;
height: 75px;
margin: 5px;
}
|
å建æ§å¶å¨
-
å?³é®ç¹å»âControllersâ?èç¹ï¼ç¶å?éæ©âGenerateâ?ã
å¨âRails Generatorâ?对è¯?æ¡ä¸ï¼âNameâ?åæ®µè¾å
¥ flickrï¼âViewsâ?åæ®µè¾å
¥ indexï¼ç¶å?ç¹å»âOKâ?ã
该æ?ä½ä¼çæ?æä»¶ flickr_controller.rbï¼å¹¶å°å
¶å¨ç¼è¾åºæå¼ã
-
å±å¼âViewsâ?>âflickrâ?ï¼ç¶å?æå¼
index.rhtmlã
-
å° index.rhtml ä¸ç代ç ?æ¿æ?¢æ?å¦ä¸ä»£ç ?ï¼
代ç ?ç¤ºä¾ 4ï¼index.rhtml æé代ç ? |
<% form_remote_tag :url => {:action => 'search'}, :update => 'photos' do %>
<fieldset>
<label for="tags">Tags:</label>
<%= text_field_tag 'tags' %>
<%= submit_tag 'Find' %>
</fieldset>
<div id="photos"></div>
<% end %>
|
å®ä¹æ?ç´¢æ¹æ³
-
æå¼
flickr_controller.rbã
ç¼ç¼ä»£ç ?ï¼å é¤ index æ¹æ³ï¼å¹¶å°å
¶æ¿æ?¢æ? search æ¹æ³ï¼å¦ä¸é?¢ ç²ä½æç¤ºï¼
代ç ?ç¤ºä¾ 5ï¼ä»£ç ? FlickrController ç±» |
class FlickrController < ApplicationController
def search
flickr = Flickr.new
if params[:tags].empty?
render :text => '<h2>Please enter a search string</h2>'
else
begin
photos = flickr.photos(:tags => params[:tags], :per_page => '24')
render :partial => 'photo', :collection => photos
rescue NoMethodError
render :text => '<h2>No matching photos found</h2>'
end
end
end
end
|
-
å¨âViewsâ?èç¹ä¸ï¼å?³é®ç¹å»âflickrâ?èç¹ï¼ç¶å?éæ©âæ°å»ºâ?->âRHTML Fileâ?ãå°æä»¶å½å??为 _photo å¹¶å?å»â宿?â?ã
æ¿æ?¢æä»¶å
容ï¼ä½¿å
¶ä»
å
å?«å¦ä¸ä¸è¡ï¼
<img class='photo' src="<%= photo.sizes[0]['source'] %>">
è¿?è¡åºç¨ç¨åº?
æ¤æ¥é
?ç½®ç¯å¢ä½¿è¿?è¡é¡¹ç®å?³å?¯å¨åºç¨ç¨åº?ã
-
å¨âPublicâ?èç¹ä¸ï¼å é¤
index.htmlã
-
å¨âConfigurationâ?èç¹ä¸ï¼æå¼ routes.rbãæ¥æ¾è¡ï¼
# map.connect '', :controller => "welcome"
- ç¼ç¼è¯¥è¡ï¼å 餿³¨é符å?·(#)ï¼å¹¶å°
welcome æ¹ä¸º flickrã
-
ç¹å»å·¥å
·æ ?ä¸çâè¿?è¡ä¸»é¡¹ç®â?æé®å?¯å¨ WEBrick æ?å¡å¨ï¼å¹¶æå¼æµ?è§å¨ï¼å¦ä¸å¾æç¤ºã
å¾ 1ï¼flickr åºç¨ç¨åº?
è¾å
¥æ?ç´¢å符串ï¼ä¾å¦ NetBeansï¼ç¶å?ç¹å»âFindâ?ãå è½½å¾çéè¦?å ç§éã
å¾ 2ï¼å è½½å¾ç
æ¹è¿ç¨æ·ä½éª
彿¨ç¹å»âFindâ?æé®æ¶ï¼æ?使¯å¨å?å?°æ§è¡ï¼ä¸?ä¼åºç°ä»»ä½å??é¦ãæ¤æ¥å°æ·»å ä¸ä¸ªç®å?çå¨ç» gif 帮å©è§£å³è¯¥é®é¢ï¼å¹¶æ´æ¹å¾çå è½½æ¶çæ¾ç¤ºææã
- å°æ¤å¨ç» gif
仿µ?è§å¨ä¿?åå°æ¡é?¢æä»¶ãç¶å?ææ³æä»¶å° NetBeans IDEâ项ç®â?çªå?£ä¸çâPublicâ?>âimagesâ?èç¹ä¸ã
-
æå¼âViewsâ?>âflickrâ?> index.rhtmlãå é¤å·²æä»£ç ?ï¼å¹¶ä½¿ç¨ä¸é?¢ç¤ºä¾ä¸ç»åºç代ç ?å°å
¶æ¿æ?¢ï¼
代ç ?ç¤ºä¾ 6ï¼index.rhtml æé代ç ? |
<% form_remote_tag :url => {:action => 'search'}, :update => 'photos',
:complete => visual_effect(:blind_down, 'photos'),
:before => %(Element.show('spinner')),
:success => %(Element.hide('spinner')) do %>
<%= 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 %>
|
-
ä»ä¸»è?å?ä¸ï¼éæ©âæä»¶â?>âå
¨é¨ä¿?åâ?ãå·æ°æµ?è§å¨ï¼ç¶å?å°?è¯å
¶ä»çæ?ç´¢å符串ï¼ä¾å¦ JRubyã
å¾ 3ï¼æ·»å å¨ç»
ç°å¨æ¨å?¯ä»¥çå°ä¸ä¸ªç®å?çå¨ç»ï¼è®©æ¨äºè§£æ?å¡å¨æ£å¨å¤ç?æ¨ç请æ±ãèå½å¾çåºç°æ¶ï¼å¥½å?æä¸ä¸ç»ç¾å?¶çªæçæè§ã
æ´å¤å
容
>> æ´å¤ NetBeans Ruby ææ¡£