Class: Flickr::FlickrClient

Inherits:
Object
  • Object
show all
Defined in:
lib/flickrrb.rb

Overview

:nodoc:

Instance Method Summary collapse

Constructor Details

#initialize(http = nil, debug = false) ⇒ FlickrClient

Returns a new instance of FlickrClient.



181
182
183
184
185
186
187
188
189
190
# File 'lib/flickrrb.rb', line 181

def initialize http = nil, debug = false
  flickr_url = URI.parse "http://api.flickr.com/"
  
  @flickr_client = if http.nil?
    Net::HTTP.new flickr_url.host, flickr_url.port
  else
    http
  end
  @debug = debug
end

Instance Method Details

#build_response(j) ⇒ Object

“hello”.capitalize Build class to call



198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
# File 'lib/flickrrb.rb', line 198

def build_response j
  p j if @debug
  m = j.match(/^jsonFlickrApi\((.+)\)$/)
  
  fail APIException, "Invalid response from Flickr" if m.nil?
  
  data = JSON.parse m[1]

  resp = nil
  if !m.nil? && data['stat'] == 'ok'
    data.keys.each do |k|
      next if k == 'stat'
      resp = self.send(k, data)
    end
  else
    # FIXME Fail in send
    fail APIException, "#{data['code']}: #{data['message']}"
  end
  
  resp
end

#group(data) ⇒ Object



236
237
238
# File 'lib/flickrrb.rb', line 236

def group data
  Group.new data
end

#groups(data) ⇒ Object



230
231
232
233
234
# File 'lib/flickrrb.rb', line 230

def groups data
  data['groups']['group'].collect do |g|
    group(g)
  end
end

#handle_error(xml) ⇒ Object



220
221
222
223
224
225
# File 'lib/flickrrb.rb', line 220

def handle_error xml
  # This is a bit ugly!
  code = xml.elements['rsp'].elements['err'].attributes['code']
  message = xml.elements['rsp'].elements['err'].attributes['msg']
  fail APIException, "#{code}: #{message}"
end

#person(data) ⇒ Object



277
278
279
# File 'lib/flickrrb.rb', line 277

def person data
  Person.new data['person']
end

#photo(data) ⇒ Object



254
255
256
257
# File 'lib/flickrrb.rb', line 254

def photo data
  data = data['photo'] unless data['photo'].nil?
  Photo.new data
end

#photos(data) ⇒ Object

“pages”=>1, “perpage”=>100, “total”=>“15”, “photo”=>[{“id”=>“1848463798”, “owner”=>“12656878@N06”, “secret”=>“d9fcbdedb5”, “server”=>“2103”, “farm”=>3, “title”=>“IMG_5628_29_30”, “ispublic”=>1, “isfriend”=>0, “isfamily”=>0, “ownername”=>“Henry Maddocks”, “dateadded”=>“1250311066”, “owner”=>“12656878@N06”, “secret”=>“71461d1f9a”, “server”=>“2042”, “farm”=>3, “title”=>“IMG_5547_8_9”, “ispublic”=>1, “isfriend”=>0, “isfamily”=>0, “ownername”=>“Henry Maddocks”, “dateadded”=>“1250311040”, “owner”=>“12656878@N06”, “secret”=>“13dc200ffe”, “server”=>“2007”, “farm”=>3, “title”=>“IMG_5571_2_3”, “ispublic”=>1, “isfriend”=>0, “isfamily”=>0, “ownername”=>“Henry Maddocks”, “dateadded”=>“1250311001”, “owner”=>“12656878@N06”, “secret”=>“2d8fde31d1”, “server”=>“2267”, “farm”=>3, “title”=>“Criss Cross Castle”, “ispublic”=>1, “isfriend”=>0, “isfamily”=>0, “ownername”=>“Henry Maddocks”, “dateadded”=>“1206397646”, “owner”=>“12656878@N06”, “secret”=>“69697c85d3”, “server”=>“3282”, “farm”=>4, “title”=>“Alexander Library”, “ispublic”=>1, “isfriend”=>0, “isfamily”=>0, “ownername”=>“Henry Maddocks”, “dateadded”=>“1206353910”, “owner”=>“12656878@N06”, “secret”=>“e97dfa334f”, “server”=>“2122”, “farm”=>3, “title”=>“IMG_0716_7_8”, “ispublic”=>1, “isfriend”=>0, “isfamily”=>0, “ownername”=>“Henry Maddocks”, “dateadded”=>“1199095628”, “owner”=>“12656878@N06”, “secret”=>“81b8bdcc39”, “server”=>“2099”, “farm”=>3, “title”=>“IMG_0695_6_7”, “ispublic”=>1, “isfriend”=>0, “isfamily”=>0, “ownername”=>“Henry Maddocks”, “dateadded”=>“1199095610”, “owner”=>“12656878@N06”, “secret”=>“19fb55ffdd”, “server”=>“2156”, “farm”=>3, “title”=>“IMG_0643_4_5”, “ispublic”=>1, “isfriend”=>0, “isfamily”=>0, “ownername”=>“Henry Maddocks”, “dateadded”=>“1199095592”, “owner”=>“12656878@N06”, “secret”=>“f87fe0ba85”, “server”=>“2252”, “farm”=>3, “title”=>“IMG_0506_7_8”, “ispublic”=>1, “isfriend”=>0, “isfamily”=>0, “ownername”=>“Henry Maddocks”, “dateadded”=>“1199095509”, “owner”=>“12656878@N06”, “secret”=>“ae39c7e214”, “server”=>“2099”, “farm”=>3, “title”=>“IMG_0494_5_6”, “ispublic”=>1, “isfriend”=>0, “isfamily”=>0, “ownername”=>“Henry Maddocks”, “dateadded”=>“1199095483”, “owner”=>“12656878@N06”, “secret”=>“ca858d0646”, “server”=>“2019”, “farm”=>3, “title”=>“IMG_0491_2_3”, “ispublic”=>1, “isfriend”=>0, “isfamily”=>0, “ownername”=>“Henry Maddocks”, “dateadded”=>“1199095461”, “owner”=>“12656878@N06”, “secret”=>“cec90f64ba”, “server”=>“2402”, “farm”=>3, “title”=>“IMG_5631_2_3”, “ispublic”=>1, “isfriend”=>0, “isfamily”=>0, “ownername”=>“Henry Maddocks”, “dateadded”=>“1194217745”, “owner”=>“12656878@N06”, “secret”=>“a4d0774b17”, “server”=>“2022”, “farm”=>3, “title”=>“IMG_5574_5_6”, “ispublic”=>1, “isfriend”=>0, “isfamily”=>0, “ownername”=>“Henry Maddocks”, “dateadded”=>“1194128771”, “owner”=>“12656878@N06”, “secret”=>“5089075c7a”, “server”=>“2008”, “farm”=>3, “title”=>“IMG_5598_599_600”, “ispublic”=>1, “isfriend”=>0, “isfamily”=>0, “ownername”=>“Henry Maddocks”, “dateadded”=>“1194128720”, “owner”=>“12656878@N06”, “secret”=>“e0f8cfeab2”, “server”=>“2140”, “farm”=>3, “title”=>“IMG_5646_7_8”, “ispublic”=>1, “isfriend”=>0, “isfamily”=>0, “ownername”=>“Henry Maddocks”, “dateadded”=>“1194128674”]}



241
242
243
244
245
246
247
248
249
250
251
252
# File 'lib/flickrrb.rb', line 241

def photos data
  pages = data['photos']['pages']
  total = data['photos']['total']
  
  photo_list = data['photos']['photo']
  
  photos = photo_list.collect do |p|
    self.photo p
  end
        
  return photos, pages.to_i, total.to_i
end

#request(command) ⇒ Object



192
193
194
195
# File 'lib/flickrrb.rb', line 192

def request command
  p "/services/rest/#{command}&format=json" if @debug
  build_response(@flickr_client.get("/services/rest/#{command}&format=json").body)
end

#sizes(data) ⇒ Object

“canprint”=>0, “candownload”=>1, “size”=>[{“label”=>“Square”, “width”=>75, “height”=>75, “source”=>“”, “url”=>“www.flickr.com/photos/acute-distress/1848466274/sizes/sq/”, “media”=>“photo”, “width”=>“100”, “height”=>“75”, “source”=>“”, “url”=>“www.flickr.com/photos/acute-distress/1848466274/sizes/t/”, “media”=>“photo”, “width”=>“240”, “height”=>“180”, “source”=>“”, “url”=>“www.flickr.com/photos/acute-distress/1848466274/sizes/s/”, “media”=>“photo”, “width”=>“500”, “height”=>“375”, “source”=>“”, “url”=>“www.flickr.com/photos/acute-distress/1848466274/sizes/m/”, “media”=>“photo”, 640”, “width”=>“640”, “height”=>480, “source”=>“farm3.static.flickr.com/2402/1848466274_cec90f64ba_z.jpg?zz=1”, “url”=>“www.flickr.com/photos/acute-distress/1848466274/sizes/z/”, “media”=>“photo”, “width”=>“1280”, “height”=>“960”, “source”=>“”, “url”=>“www.flickr.com/photos/acute-distress/1848466274/sizes/o/”, “media”=>“photo”]}



260
261
262
263
264
265
266
267
268
269
270
271
# File 'lib/flickrrb.rb', line 260

def sizes data
  sizes = []
  data['sizes']['size'].each do |p|
    s = Size.new(p)
    sizes << s
    (class << sizes; self;end).class_eval do
      define_method(s.label.downcase.gsub(" ", "_").to_sym) { s }
    end    
  end
  
  sizes
end

#stat(data) ⇒ Object



227
228
# File 'lib/flickrrb.rb', line 227

def stat data
end

#user(data) ⇒ Object



273
274
275
# File 'lib/flickrrb.rb', line 273

def user data
  Person.new data['user']
end