 
 This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Finding Photos on Flikr | ||
|---|---|---|
| Code | Expected | Actual | 
| require 'open-uri'
require 'rexml/document'
require 'cgi'
FLICKR_API_KEY = 'Your API key here'
def flickr_call(method_name, arg_map={}.freeze)
  args = arg_map.collect {|k,v| CGI.escape(k) + '=' + CGI.escape(v)}.join('&')
  url = "http://www.flickr.com/services/rest/?api_key=%s&method=%s&%s" %
    [FLICKR_API_KEY, method_name, args]
  doc = REXML::Document.new(open(url).read)
end
def pick_a_photo(tag)
 doc = flickr_call('flickr.photos.search', 'tags' => tag, 'license' => '4',
                   'per_page' => '1')
 photo = REXML::XPath.first(doc, '//photo')
 small_photo_url(photo) if photo
end
def small_photo_url(photo)
 server, id, secret = ['server', 'id', 'secret'].collect do |field|
   photo.attribute(field)
 end
 "http://static.flickr.com/#{server}/#{id}_#{secret}_m.jpg"
end
pick_a_photo('elephants') | http://static.flickr.com/32/102580480_506d5865d0_m.jpg | Error! (Exception?) Here's stdout: URI::InvalidURIError: bad URI(is not URI?): http://www.flickr.com/services/rest/?api_key=Your API key here&method=flickr.photos.search&license=4&tags=elephants&per_page=1 from /usr/lib/ruby/1.8/uri/common.rb:432:in `split' from /usr/lib/ruby/1.8/uri/common.rb:481:in `parse' from /usr/lib/ruby/1.8/open-uri.rb:85:in `open' from (irb):9:in `flickr_call' from (irb):12:in `pick_a_photo' from (irb):23 | 
| pick_a_photo('what-will-happen-tomorrow') | nil | Error! (Exception?) Here's stdout: URI::InvalidURIError: bad URI(is not URI?): http://www.flickr.com/services/rest/?api_key=Your API key here&method=flickr.photos.search&license=4&tags=what-will-happen-tomorrow&per_page=1 from /usr/lib/ruby/1.8/uri/common.rb:432:in `split' from /usr/lib/ruby/1.8/uri/common.rb:481:in `parse' from /usr/lib/ruby/1.8/open-uri.rb:85:in `open' from (irb):9:in `flickr_call' from (irb):12:in `pick_a_photo' from (irb):24 |