Class: Flickr::Base

Inherits:
Object show all
Defined in:
lib/flickr/base.rb

Direct Known Subclasses

Auth, Contacts, People, Photos, Photos::Geo, Photosets, Uploader, Urls

Constant Summary collapse

REST_ENDPOINT =
'http://api.flickr.com/services/rest/'
AUTH_ENDPOINT =
'http://flickr.com/services/auth/'
UPLOAD_ENDPOINT =
'http://api.flickr.com/services/upload/'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config_param, options_param = {}) ⇒ Base

create a new flickr object

You can either pass a hash with the following attributes:

  • :key (Required)

    the API key
    
  • :secret (Required)

    the API secret
    
  • :token (Optional)

    Flickr::Auth::Token object
    

or:

  • config_file (Required)

    yaml file to load configuration from
    
  • options (Optional)

    hash containing any of the two options
    * token_cache
      location of the token cache file. This will override the setting in the config file
    * environment
      section in the config file that flickr_fu should look for the API key and secret
      Useful when using with Rails
    

Config Example (yaml file)


key: YOUR_API_KEY
secret: YOUR_API_SECRET
token_cache: token.yml

Example config file with two environments:


development:
  key: YOUR_DEVELOPMENT_API_KEY
  secret: YOUR_DEVELOPMENT_API_SECRET
production:
  key: YOUR_PRODUCTION_API_KEY
  secret: YOUR_PRODUCTION_API_SECRET


50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/flickr/base.rb', line 50

def initialize(config_param, options_param = {})
  if options_param.is_a? String
    options = {:token_cache => options_param}
  else
    options = options_param
  end
  if config_param.is_a? String
    config = YAML.load_file(config_param)
    config = config[options[:environment]] if options.has_key? :environment
  else
    config = config_param
  end
  @api_key = config[:key] || config["key"]
  @api_secret = config[:secret] || config["secret"]
  @token_cache = options[:token_cache] || config["token_cache"]
  @token = config[:token] || options[:token]
  raise 'config file must contain an api key and secret' unless @api_key and @api_secret
  raise 'you cannot specify both the token and token_cache' if @token and @token_cache
end

Instance Attribute Details

#api_keyObject (readonly)

Returns the value of attribute api_key.



7
8
9
# File 'lib/flickr/base.rb', line 7

def api_key
  @api_key
end

#api_secretObject (readonly)

Returns the value of attribute api_secret.



7
8
9
# File 'lib/flickr/base.rb', line 7

def api_secret
  @api_secret
end

#tokenObject (readonly)

Returns the value of attribute token.



7
8
9
# File 'lib/flickr/base.rb', line 7

def token
  @token
end

#token_cacheObject (readonly)

Returns the value of attribute token_cache.



7
8
9
# File 'lib/flickr/base.rb', line 7

def token_cache
  @token_cache
end

Instance Method Details

#authObject

creates and/or returns the Flickr::Auth object



127
# File 'lib/flickr/base.rb', line 127

def auth() @auth ||= Flickr::Auth.new(self) end

#contactsObject

creates and/or returns the Flickr::Contacts object



133
# File 'lib/flickr/base.rb', line 133

def contacts() @contacts ||= Flickr::Contacts.new(self) end

#peopleObject

creates and/or returns the Flickr::People object



124
# File 'lib/flickr/base.rb', line 124

def people() @people ||= Flickr::People.new(self) end

#photosObject

creates and/or returns the Flickr::Photos object



118
# File 'lib/flickr/base.rb', line 118

def photos() @photos ||= Flickr::Photos.new(self) end

#photosetsObject

creates and/or returns the Flickr::Photos object



121
# File 'lib/flickr/base.rb', line 121

def photosets() @photosets ||= Flickr::Photosets.new(self) end

#send_request(method, options = {}, http_method = :get, endpoint = REST_ENDPOINT) ⇒ Object

sends a request to the flickr REST api

Params

  • method (Required)

    name of the flickr method (ex. flickr.photos.search)
    
  • options (Optional)

    hash of query parameters, you do not need to include api_key, api_sig or auth_token because these are added automatically
    
  • http_method (Optional)

    choose between a GET and POST http request. Valid options are:
      :get (DEFAULT)
      :post
    
  • endpoint (Optional)

    url of the api endpoint
    


84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/flickr/base.rb', line 84

def send_request(method, options = {}, http_method = :get, endpoint = REST_ENDPOINT)
  options.merge!(:api_key => @api_key, :method => method)
  sign_request(options)
  
  rsp = request_over_http(options, http_method, endpoint)
  
  rsp = '<rsp stat="ok"></rsp>' if rsp == ""
  xm = XmlMagic.new(rsp)
  
  if xm[:stat] == 'ok'
    xm
  else
    raise Flickr::Errors.error_for(xm.err[:code].to_i, xm.err[:msg])
  end
end

#sign_request(options, authorize = true) ⇒ Object

alters your api parameters to include a signiture and authorization token

Params

  • options (Required)

    the hash of parameters to be passed to the send_request
    
  • authorize (Optional)

    boolean value to determine if the call with include an auth_token (Defaults to true)
    


108
109
110
111
112
# File 'lib/flickr/base.rb', line 108

def sign_request(options, authorize = true)
  options.merge!(:auth_token => self.auth.token(false).to_s, :api_key => @api_key) if authorize and self.auth.token(false)
  options.delete(:api_sig)
  options.merge!(:api_sig => Digest::MD5.hexdigest(@api_secret + options.to_a.sort_by{|k| k[0].to_s}.flatten.join)) if @api_secret
end

#testObject

creates and/or returns the Flickr::Test object



115
# File 'lib/flickr/base.rb', line 115

def test() @test ||= Flickr::Test.new(self) end

#uploaderObject

creates and/or returns the Flickr::Uploader object



130
# File 'lib/flickr/base.rb', line 130

def uploader() @uploader ||= Flickr::Uploader.new(self) end

#urlsObject

creates and/or returns the Flickr::Urls object



136
# File 'lib/flickr/base.rb', line 136

def urls() @urls ||= Flickr::Urls.new(self) end