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
    


14
15
16
17
18
19
20
21
22
23
24
# File 'lib/flickr/photo.rb', line 14

def initialize(flickr, attributes)
  @flickr = flickr
  attributes.each do |k,v|
    # necessary for anything that comes via 'extras' or of course
    # possible future changes in the api returns
    if ! respond_to?(k)
      self.class.send(:attr_accessor, k)
    end
    send("#{k}=", v)
  end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object



252
253
254
255
256
257
# File 'lib/flickr/photo.rb', line 252

def method_missing(method, *args, &block)
  if [:description, :original_secret, :owner_username, :owner_realname, :url_photopage, :notes].include?(method.to_sym)
    @attach_info ||= attach_info
    return @attach_info[method.to_sym]
  end
end

Instance Attribute Details

#commentsObject

:nodoc:



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

def comments
  @comments
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

#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

#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

#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

#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

#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
    


130
131
132
133
# File 'lib/flickr/photo.rb', line 130

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
    


149
150
151
152
# File 'lib/flickr/photo.rb', line 149

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
    


119
120
121
122
# File 'lib/flickr/photo.rb', line 119

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

#family?Boolean

Returns:

  • (Boolean)


212
213
214
# File 'lib/flickr/photo.rb', line 212

def family?
  is_family == "1"
end

#friend?Boolean

Returns:

  • (Boolean)


208
209
210
# File 'lib/flickr/photo.rb', line 208

def friend?
  is_friend == "1"
end

#image_url(size = :medium) ⇒ Object Also known as: url

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
      :thumbnail - 100 on longest side
      :small - 240 on longest side
      :medium - 500 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
    


56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/flickr/photo.rb', line 56

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
    return original_url if respond_to?(:original_url) and !original_url.blank?
    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



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

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.



173
174
175
176
177
178
179
180
181
182
183
# File 'lib/flickr/photo.rb', line 173

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



185
186
187
188
189
190
191
192
# File 'lib/flickr/photo.rb', line 185

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
     :thumbnail - 100 on longest side
     :small - 240 on longest side
     :medium - 500 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


40
41
42
# File 'lib/flickr/photo.rb', line 40

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

#photopage_urlObject



72
73
74
75
# File 'lib/flickr/photo.rb', line 72

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

#public?Boolean

Returns:

  • (Boolean)


204
205
206
# File 'lib/flickr/photo.rb', line 204

def public?
  is_public == "1"
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.
    


160
161
162
163
# File 'lib/flickr/photo.rb', line 160

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:
      :small - square 75x75
      :thumbnail  - 100 on longest side
      :small      - 240 on longest side
      :medium     - 500 on longest side
      :medium_500 - 500 on the longest side
      :medium_640 - 640 on the 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
    


99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/flickr/photo.rb', line 99

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.
    


199
200
201
202
# File 'lib/flickr/photo.rb', line 199

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:



239
240
241
242
243
244
245
246
247
248
249
250
# File 'lib/flickr/photo.rb', line 239

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

#video_urlObject



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

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