Object
This library implements Flickr's REST API. Its usage should be pretty straightforward. See below for examples.
Author |
Ryan Grove (ryan@wonko.com) |
Version |
0.0.1 |
Copyright |
Copyright (c) 2007-2008 Ryan Grove. All rights reserved. |
License |
New BSD License (opensource.org/licenses/bsd-license.php) |
Website |
activity
blogs
contacts
favorites
groups
groups.pools
interestingness
photos.comments
photos.geo
photos.licenses
photos.notes
photos.transform
photos.upload
photosets
photosets.comments
reflection
tags
test
urls
Creates a new Net::Flickr object that will use the specified api_key and api_secret to connect to Flickr. If you don't already have a Flickr API key, you can get one at flickr.com/services/api/keys.
If you don't provide an api_secret, you won't be able to make API calls requiring authentication.
# File lib/net/flickr.rb, line 102 def initialize(api_key, api_secret = nil) @api_key = api_key @api_secret = api_secret # Initialize dependent classes. @auth = Auth.new(self) @people = People.new(self) @photos = Photos.new(self) end
Returns a Net::Flickr::Auth instance.
# File lib/net/flickr.rb, line 113 def auth @auth end
Parses the specified Flickr REST response. If the response indicates a successful request, the response block will be returned as an Hpricot element. Otherwise, an error will be raised.
# File lib/net/flickr.rb, line 120 def parse_response(response_xml) begin xml = Hpricot::XML(response_xml) rescue => e raise InvalidResponse, 'Invalid Flickr API response' end unless rsp = xml.at('/rsp') raise InvalidResponse, 'Invalid Flickr API response' end if rsp['stat'] == 'ok' return rsp elsif rsp['stat'] == 'fail' raise APIError, rsp.at('/err')['msg'] else raise InvalidResponse, 'Invalid Flickr API response' end end
Returns a Net::Flickr::People instance.
# File lib/net/flickr.rb, line 141 def people @people end
Returns a Net::Flickr::Photos instance.
# File lib/net/flickr.rb, line 146 def photos @photos end
Calls the specified Flickr REST API method with the supplied arguments and returns a Flickr REST response in XML format. If an API secret is set, the request will be properly signed.
# File lib/net/flickr.rb, line 153 def request(method, args = {}) params = args.merge({'method' => method, 'api_key' => @api_key}) url = URI.parse(REST_ENDPOINT) http = Net::HTTP.new(url.host, url.port) request = sign_request(Net::HTTP::Post.new(url.path), params) http.start do |http| if block_given? http.request(request) {|response| yield response } else response = http.request(request) # Raise a Net::HTTP error if the HTTP request failed. unless response.is_a?(Net::HTTPSuccess) || response.is_a?(Net::HTTPRedirection) response.error! end # Return the parsed response. return parse_response(response.body) end end end
Signs a Flickr API request with the API secret if set.
# File lib/net/flickr.rb, line 178 def sign_request(request, params) # If the secret isn't set, we can't sign anything. if @api_secret.nil? request.set_form_data(params) return request end # Add auth_token to the param list if we're already authenticated. params['auth_token'] = @auth.token unless @auth.token.nil? # Build a sorted, concatenated parameter list as described at # http://flickr.com/services/api/auth.spec.html paramlist = '' params.keys.sort.each {|key| paramlist << key << URI.escape(params[key].to_s) } # Sign the request with a hash of the secret key and the concatenated # parameter list. params['api_sig'] = Digest::MD5.hexdigest(@api_secret + paramlist) request.set_form_data(params) return request end
Signs a Flickr URL with the API secret if set.
# File lib/net/flickr.rb, line 203 def sign_url(url) return url if @api_secret.nil? uri = URI.parse(url) params = uri.query.split('&') params << 'api_sig=' + Digest::MD5.hexdigest(@api_secret + params.sort.join('').gsub('=', '')) uri.query = params.join('&') return uri.to_s end
Generated with the Darkfish Rdoc Generator 2.