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



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

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

#contactsObject

creates and/or returns the Flickr::Contacts object



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

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

#peopleObject

creates and/or returns the Flickr::People object



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

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

#photosObject

creates and/or returns the Flickr::Photos object



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

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

#photosetsObject

creates and/or returns the Flickr::Photos object



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

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

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



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

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 = '<?xml version="1.0" encoding="utf-8" ?><rsp stat="ok"></rsp>' if rsp == ""
  xm = Nokogiri.Slop(rsp, nil, nil, Nokogiri::XML::ParseOptions::NOBLANKS)

  if xm.rsp['stat'] == 'ok'
    xm.rsp
  else
    Flickr::Errors.error_for(xm.rsp.err["code"].to_i, xm.rsp.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)
    


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

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



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

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

#uploaderObject

creates and/or returns the Flickr::Uploader object



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

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

#urlsObject

creates and/or returns the Flickr::Urls object



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

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