Class: Flickr::Photos::Photo

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

Overview

wrapping class to hold an flickr photo

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(flickr, attributes) ⇒ Photo

create a new instance of a flickr photo.

Params

  • flickr (Required)

    the flickr object
    
  • attributes (Required)

    a hash of attributes used to set the initial values of the photo object
    


15
16
17
18
19
20
# File 'lib/flickr/photo.rb', line 15

def initialize(flickr, attributes)
  @flickr = flickr
  attributes.each do |k,v|
    send("#{k}=", v)
  end
end

Instance Attribute Details

#commentsObject

:nodoc:



6
7
8
# File 'lib/flickr/photo.rb', line 6

def comments
  @comments
end

#descriptionObject

:nodoc:



5
6
7
# File 'lib/flickr/photo.rb', line 5

def description
  @description
end

#farmObject

standard attributes



3
4
5
# File 'lib/flickr/photo.rb', line 3

def farm
  @farm
end

#geoObject

extra attributes



4
5
6
# File 'lib/flickr/photo.rb', line 4

def geo
  @geo
end

#icon_serverObject

extra attributes



4
5
6
# File 'lib/flickr/photo.rb', line 4

def icon_server
  @icon_server
end

#idObject

standard attributes



3
4
5
# File 'lib/flickr/photo.rb', line 3

def id
  @id
end

#info_addedObject

info attributes



5
6
7
# File 'lib/flickr/photo.rb', line 5

def info_added
  @info_added
end

#is_familyObject

standard attributes



3
4
5
# File 'lib/flickr/photo.rb', line 3

def is_family
  @is_family
end

#is_friendObject

standard attributes



3
4
5
# File 'lib/flickr/photo.rb', line 3

def is_friend
  @is_friend
end

#is_publicObject

standard attributes



3
4
5
# File 'lib/flickr/photo.rb', line 3

def is_public
  @is_public
end

#license_idObject

extra attributes



4
5
6
# File 'lib/flickr/photo.rb', line 4

def license_id
  @license_id
end

#machine_tagsObject

extra attributes



4
5
6
# File 'lib/flickr/photo.rb', line 4

def machine_tags
  @machine_tags
end

#mediaObject

extra attributes



4
5
6
# File 'lib/flickr/photo.rb', line 4

def media
  @media
end

#notesObject

:nodoc:



5
6
7
# File 'lib/flickr/photo.rb', line 5

def notes
  @notes
end

#o_dimsObject

extra attributes



4
5
6
# File 'lib/flickr/photo.rb', line 4

def o_dims
  @o_dims
end

#original_formatObject

extra attributes



4
5
6
# File 'lib/flickr/photo.rb', line 4

def original_format
  @original_format
end

#original_secretObject

:nodoc:



5
6
7
# File 'lib/flickr/photo.rb', line 5

def original_secret
  @original_secret
end

#ownerObject

standard attributes



3
4
5
# File 'lib/flickr/photo.rb', line 3

def owner
  @owner
end

#owner_nameObject

extra attributes



4
5
6
# File 'lib/flickr/photo.rb', line 4

def owner_name
  @owner_name
end

#owner_realnameObject

:nodoc:



5
6
7
# File 'lib/flickr/photo.rb', line 5

def owner_realname
  @owner_realname
end

#owner_usernameObject

:nodoc:



5
6
7
# File 'lib/flickr/photo.rb', line 5

def owner_username
  @owner_username
end

#secretObject

standard attributes



3
4
5
# File 'lib/flickr/photo.rb', line 3

def secret
  @secret
end

#serverObject

standard attributes



3
4
5
# File 'lib/flickr/photo.rb', line 3

def server
  @server
end

#tagsObject

extra attributes



4
5
6
# File 'lib/flickr/photo.rb', line 4

def tags
  @tags
end

#taken_atObject

extra attributes



4
5
6
# File 'lib/flickr/photo.rb', line 4

def taken_at
  @taken_at
end

#titleObject

standard attributes



3
4
5
# File 'lib/flickr/photo.rb', line 3

def title
  @title
end

#updated_atObject

extra attributes



4
5
6
# File 'lib/flickr/photo.rb', line 4

def updated_at
  @updated_at
end

#uploaded_atObject

extra attributes



4
5
6
# File 'lib/flickr/photo.rb', line 4

def uploaded_at
  @uploaded_at
end

#url_photopageObject

:nodoc:



5
6
7
# File 'lib/flickr/photo.rb', line 5

def url_photopage
  @url_photopage
end

#viewsObject

extra attributes



4
5
6
# File 'lib/flickr/photo.rb', line 4

def views
  @views
end

Instance Method Details

#add_comment(message) ⇒ Object

Add comment to a photo as the currently authenticated user.

Params

  • message (Required)

    text of the comment
    


146
147
148
149
# File 'lib/flickr/photo.rb', line 146

def add_comment(message)
  @flickr.send_request('flickr.photos.comments.addComment', {:photo_id => self.id, :comment_text => message}, :post)
  true
end

#add_note(message, x, y, w, h) ⇒ Object

Add a note to a photo. Coordinates and sizes are in pixels, based on the 500px image size shown on individual photo pages.

Params

  • message (Required)

    The text of the note
    
  • x (Required)

    The left coordinate of the note
    
  • y (Required)

    The top coordinate of the note
    
  • w (Required)

    The width of the note
    
  • h (Required)

    The height of the note
    


165
166
167
168
# File 'lib/flickr/photo.rb', line 165

def add_note(message, x, y, w, h)
  @flickr.send_request('flickr.photos.notes.add', {:photo_id => self.id, :note_x => x, :note_y => y, :note_w => w, :note_h => h, :note_text => message}, :post)
  true
end

#add_tags(tags) ⇒ Object

Add tags to a photo.

Params

  • tags (Required)

    comma seperated list of tags
    


135
136
137
138
# File 'lib/flickr/photo.rb', line 135

def add_tags(tags)
  @flickr.send_request('flickr.photos.addTags', {:photo_id => self.id, :tags => tags}, :post)
  true
end

#deleteObject

Delete this photo



124
125
126
127
# File 'lib/flickr/photo.rb', line 124

def delete()
  @flickr.send_request('flickr.photos.delete', {:photo_id => self.id}, :post)
  true
end

#image_url(size = :medium) ⇒ Object

retreive the url to the image stored on flickr

Params

  • size (Optional)

    the size of the image to return. Optional sizes are:
      :square - square 75x75
      :large_square - square 150x150
      :thumbnail - 100 on longest side
      :small - 240 on longest side
      :small_320 - 320 on longest side
      :medium - 500 on longest side
      :medium_640 - 640 on longest side
      :medium_800 - 800 on longest side
      :large - 1024 on longest side (only exists for very large original images)
      :original - original image, either a jpg, gif or png, depending on source format
    


65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/flickr/photo.rb', line 65

def image_url(size = :medium)
	# It turns out that flickr always stores all the sizes of the picture even when getSizes call returns otherwise.
	# Not calling getSizes is also very important for performance reasons.
	# Retrieving 30 search results means calling the API 31 times if you call getSizes every time.
	# Mind that you still need to call getSizes if you go out for the original image.
	if size == :original
 size_hash[size.to_s].source if size_hash.has_key? size.to_s
	else
 key = "_#{size_key(size.to_sym)}"
 key = "" if key == "_"
 "http://farm#{farm}.static.flickr.com/#{server}/#{id}_#{secret}#{key}.jpg"
	end
end

#licenseObject

return the license associated with the photo



183
184
185
# File 'lib/flickr/photo.rb', line 183

def license
  @flickr.photos.licenses[self.license_id]
end

#locationObject

Returns the location of the photo (if available) or nil if photo is not geo-tagged.



189
190
191
192
193
194
195
196
197
198
199
# File 'lib/flickr/photo.rb', line 189

def location
  begin
    @location ||= @flickr.photos.geo.get_location(self.id)
  rescue Flickr::Error => e
    if e.code == 2 # 2: Photo has no location information.
      return nil
    else
      raise e
    end
  end
end

#location=(location) ⇒ Object



201
202
203
204
205
206
207
208
# File 'lib/flickr/photo.rb', line 201

def location= location
  if !location.nil?
    @flickr.photos.geo.set_location(self.id, location.latitude, location.longitude, location.accuracy)
  else
    @flickr.photos.geo.remove_location(self.id)
  end
  @location = location
end

#photo_size(size = :medium) ⇒ Object

returns an instance of Flickr::Photos::Size for the required size

Params

* size (Optional)
  the size of the size instance to return.  Optional sizes are:
     :square - square 75x75
     :large_square - square 150x150
     :thumbnail - 100 on longest side
     :small - 240 on longest side
     :small_320 - 320 on longest side
     :medium - 500 on longest side
     :medium_640 - 640 on longest side
     :medium_800 - 800 on longest side
     :large - 1024 on longest side (only exists for very large original images)
     :original - original image, either a jpg, gif or png, depending on source format

Examples

Photo.photo_size(:square).source
Photo.photo_size(:large).width


45
46
47
# File 'lib/flickr/photo.rb', line 45

def photo_size(size = :medium)
  size_hash.fetch(size.to_s, size_hash['medium'])
end

#photopage_urlObject



79
80
81
82
# File 'lib/flickr/photo.rb', line 79

def photopage_url
	# Keeping the same convention as image_url (foo_url)
	url_photopage
end

#rotate(degrees) ⇒ Object

Rotate a photo.

Params

  • degrees (Required)

    The amount of degrees by which to rotate the photo (clockwise) from it's current orientation. Valid values are 90, 180 and 270.
    


176
177
178
179
# File 'lib/flickr/photo.rb', line 176

def rotate(degrees)
  @flickr.send_request('flickr.photos.transform.rotate', {:photo_id => self.id, :degrees => degrees}, :post)
  true
end

#save_as(filename, size = :medium) ⇒ Object

save the current photo to the local computer

Params

  • filename (Required)

    name of the new file omiting the extention (ex. photo_1)
    
  • size (Optional)

    the size of the image to return. Optional sizes are:
      :square - square 75x75
      :large_square - square 150x150
      :thumbnail - 100 on longest side
      :small - 240 on longest side
      :small_320 - 320 on longest side
      :medium - 500 on longest side
      :medium_640 - 640 on longest side
      :medium_800 - 800 on longest side
      :large - 1024 on longest side (only exists for very large original images)
      :original - original image, either a jpg, gif or png, depending on source format
    


108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/flickr/photo.rb', line 108

def save_as(filename, size = :medium)
  format = size.to_sym == :original ? (self.original_format || 'jpg') : 'jpg'
  filename = "#{filename}.#{format}"

  if File.exists?(filename) or not self.url(size)
    false
  else
    f = File.new(filename, 'w+')
    f.puts open(self.url(size)).read
    f.close
    f
  end
end

#set_license(license_id) ⇒ Object

Sets the license for a photo.

Params

  • license_id (Required)

    The license to apply, or 0 (zero) to remove the current license.
    


215
216
217
218
# File 'lib/flickr/photo.rb', line 215

def set_license(license_id)
  @flickr.send_request('flickr.photos.licenses.setLicense', {:photo_id => self.id, :license_id => license_id}, :post)
  true
end

#sizesObject

:nodoc:



268
269
270
271
272
273
274
275
276
277
278
279
# File 'lib/flickr/photo.rb', line 268

def sizes # :nodoc:
  @sizes ||= begin
    rsp = @flickr.send_request('flickr.photos.getSizes', :photo_id => self.id)
    
    _sizes = []
    rsp.sizes.size.each do |size|
      _sizes << Flickr::Photos::Size.new(:label => size[:label], :width => size[:width],
        :height => size[:height], :source => size[:source], :url => size[:url])
    end
    _sizes
  end
end

#url(size = :medium) ⇒ Object

Alias to image_url method



23
24
25
# File 'lib/flickr/photo.rb', line 23

def url(size = :medium)
  image_url(size)
end

#video_urlObject



84
85
86
87
88
# File 'lib/flickr/photo.rb', line 84

def video_url
  if size_hash['video player']
    size_hash['video player'].source
  end
end