flickrie 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -1
- data/.yardopts +11 -0
- data/CHANGELOG.md +28 -24
- data/README.md +1 -1
- data/Rakefile +1 -1
- data/lib/flickrie.rb +156 -1
- data/lib/flickrie/api_methods.rb +324 -74
- data/lib/flickrie/client.rb +12 -79
- data/lib/flickrie/instance.rb +9 -10
- data/lib/flickrie/location.rb +12 -0
- data/lib/flickrie/media.rb +78 -17
- data/lib/flickrie/media/exif.rb +7 -5
- data/lib/flickrie/media/note.rb +1 -0
- data/lib/flickrie/media/tag.rb +6 -0
- data/lib/flickrie/media/visibility.rb +5 -0
- data/lib/flickrie/media_count.rb +7 -0
- data/lib/flickrie/oauth.rb +3 -3
- data/lib/flickrie/photo.rb +7 -4
- data/lib/flickrie/set.rb +27 -7
- data/lib/flickrie/ticket.rb +5 -0
- data/lib/flickrie/upload_client.rb +3 -39
- data/lib/flickrie/user.rb +28 -6
- data/lib/flickrie/version.rb +1 -1
- data/lib/flickrie/video.rb +11 -2
- metadata +18 -17
data/lib/flickrie/client.rb
CHANGED
@@ -1,68 +1,7 @@
|
|
1
|
-
require '
|
1
|
+
require 'faraday'
|
2
2
|
|
3
3
|
module Flickrie
|
4
|
-
|
5
|
-
TIMEOUT = 6
|
6
|
-
|
7
|
-
class << self
|
8
|
-
def self.attr_accessor_with_client_reset(*attributes) # :nodoc:
|
9
|
-
attr_reader *attributes
|
10
|
-
|
11
|
-
attributes.each do |attribute|
|
12
|
-
define_method "#{attribute}=" do |value|
|
13
|
-
instance_variable_set "@#{attribute}", value
|
14
|
-
@client = @upload_client = nil
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
attr_accessor_with_client_reset :api_key, :shared_secret,
|
20
|
-
:timeout, :open_timeout, :access_token, :access_secret
|
21
|
-
|
22
|
-
# ==== Example
|
23
|
-
#
|
24
|
-
# Flickrie.client.get "flickr.photos.licenses.getInfo"
|
25
|
-
# Flickrie.client.post "flickr.photos.licenses.setLicense", :photo_id => 1241497, :license_id => 2
|
26
|
-
def client
|
27
|
-
@client ||= new_client
|
28
|
-
end
|
29
|
-
|
30
|
-
def new_client(access_token_hash = {}) # :nodoc:
|
31
|
-
Client.new(params) do |b|
|
32
|
-
b.use Middleware::Retry
|
33
|
-
b.use FaradayMiddleware::OAuth,
|
34
|
-
:consumer_key => api_key,
|
35
|
-
:consumer_secret => shared_secret,
|
36
|
-
:token => access_token_hash[:token] || access_token,
|
37
|
-
:token_secret => access_token_hash[:secret] || access_secret
|
38
|
-
|
39
|
-
b.use Middleware::StatusCheck
|
40
|
-
b.use FaradayMiddleware::ParseJson
|
41
|
-
b.use Middleware::OAuthCheck
|
42
|
-
|
43
|
-
b.adapter :net_http
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
|
49
|
-
def params
|
50
|
-
{
|
51
|
-
:url => 'http://api.flickr.com/services/rest',
|
52
|
-
:params => {
|
53
|
-
:format => 'json',
|
54
|
-
:nojsoncallback => '1',
|
55
|
-
:api_key => api_key
|
56
|
-
},
|
57
|
-
:request => {
|
58
|
-
:open_timeout => open_timeout || OPEN_TIMEOUT,
|
59
|
-
:timeout => timeout || TIMEOUT
|
60
|
-
}
|
61
|
-
}
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
class Client < Faraday::Connection # :nodoc:
|
4
|
+
class Client < Faraday::Connection
|
66
5
|
def get(method, params = {})
|
67
6
|
super() do |req|
|
68
7
|
req.params[:method] = method
|
@@ -77,7 +16,6 @@ module Flickrie
|
|
77
16
|
end
|
78
17
|
end
|
79
18
|
|
80
|
-
#--
|
81
19
|
# people
|
82
20
|
def find_user_by_email(email, params = {})
|
83
21
|
get 'flickr.people.findByEmail',
|
@@ -89,22 +27,21 @@ module Flickrie
|
|
89
27
|
{:username => username}.merge(params)
|
90
28
|
end
|
91
29
|
|
92
|
-
def get_user_info(
|
30
|
+
def get_user_info(nsid, params = {})
|
93
31
|
get 'flickr.people.getInfo',
|
94
|
-
{:user_id =>
|
32
|
+
{:user_id => nsid}.merge(params)
|
95
33
|
end
|
96
34
|
|
97
|
-
def media_from_user(
|
35
|
+
def media_from_user(nsid, params = {})
|
98
36
|
get 'flickr.people.getPhotos',
|
99
|
-
ensure_media({:user_id =>
|
37
|
+
ensure_media({:user_id => nsid}.merge(params))
|
100
38
|
end
|
101
39
|
|
102
|
-
def public_media_from_user(
|
40
|
+
def public_media_from_user(nsid, params = {})
|
103
41
|
get 'flickr.people.getPublicPhotos',
|
104
|
-
ensure_media({:user_id =>
|
42
|
+
ensure_media({:user_id => nsid}.merge(params))
|
105
43
|
end
|
106
44
|
|
107
|
-
#--
|
108
45
|
# photos
|
109
46
|
def add_media_tags(media_id, tags, params = {})
|
110
47
|
post 'flickr.photos.addTags',
|
@@ -120,9 +57,9 @@ module Flickrie
|
|
120
57
|
get 'flickr.photos.getContactsPhotos', ensure_media(params)
|
121
58
|
end
|
122
59
|
|
123
|
-
def public_media_from_user_contacts(
|
60
|
+
def public_media_from_user_contacts(nsid, params = {})
|
124
61
|
get 'flickr.photos.getContactsPublicPhotos',
|
125
|
-
ensure_media({:user_id =>
|
62
|
+
ensure_media({:user_id => nsid}.merge(params))
|
126
63
|
end
|
127
64
|
|
128
65
|
def get_media_context(media_id, params = {})
|
@@ -163,29 +100,26 @@ module Flickrie
|
|
163
100
|
get 'flickr.photos.search', ensure_media(params)
|
164
101
|
end
|
165
102
|
|
166
|
-
#--
|
167
103
|
# photos.upload
|
168
104
|
def check_upload_tickets(tickets, params = {})
|
169
105
|
get 'flickr.photos.upload.checkTickets',
|
170
106
|
{:tickets => tickets}.merge(params)
|
171
107
|
end
|
172
108
|
|
173
|
-
#--
|
174
109
|
# photos.licenses
|
175
110
|
def get_licenses(params = {})
|
176
111
|
get 'flickr.photos.licenses.getInfo', params
|
177
112
|
end
|
178
113
|
|
179
|
-
#--
|
180
114
|
# photosets
|
181
115
|
def get_set_info(set_id, params = {})
|
182
116
|
get 'flickr.photosets.getInfo',
|
183
117
|
{:photoset_id => set_id}.merge(params)
|
184
118
|
end
|
185
119
|
|
186
|
-
def sets_from_user(
|
120
|
+
def sets_from_user(nsid, params = {})
|
187
121
|
get 'flickr.photosets.getList',
|
188
|
-
{:user_id =>
|
122
|
+
{:user_id => nsid}.merge(params)
|
189
123
|
end
|
190
124
|
|
191
125
|
def media_from_set(set_id, params = {})
|
@@ -193,7 +127,6 @@ module Flickrie
|
|
193
127
|
ensure_media({:photoset_id => set_id}.merge(params))
|
194
128
|
end
|
195
129
|
|
196
|
-
#--
|
197
130
|
# test
|
198
131
|
def test_login(params = {})
|
199
132
|
get 'flickr.test.login', params
|
data/lib/flickrie/instance.rb
CHANGED
@@ -2,28 +2,27 @@ module Flickrie
|
|
2
2
|
class Instance
|
3
3
|
attr_reader :access_token, :access_secret
|
4
4
|
|
5
|
+
# Initializes a new authenticated instance. Example:
|
6
|
+
#
|
7
|
+
# flickrie = Flickrie::Instance.new("ACCESS_TOKEN", "ACCESS_SECRET")
|
8
|
+
# flickrie.find_user_by_email("...")
|
5
9
|
def initialize(access_token, access_secret)
|
6
10
|
@access_token, @access_secret = access_token, access_secret
|
7
11
|
end
|
8
12
|
|
9
|
-
#
|
10
|
-
#
|
11
|
-
# flickrie = Flickrie::Instance.new("ACCESS_TOKEN", "ACCESS_SECRET")
|
12
|
-
#
|
13
|
-
# flickrie.client.get "flickr.photos.licenses.getInfo"
|
14
|
-
# flickrie.client.post "flickr.photos.licenses.setLicense", :photo_id => 1241497, :license_id => 2
|
13
|
+
# See {Flickrie.client} for more info.
|
15
14
|
def client
|
16
15
|
@client ||= Flickrie.new_client(access_token_hash)
|
17
16
|
end
|
18
17
|
|
19
|
-
def upload_client
|
20
|
-
@upload_client ||= Flickrie.new_upload_client(access_token_hash)
|
21
|
-
end
|
22
|
-
|
23
18
|
include ApiMethods
|
24
19
|
|
25
20
|
private
|
26
21
|
|
22
|
+
def upload_client
|
23
|
+
@upload_client ||= Flickrie.new_upload_client(access_token_hash)
|
24
|
+
end
|
25
|
+
|
27
26
|
def access_token_hash
|
28
27
|
{:token => access_token, :secret => access_secret}
|
29
28
|
end
|
data/lib/flickrie/location.rb
CHANGED
@@ -1,20 +1,32 @@
|
|
1
1
|
module Flickrie
|
2
2
|
class Location
|
3
|
+
# @!parse attr_reader :latitude
|
3
4
|
def latitude() @info['latitude'] end
|
5
|
+
# @!parse attr_reader :longitude
|
4
6
|
def longitude() @info['longitude'] end
|
7
|
+
# @!parse attr_reader :accuracy
|
5
8
|
def accuracy() @info['accuracy'] end
|
9
|
+
# @!parse attr_reader :context
|
6
10
|
def context() Integer(@info['context']) rescue nil end
|
7
11
|
|
12
|
+
# @!parse attr_reader :neighbourhood
|
8
13
|
def neighbourhood() new_area('neighbourhood') end
|
14
|
+
# @!parse attr_reader :locality
|
9
15
|
def locality() new_area('locality') end
|
16
|
+
# @!parse attr_reader :county
|
10
17
|
def county() new_area('county') end
|
18
|
+
# @!parse attr_reader :region
|
11
19
|
def region() new_area('region') end
|
20
|
+
# @!parse attr_reader :country
|
12
21
|
def country() new_area('country') end
|
13
22
|
|
23
|
+
# @!parse attr_reader :place_id
|
14
24
|
def place_id() @info['place_id'] end
|
25
|
+
# @!parse attr_reader :woeid
|
15
26
|
def woeid() @info['woeid'] end
|
16
27
|
|
17
28
|
def [](key) @info[key] end
|
29
|
+
# @!parse attr_reader :hash
|
18
30
|
def hash() @info end
|
19
31
|
|
20
32
|
private
|
data/lib/flickrie/media.rb
CHANGED
@@ -7,58 +7,94 @@ require 'date'
|
|
7
7
|
|
8
8
|
module Flickrie
|
9
9
|
module Media
|
10
|
+
# @!parse attr_reader :id
|
10
11
|
def id() @info['id'] end
|
12
|
+
# @!parse attr_reader :secret
|
11
13
|
def secret() @info['secret'] end
|
14
|
+
# @!parse attr_reader :server
|
12
15
|
def server() @info['server'] end
|
16
|
+
# @!parse attr_reader :farm
|
13
17
|
def farm() @info['farm'] end
|
18
|
+
# @!parse attr_reader :title
|
14
19
|
def title() @info['title'] end
|
20
|
+
# @!parse attr_reader :description
|
15
21
|
def description() @info['description'] end
|
22
|
+
# @!parse attr_reader :media_status
|
16
23
|
def media_status() @info['media_status'] end
|
24
|
+
# @!parse attr_reader :path_alias
|
17
25
|
def path_alias() @info['pathalias'] end
|
18
26
|
|
27
|
+
# @!parse attr_reader :camera
|
19
28
|
def camera() @info['camera'] end
|
20
|
-
#
|
29
|
+
# Returns exif of the photo/video. Example:
|
21
30
|
#
|
22
|
-
#
|
31
|
+
# photo.exif.get('Model') # => 'Canon PowerShot G12'
|
23
32
|
#
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
33
|
+
# photo.exif.get('X-Resolution', :data => 'raw') # => '180'
|
34
|
+
# photo.exif.get('X-Resolution', :data => 'clean') # => '180 dpi'
|
35
|
+
# photo.exif.get('X-Resolution') # => '180 dpi'
|
36
|
+
#
|
37
|
+
# @return [Flickrie::Media::Exif]
|
38
|
+
#
|
39
|
+
# @!parse attr_reader :exif
|
27
40
|
def exif() Exif.new(@info['exif']) rescue nil end
|
28
41
|
|
42
|
+
# @!parse attr_reader :views_count
|
29
43
|
def views_count() Integer(@info['views']) rescue nil end
|
44
|
+
# @!parse attr_reader :comments_count
|
30
45
|
def comments_count() Integer(@info['comments_count']) rescue nil end
|
31
46
|
|
32
|
-
#
|
47
|
+
# @return [Flickrie::Location]
|
48
|
+
#
|
49
|
+
# @!parse attr_reader :location
|
33
50
|
def location() Location.new(@info['location']) rescue nil end
|
34
|
-
#
|
51
|
+
# @return [Flickrie::Media::Visibility]
|
52
|
+
#
|
53
|
+
# @!parse attr_reader :geo_permissions
|
35
54
|
def geo_permissions() Visibility.new(@info['geoperms']) rescue nil end
|
36
55
|
|
37
|
-
#
|
56
|
+
# @return [Array<Flickrie::Media::Tag>]
|
57
|
+
#
|
58
|
+
# @!parse attr_reader :tags
|
38
59
|
def tags() @info['tags'].map { |info| Tag.new(info) } rescue nil end
|
39
|
-
#
|
60
|
+
# @return [Array<Flickrie::Media::Tag>]
|
61
|
+
#
|
62
|
+
# @!parse attr_reader :machine_tags
|
40
63
|
def machine_tags() tags.select { |tag| tag.machine_tag? } rescue nil end
|
41
64
|
|
42
|
-
#
|
65
|
+
# @return [Flickrie::License]
|
66
|
+
# @!parse attr_reader :license
|
43
67
|
def license() License.new(@info['license']) rescue nil end
|
44
68
|
|
69
|
+
# @!parse attr_reader :posted_at
|
45
70
|
def posted_at() Time.at(Integer(@info['dates']['posted'])) rescue nil end
|
71
|
+
# @!parse attr_reader :uploaded_at
|
46
72
|
def uploaded_at() Time.at(Integer(@info['dates']['uploaded'])) rescue nil end
|
73
|
+
# @!parse attr_reader :updated_at
|
47
74
|
def updated_at() Time.at(Integer(@info['dates']['lastupdate'])) rescue nil end
|
75
|
+
# @!parse attr_reader :taken_at
|
48
76
|
def taken_at() DateTime.parse(@info['dates']['taken']).to_time rescue nil end
|
77
|
+
# @!parse attr_reader :taken_at_granularity
|
49
78
|
def taken_at_granularity() Integer(@info['dates']['takengranularity']) rescue nil end
|
50
79
|
|
51
|
-
#
|
80
|
+
# @return [Flickrie::User]
|
81
|
+
#
|
82
|
+
# @!parse attr_reader :owner
|
52
83
|
def owner() User.new(@info['owner']) rescue nil end
|
53
84
|
|
85
|
+
# @!parse attr_reader :safety_level
|
54
86
|
def safety_level() Integer(@info['safety_level']) rescue nil end
|
55
87
|
|
88
|
+
# @!parse attr_reader :safe?
|
56
89
|
def safe?() safety_level <= 1 if safety_level end
|
90
|
+
# @!parse attr_reader :moderate?
|
57
91
|
def moderate?() safety_level == 2 if safety_level end
|
92
|
+
# @!parse attr_reader :restricted?
|
58
93
|
def restricted?() safety_level == 3 if safety_level end
|
59
94
|
|
60
|
-
|
61
|
-
#
|
95
|
+
# @comment TODO: Take care about the url from #get_info
|
96
|
+
#
|
97
|
+
# @!parse attr_reader :url
|
62
98
|
def url
|
63
99
|
if owner and id
|
64
100
|
"http://www.flickr.com/photos/#{owner.nsid}/#{id}"
|
@@ -67,37 +103,57 @@ module Flickrie
|
|
67
103
|
end
|
68
104
|
end
|
69
105
|
|
70
|
-
#
|
106
|
+
# @return [Flickrie::Media::Visibility]
|
107
|
+
#
|
108
|
+
# @!parse attr_reader :visibility
|
71
109
|
def visibility() Visibility.new(@info['visibility']) rescue nil end
|
72
110
|
|
111
|
+
# @!parse attr_reader :primary?
|
73
112
|
def primary?() Integer(@info['isprimary']) == 1 rescue nil end
|
74
113
|
|
114
|
+
# @!parse attr_reader :favorite?
|
75
115
|
def favorite?() Integer(@info['isfavorite']) == 1 rescue nil end
|
76
116
|
|
117
|
+
# @!parse attr_reader :can_comment?
|
77
118
|
def can_comment?() Integer(@info['editability']['cancomment']) == 1 rescue nil end
|
119
|
+
# @!parse attr_reader :can_add_meta?
|
78
120
|
def can_add_meta?() Integer(@info['editability']['canaddmeta']) == 1 rescue nil end
|
79
121
|
|
122
|
+
# @!parse attr_reader :can_everyone_comment?
|
80
123
|
def can_everyone_comment?() Integer(@info['publiceditability']['cancomment']) == 1 rescue nil end
|
124
|
+
# @!parse attr_reader :can_everyone_add_meta?
|
81
125
|
def can_everyone_add_meta?() Integer(@info['publiceditability']['canaddmeta']) == 1 rescue nil end
|
82
126
|
|
127
|
+
# @!parse attr_reader :can_download?
|
83
128
|
def can_download?() Integer(@info['usage']['candownload']) == 1 rescue nil end
|
129
|
+
# @!parse attr_reader :can_blog?
|
84
130
|
def can_blog?() Integer(@info['usage']['canblog']) == 1 rescue nil end
|
131
|
+
# @!parse attr_reader :can_print?
|
85
132
|
def can_print?() Integer(@info['usage']['canprint']) == 1 rescue nil end
|
133
|
+
# @!parse attr_reader :can_share?
|
86
134
|
def can_share?() Integer(@info['usage']['canshare']) == 1 rescue nil end
|
87
135
|
|
136
|
+
# @!parse attr_reader :has_people?
|
88
137
|
def has_people?() Integer(@info['people']['haspeople']) == 1 rescue nil end
|
89
138
|
|
139
|
+
# @!parse attr_reader :faved?
|
90
140
|
def faved?() Integer(@info['is_faved']) == 1 rescue nil end
|
91
141
|
|
92
|
-
#
|
142
|
+
# @return [Array<Flickrie::Media::Note>]
|
143
|
+
#
|
144
|
+
# @!parse attr_reader :notes
|
93
145
|
def notes() @info['notes']['note'].map { |hash| Note.new(hash) } rescue nil end
|
94
146
|
|
95
|
-
#
|
147
|
+
# @return [Array<Flickrie::User>]
|
148
|
+
#
|
149
|
+
# @!parse attr_reader :favorites
|
96
150
|
def favorites() @info['person'].map { |info| User.new(info) } rescue nil end
|
97
151
|
|
98
152
|
def [](key) @info[key] end
|
153
|
+
# @!parse attr_reader :hash
|
99
154
|
def hash() @info end
|
100
155
|
|
156
|
+
# Same as calling `Flickrie.get_(photo|video)_info(id)`.
|
101
157
|
def get_info(params = {}, info = nil)
|
102
158
|
info ||= Flickrie.client.get_media_info(id, params).body['photo']
|
103
159
|
@info.update(info)
|
@@ -112,6 +168,7 @@ module Flickrie
|
|
112
168
|
self
|
113
169
|
end
|
114
170
|
|
171
|
+
# Same as calling `Flickrie.get_(photo|video)_info(id)`.
|
115
172
|
def get_exif(params = {}, info = nil)
|
116
173
|
info ||= Flickrie.client.get_media_exif(id, params).body['photo']
|
117
174
|
@info.update(info)
|
@@ -119,6 +176,7 @@ module Flickrie
|
|
119
176
|
self
|
120
177
|
end
|
121
178
|
|
179
|
+
# Same as calling `Flickrie.get_(photo|video)_info(id)`.
|
122
180
|
def get_favorites(params = {}, info = nil)
|
123
181
|
info ||= Flickrie.client.get_media_favorites(id, params).body['photo']
|
124
182
|
@info.update(info)
|
@@ -130,7 +188,8 @@ module Flickrie
|
|
130
188
|
@info = info
|
131
189
|
end
|
132
190
|
|
133
|
-
|
191
|
+
# @private
|
192
|
+
module ClassMethods
|
134
193
|
def from_set(hash)
|
135
194
|
hash['photo'].map do |info|
|
136
195
|
info['owner'] = {
|
@@ -224,10 +283,12 @@ module Flickrie
|
|
224
283
|
end
|
225
284
|
extend(ClassMethods)
|
226
285
|
|
286
|
+
# @private
|
227
287
|
def self.included(klass)
|
228
288
|
klass.extend(ClassMethods)
|
229
289
|
end
|
230
290
|
|
291
|
+
# @private
|
231
292
|
def self.new(info)
|
232
293
|
eval(info['media'].capitalize).new(info)
|
233
294
|
end
|
data/lib/flickrie/media/exif.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
module Flickrie
|
2
2
|
module Media
|
3
3
|
class Exif
|
4
|
-
#
|
4
|
+
# Gets exif. Example:
|
5
5
|
#
|
6
|
-
#
|
6
|
+
# photo.exif.get('Model') # => 'Canon PowerShot G12'
|
7
|
+
#
|
8
|
+
# photo.exif.get('X-Resolution', :data => 'raw') # => '180'
|
9
|
+
# photo.exif.get('X-Resolution', :data => 'clean') # => '180 dpi'
|
10
|
+
# photo.exif.get('X-Resolution') # => '180 dpi'
|
7
11
|
#
|
8
|
-
# photo.exif.get('X-Resolution', :data => 'raw') # => '180'
|
9
|
-
# photo.exif.get('X-Resolution', :data => 'clean') # => '180 dpi'
|
10
|
-
# photo.exif.get('X-Resolution') # => '180 dpi'
|
11
12
|
#
|
12
13
|
def get(key, options = {})
|
13
14
|
hash = @info.find { |hash| hash['label'] == key }
|
@@ -19,6 +20,7 @@ module Flickrie
|
|
19
20
|
end
|
20
21
|
|
21
22
|
def [](key) @info[key] end
|
23
|
+
# @!parse attr_reader :hash
|
22
24
|
def hash() @info end
|
23
25
|
|
24
26
|
private
|