Class: Flickr::Photo

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(id = nil, api_key = nil, extra_params = {}) ⇒ Photo

Returns a new instance of Photo.



406
407
408
409
410
411
# File 'lib/flickr.rb', line 406

def initialize(id=nil, api_key=nil, extra_params={})
  @id = id
  @api_key = api_key
  extra_params.each { |k,v| self.instance_variable_set("@#{k}", v) } # convert extra_params into instance variables
  @client = Flickr.new @api_key
end

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



404
405
406
# File 'lib/flickr.rb', line 404

def client
  @client
end

#idObject (readonly)

Returns the value of attribute id.



404
405
406
# File 'lib/flickr.rb', line 404

def id
  @id
end

#titleObject

Returns the value of attribute title.



404
405
406
# File 'lib/flickr.rb', line 404

def title
  @title
end

Instance Method Details

#[](param_name) ⇒ Object

Allows access to all photos instance variables through hash like interface, e.g. photo returns @datetaken instance variable. Useful for accessing any weird and wonderful parameter that may have been returned by Flickr when finding the photo, e.g. those returned by the extras argument in flickr.people.getPublicPhotos



419
420
421
# File 'lib/flickr.rb', line 419

def [](param_name)
  instance_variable_get("@#{param_name}")
end

#add_note(note) ⇒ Object

Implements flickr.photos.notes.add



552
553
# File 'lib/flickr.rb', line 552

def add_note(note)
end

#add_tag(tag) ⇒ Object

Implements flickr.photos.addTags



574
575
# File 'lib/flickr.rb', line 574

def add_tag(tag)
end

#contextObject

Implements flickr.photos.getContext



516
517
518
519
520
521
# File 'lib/flickr.rb', line 516

def context
  context = @client.photos_getContext('photo_id'=>@id)
  @previousPhoto = Photo.new(context['prevphoto'].delete('id'), @api_key, context['prevphoto']) if context['prevphoto']['id']!='0'
  @nextPhoto = Photo.new(context['nextphoto'].delete('id'), @api_key, context['nextphoto']) if context['nextphoto']['id']!='0'
  return [@previousPhoto, @nextPhoto]
end

#dates=(dates) ⇒ Object

Implements flickr.photos.setDates



556
557
# File 'lib/flickr.rb', line 556

def dates=(dates)
end

#deleteNote(note_id) ⇒ Object

Implements flickr.photos.notes.delete



591
592
# File 'lib/flickr.rb', line 591

def deleteNote(note_id)
end

#descriptionObject



458
459
460
# File 'lib/flickr.rb', line 458

def description
  @description || getInfo("description")
end

#description=(title) ⇒ Object



570
571
# File 'lib/flickr.rb', line 570

def description=(title)
end

#editNote(note_id) ⇒ Object

Implements flickr.photos.notes.edit



595
596
# File 'lib/flickr.rb', line 595

def editNote(note_id)
end

#exifObject

Implements flickr.photos.getExif



524
525
526
# File 'lib/flickr.rb', line 524

def exif
  @client.photos_getExif('photo_id'=>@id)['photo']
end

#file(size = 'Medium') ⇒ Object

Returns the photo file data itself, in any specified size. Example: File.open(photo.title, ‘w’) { |f| f.puts photo.file }



506
507
508
# File 'lib/flickr.rb', line 506

def file(size='Medium')
  Net::HTTP.get_response(URI.parse(source(size))).body
end

#filenameObject

Unique filename for the image, based on the Flickr NSID



511
512
513
# File 'lib/flickr.rb', line 511

def filename
  "#{@id}.jpg"
end

#isfavoriteObject



446
447
448
# File 'lib/flickr.rb', line 446

def isfavorite
  @isfavorite.nil? ? getInfo("isfavorite") : @isfavorite
end

#licenseObject



450
451
452
# File 'lib/flickr.rb', line 450

def license
  @license.nil? ? getInfo("license") : @license
end

#normalize_size(size) ⇒ Object

converts string or symbol size to a capitalized string



474
475
476
# File 'lib/flickr.rb', line 474

def normalize_size(size)
  size ? size.to_s.capitalize : size
end

#notesObject



462
463
464
# File 'lib/flickr.rb', line 462

def notes
  @notes.nil? ? getInfo("notes") : @notes
end

#ownerObject

Returns the owner of the photo as a Flickr::User. If we have no info about the owner, we make an API call to get it. If we already have the owner’s id, create a user based on that. Either way, we cache the result so we don’t need to check again



431
432
433
434
435
436
437
438
439
440
# File 'lib/flickr.rb', line 431

def owner
  case @owner
  when Flickr::User
    @owner
  when String
    @owner = Flickr::User.new(@owner, nil, nil, nil, @api_key)
  else
    getInfo("owner")
  end
end

#permissionsObject

Implements flickr.photos.getPerms



529
530
531
# File 'lib/flickr.rb', line 529

def permissions
  @client.photos_getPerms('photo_id'=>@id)['perms']
end

#perms=(perms) ⇒ Object

Implements flickr.photos.setPerms



560
561
# File 'lib/flickr.rb', line 560

def perms=(perms)
end

#postToBlog(blog_id, title = '', description = '') ⇒ Object

Implements flickr.blogs.postPhoto



586
587
588
# File 'lib/flickr.rb', line 586

def postToBlog(blog_id, title='', description='')
  @client.blogs_postPhoto('photo_id'=>@id, 'title'=>title, 'description'=>description)
end

#pretty_urlObject

the ‘pretty’ url for a photo (if the user has set up a custom name) eg, flickr.com/photos/granth/2584402507/ instead of

http://flickr.com/photos/23386158@N00/2584402507/


496
497
498
# File 'lib/flickr.rb', line 496

def pretty_url
  @url || getInfo("pretty_url")
end

#remove_tag(tag) ⇒ Object

Implements flickr.photos.removeTag



578
579
# File 'lib/flickr.rb', line 578

def remove_tag(tag)
end

#rotateObject

Implements flickr.photos.transform.rotate



582
583
# File 'lib/flickr.rb', line 582

def rotate
end

#rotationObject



454
455
456
# File 'lib/flickr.rb', line 454

def rotation
  @rotation.nil? ? getInfo("rotation") : @rotation
end

#serverObject



442
443
444
# File 'lib/flickr.rb', line 442

def server
  @server.nil? ? getInfo("server") : @server
end

#size_url(size = 'Medium') ⇒ Object

Returns the URL for the photo size page defaults to ‘Medium’ other valid sizes are in the VALID_SIZES hash



469
470
471
# File 'lib/flickr.rb', line 469

def size_url(size='Medium')
  uri_for_photo_from_self(size) || sizes(size)['url']
end

#sizes(size = nil) ⇒ Object

Implements flickr.photos.getSizes



534
535
536
537
538
539
# File 'lib/flickr.rb', line 534

def sizes(size=nil)
  size = normalize_size(size)
  sizes = @client.photos_getSizes('photo_id'=>@id)['sizes']['size']
  sizes = sizes.find{|asize| asize['label']==size} if size
  return sizes
end

#source(size = 'Medium') ⇒ Object

Returns the URL for the image (default or any specified size)



501
502
503
# File 'lib/flickr.rb', line 501

def source(size='Medium')
  image_source_uri_from_self(size) || sizes(size)['source']
end

#tagsObject

flickr.tags.getListPhoto



547
548
549
# File 'lib/flickr.rb', line 547

def tags
  @client.tags_getListPhoto('photo_id'=>@id)['photo']['tags']
end

#tags=(tags) ⇒ Object

Implements flickr.photos.setTags



564
565
# File 'lib/flickr.rb', line 564

def tags=(tags)
end

#to_sObject

Converts the Photo to a string by returning its title



599
600
601
# File 'lib/flickr.rb', line 599

def to_s
  title
end

#url(size = nil) ⇒ Object

the URL for the main photo page if getInfo has already been called, this will return the pretty url

for historical reasons, an optional size can be given ‘Medium’ returns the regular url; any other size returns a size page use size_url instead



484
485
486
487
488
489
490
# File 'lib/flickr.rb', line 484

def url(size = nil)
  if normalize_size(size) != 'Medium'
    size_url(size)
  else
    @url || uri_for_photo_from_self
  end
end

#vertical?Boolean

Returns:

  • (Boolean)


541
542
543
544
# File 'lib/flickr.rb', line 541

def vertical?
  @medium_size ||= self.sizes('Medium')
  @medium_size['height'] > @medium_size['width']
end