flickr-fu 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -79,12 +79,16 @@ module Flickr
79
79
  #
80
80
  def sign_request(options, authorize = true)
81
81
  options.merge!(:auth_token => self.auth.token(false).to_s) if authorize and self.auth.token(false)
82
+ options.delete(:api_sig)
82
83
  options.merge!(:api_sig => Digest::MD5.hexdigest(@api_secret + options.keys.sort_by{|k| k.to_s}.collect{|k| k.to_s + options[k].to_s}.join)) if @api_secret
83
84
  end
84
85
 
85
86
  # creates and/or returns the Flickr::Photos object
86
87
  def photos() @photos ||= Photos.new(self) end
87
88
 
89
+ # creates and/or returns the Flickr::People object
90
+ def people() @people ||= People.new(self) end
91
+
88
92
  # creates and/or returns the Flickr::Auth object
89
93
  def auth() @auth ||= Auth.new(self) end
90
94
 
@@ -0,0 +1,54 @@
1
+ class Flickr::People < Flickr::Base
2
+ def initialize(flickr)
3
+ @flickr = flickr
4
+ end
5
+
6
+ # Get information about a user.
7
+ #
8
+ # Params
9
+ # * id (Required)
10
+ # the nsid of the user to get information for
11
+ #
12
+ def find_by_id(id)
13
+ rsp = @flickr.send_request('flickr.people.getInfo', {:user_id => id})
14
+
15
+ Person.new(@flickr, :nsid => rsp.person[:nsid],
16
+ :is_admin => (rsp.person[:isadmin] == "1" ? true : false),
17
+ :is_pro => (rsp.person[:ispro] == "1" ? true : false),
18
+ :icon_server => rsp.person[:iconserver],
19
+ :icon_farm => rsp.person[:iconfarm],
20
+ :username => rsp.person.username.to_s,
21
+ :realname => rsp.person.realname.to_s,
22
+ :mbox_sha1sum => rsp.person.mbox_sha1sum.to_s,
23
+ :location => rsp.person.location.to_s,
24
+ :photos_url => rsp.person.photosurl.to_s,
25
+ :profile_url => rsp.person.profileurl.to_s,
26
+ :photo_count => rsp.person.photos.count.to_s.to_i,
27
+ :photo_first_upload => (Time.at(rsp.person.photos.firstdate.to_s.to_i) rescue nil),
28
+ :photo_first_taken => (Time.parse(rsp.person.photos.firstdatetaken.to_s) rescue nil))
29
+ end
30
+
31
+ # Get information about a user.
32
+ #
33
+ # Params
34
+ # * username (Required)
35
+ # the username of the user to get information for
36
+ #
37
+ def find_by_username(username)
38
+ rsp = @flickr.send_request('flickr.people.findByUsername', {:username => username})
39
+
40
+ find_by_id(rsp.user[:nsid])
41
+ end
42
+
43
+ # Get information about a user.
44
+ #
45
+ # Params
46
+ # * email (Required)
47
+ # the email of the user to get information for
48
+ #
49
+ def find_by_email(email)
50
+ rsp = @flickr.send_request('flickr.people.findByEmail', {:find_email => email})
51
+
52
+ find_by_id(rsp.user[:nsid])
53
+ end
54
+ end
@@ -0,0 +1,74 @@
1
+ # wrapping class to hold an flickr photo
2
+ #
3
+ class Flickr::People::Person
4
+ attr_accessor :username, :nsid, :is_admin, :is_pro, :icon_server, :icon_farm, :realname, :mbox_sha1sum, :location, :photos_url, :profile_url, :photo_count, :photo_first_upload, :photo_first_taken
5
+
6
+ # create a new instance of a flickr person.
7
+ #
8
+ # Params
9
+ # * flickr (Required)
10
+ # the flickr object
11
+ # * attributes (Required)
12
+ # a hash of attributes used to set the initial values of the person object
13
+ def initialize(flickr, attributes)
14
+ @flickr = flickr
15
+ attributes.each do |k,v|
16
+ send("#{k}=", v)
17
+ end
18
+ end
19
+
20
+ # Get a list of public photos for the given user.
21
+ #
22
+ # Options
23
+ # * safe_search (Optional)
24
+ # Safe search setting:
25
+ # 1 for safe.
26
+ # 2 for moderate.
27
+ # 3 for restricted.
28
+ # (Please note: Un-authed calls can only see Safe content.)
29
+ # * per_page (Optional)
30
+ # Number of photos to return per page. If this argument is omitted, it defaults to 100. The maximum allowed value is 500.
31
+ # * page (Optional)
32
+ # The page of results to return. If this argument is omitted, it defaults to 1.
33
+ def public_photos(options = {})
34
+ options.merge!({:user_id => self.nsid, :extras => "license,date_upload,date_taken,owner_name,icon_server,original_format,last_update,geo,tags,machine_tags,o_dims,views,media"})
35
+
36
+ rsp = @flickr.send_request('flickr.people.getPublicPhotos', options)
37
+
38
+ returning Flickr::Photos::PhotoResponse.new(:page => rsp.photos[:page].to_i,
39
+ :pages => rsp.photos[:pages].to_i,
40
+ :per_page => rsp.photos[:perpage].to_i,
41
+ :total => rsp.photos[:total].to_i,
42
+ :photos => [],
43
+ :api => self,
44
+ :method => 'public_photos',
45
+ :options => options) do |photos|
46
+ rsp.photos.photo.each do |photo|
47
+ attributes = {:id => photo[:id],
48
+ :owner => photo[:owner],
49
+ :secret => photo[:secret],
50
+ :server => photo[:server],
51
+ :farm => photo[:farm],
52
+ :title => photo[:title],
53
+ :is_public => photo[:ispublic],
54
+ :is_friend => photo[:isfriend],
55
+ :is_family => photo[:isfamily],
56
+ :license => photo[:license],
57
+ :uploaded_at => (Time.at(photo[:dateupload].to_i) rescue nil),
58
+ :taken_at => (Time.parse(photo[:datetaken]) rescue nil),
59
+ :owner_name => photo[:ownername],
60
+ :icon_server => photo[:icon_server],
61
+ :original_format => photo[:originalformat],
62
+ :updated_at => (Time.at(photo[:lastupdate].to_i) rescue nil),
63
+ :geo => photo[:geo],
64
+ :tags => photo[:tags],
65
+ :machine_tags => photo[:machine_tags],
66
+ :o_dims => photo[:o_dims],
67
+ :views => photo[:views].to_i,
68
+ :media => photo[:media]}
69
+
70
+ photos << Flickr::Photos::Photo.new(@flickr, attributes)
71
+ end if rsp.photos.photo
72
+ end
73
+ end
74
+ end
@@ -2,7 +2,7 @@
2
2
  #
3
3
  class Flickr::Photos::Photo
4
4
  attr_accessor :id, :owner, :secret, :server, :farm, :title, :is_public, :is_friend, :is_family # standard attributes
5
- attr_accessor :license, :uploaded_at, :taken_at, :owner_name, :icon_server, :original_format, :updated_at, :geo, :tags, :machine_tags, :o_dims, :views # extra attributes
5
+ attr_accessor :license, :uploaded_at, :taken_at, :owner_name, :icon_server, :original_format, :updated_at, :geo, :tags, :machine_tags, :o_dims, :views, :media # extra attributes
6
6
  attr_accessor :info_added, :description, :original_secret, :owner_username, :owner_realname, :url_photopage, :notes # info attributes
7
7
  attr_accessor :sizes_added, :sizes, :url_square, :url_thumbnail, :url_small, :url_medium, :url_large, :url_original # size attributes
8
8
  attr_accessor :comments_added, :comments # comment attributes
@@ -22,12 +22,12 @@ class Flickr::Photos::PhotoResponse
22
22
 
23
23
  # gets the next page from flickr if there are anymore pages in the current photos object
24
24
  def next_page
25
- api.send(self.method.split('.').last, options.merge(:page => self.page.to_i + 1)) if self.page.to_i < self.pages.to_i
25
+ api.send(self.method, options.merge(:page => self.page.to_i + 1)) if self.page.to_i < self.pages.to_i
26
26
  end
27
27
 
28
28
  # gets the previous page from flickr if there is a previous page in the current photos object
29
29
  def previous_page
30
- api.send(self.method.split('.').last, options.merge(:page => self.page.to_i - 1)) if self.page.to_i > 1
30
+ api.send(self.method, options.merge(:page => self.page.to_i - 1)) if self.page.to_i > 1
31
31
  end
32
32
 
33
33
  # passes all unknown request to the photos array if it responds to the method
@@ -113,7 +113,7 @@ class Flickr::Photos < Flickr::Base
113
113
  # The page of results to return. If this argument is omitted, it defaults to 1.
114
114
  #
115
115
  def search(options)
116
- options.merge!({:extras => "license,date_upload,date_taken,owner_name,icon_server,original_format,last_update,geo,tags,machine_tags,o_dims,views"})
116
+ options.merge!({:extras => "license,date_upload,date_taken,owner_name,icon_server,original_format,last_update,geo,tags,machine_tags,o_dims,views,media"})
117
117
 
118
118
  rsp = @flickr.send_request('flickr.photos.search', options)
119
119
 
@@ -121,8 +121,9 @@ class Flickr::Photos < Flickr::Base
121
121
  :pages => rsp.photos[:pages].to_i,
122
122
  :per_page => rsp.photos[:perpage].to_i,
123
123
  :total => rsp.photos[:total].to_i,
124
- :photos => [], :api => self,
125
- :method => 'flickr.photos.search',
124
+ :photos => [],
125
+ :api => self,
126
+ :method => 'search',
126
127
  :options => options) do |photos|
127
128
  rsp.photos.photo.each do |photo|
128
129
  attributes = {:id => photo[:id],
@@ -145,7 +146,8 @@ class Flickr::Photos < Flickr::Base
145
146
  :tags => photo[:tags],
146
147
  :machine_tags => photo[:machine_tags],
147
148
  :o_dims => photo[:o_dims],
148
- :views => photo[:views].to_i}
149
+ :views => photo[:views].to_i,
150
+ :media => photo[:media]}
149
151
 
150
152
  photos << Photo.new(@flickr, attributes)
151
153
  end if rsp.photos.photo
@@ -164,7 +166,7 @@ class Flickr::Photos < Flickr::Base
164
166
  # The page of results to return. If this argument is omitted, it defaults to 1.
165
167
  #
166
168
  def get_recent(options)
167
- options.merge!({:extras => "license,date_upload,date_taken,owner_name,icon_server,original_format,last_update,geo,tags,machine_tags,o_dims,views"})
169
+ options.merge!({:extras => "license,date_upload,date_taken,owner_name,icon_server,original_format,last_update,geo,tags,machine_tags,o_dims,views,media"})
168
170
 
169
171
  rsp = @flickr.send_request('flickr.photos.getRecent', options)
170
172
 
@@ -196,7 +198,8 @@ class Flickr::Photos < Flickr::Base
196
198
  :tags => photo[:tags],
197
199
  :machine_tags => photo[:machine_tags],
198
200
  :o_dims => photo[:o_dims],
199
- :views => photo[:views].to_i}
201
+ :views => photo[:views].to_i,
202
+ :media => photo[:media]}
200
203
 
201
204
  photos << Photo.new(@flickr, attributes)
202
205
  end if rsp.photos.photo
@@ -0,0 +1,19 @@
1
+ # wrapper class to hold a flickr upload status object.
2
+ #
3
+ class Flickr::Uploader::Status
4
+ attr_accessor :nsid, :is_pro, :username, :max_bandwidth, :used_bandwidth, :remaining_bandwidth, :max_filesize, :max_videosize, :sets_created, :sets_remaining
5
+
6
+ # create a new instance of a flickr upload status object.
7
+ #
8
+ # Params
9
+ # * flickr (Required)
10
+ # the flickr object
11
+ # * attributes (Required)
12
+ # a hash of attributes used to set the initial values of the status object
13
+ def initialize(flickr, attributes)
14
+ @flickr = flickr
15
+ attributes.each do |k,v|
16
+ send("#{k}=", v)
17
+ end
18
+ end
19
+ end
@@ -67,6 +67,27 @@ class Flickr::Uploader < Flickr::Base
67
67
  raise "#{xm.err[:code]}: #{xm.err[:msg]}"
68
68
  end
69
69
  end
70
+
71
+ # Returns information for the calling user related to photo uploads.
72
+ #
73
+ # * Bandwidth and filesize numbers are provided in bytes.
74
+ # * Bandwidth is specified in bytes per month.
75
+ # * Pro accounts display 99 for the number of remaining sets, since they have unlimited sets. Free accounts will display either 3, 2, 1, or 0.
76
+ #
77
+ def status
78
+ rsp = @flickr.send_request('flickr.people.getUploadStatus')
79
+
80
+ Flickr::Uploader::Status.new(@flickr, :nsid => rsp.user[:id],
81
+ :is_pro => (rsp.user[:ispro] == "1" ? true : false),
82
+ :username => rsp.user.username.to_s,
83
+ :max_bandwidth => rsp.user.bandwidth[:maxbytes],
84
+ :used_bandwidth => rsp.user.bandwidth[:usedbytes],
85
+ :remaining_bandwidth => rsp.user.bandwidth[:remainingbytes],
86
+ :max_filesize => rsp.user.filesize[:maxbytes],
87
+ :max_videosize => rsp.user.videosize[:maxbytes],
88
+ :sets_created => rsp.user.sets[:created].to_i,
89
+ :sets_remaining => (rsp.user[:ispro] == "1" ? 99 : rsp.user.sets[:remaining].to_i))
90
+ end
70
91
  end
71
92
 
72
93
  class Flickr::Uploader::FormPart
@@ -6,9 +6,11 @@ require 'uri'
6
6
  require 'mime/types'
7
7
  require 'digest/md5'
8
8
  require 'yaml'
9
+ require 'time'
10
+ require 'date'
9
11
 
10
12
  # base must load first
11
- %w(base auth token photos photo photo_response comment note size uploader).each do |file|
13
+ %w(base auth token photos photo photo_response comment note size uploader status people person).each do |file|
12
14
  require File.join(File.dirname(__FILE__), 'flickr', file)
13
15
  end
14
16
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flickr-fu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Wyrosdick
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-04-09 00:00:00 -05:00
12
+ date: 2008-04-10 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -35,10 +35,13 @@ files:
35
35
  - lib/flickr/base.rb
36
36
  - lib/flickr/comment.rb
37
37
  - lib/flickr/note.rb
38
+ - lib/flickr/people.rb
39
+ - lib/flickr/person.rb
38
40
  - lib/flickr/photo.rb
39
41
  - lib/flickr/photo_response.rb
40
42
  - lib/flickr/photos.rb
41
43
  - lib/flickr/size.rb
44
+ - lib/flickr/status.rb
42
45
  - lib/flickr/token.rb
43
46
  - lib/flickr/uploader.rb
44
47
  - lib/flickr_fu.rb