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/.gitignore
CHANGED
data/.yardopts
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
--charset utf-8
|
2
|
+
--readme README.md
|
3
|
+
--markup markdown
|
4
|
+
--title "Flickrie documentation"
|
5
|
+
--exclude "lib/flickrie/middleware.rb"
|
6
|
+
--exclude "lib/flickrie/client.rb"
|
7
|
+
--exclude "lib/flickrie/upload_client.rb"
|
8
|
+
--tag api_method:"Flickr API method"
|
9
|
+
--tag comment
|
10
|
+
--hide-tag comment
|
11
|
+
--no-private
|
data/CHANGELOG.md
CHANGED
@@ -1,44 +1,48 @@
|
|
1
1
|
# Flickrie changelog
|
2
2
|
|
3
|
+
## Version 1.0.1
|
4
|
+
|
5
|
+
- Transfered the documentation to YARD. See the readme for the updated link.
|
6
|
+
|
3
7
|
## Version 1.0.0
|
4
8
|
|
5
|
-
|
9
|
+
### Changes that are backwards compatible
|
6
10
|
|
7
|
-
|
11
|
+
- Fixed content type not being passed to the file you're uploading
|
8
12
|
if you specified it directly.
|
9
13
|
|
10
|
-
|
14
|
+
- The request will now be retried once more if it timeouts
|
11
15
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
+
- In authentication:
|
17
|
+
** you can now call `request_token.authorize_url` instead of `request_token.get_authorization_url`.
|
18
|
+
** you can now call `request_token.get_access_token(code)` instead of `Flickrie::OAuth.get_access_token(code, request_token)`.
|
19
|
+
** you also get the infomation about the user who just authenticated,
|
16
20
|
which you can then access with `access_token.user_info`
|
17
21
|
(it's a Hash with keys `:fullname`, `:user_nsid` and `:username`)
|
18
22
|
|
19
|
-
|
20
|
-
|
21
|
-
|
23
|
+
- When calling `Flickrie.get_photos_counts`, the `Flickrie::MediaCount`
|
24
|
+
now also has attributes `#time_interval` (alias for `#date_range`),
|
25
|
+
`#from` and `#to`.
|
22
26
|
|
23
|
-
|
27
|
+
### Changes that are NOT backwards compatible
|
24
28
|
|
25
|
-
|
26
|
-
|
29
|
+
- If you're passing in the content type of the file you're uploading,
|
30
|
+
the parameter is now called `:content_type`, not `:mime_type`.
|
27
31
|
|
28
|
-
|
29
|
-
|
32
|
+
- If there is a problem in obtaining the access token, `Flickrie::Error`
|
33
|
+
is now raised, instead of `Flickrie::OAuth::Error`.
|
30
34
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
+
- When you're calling `request_token.get_authorization_url`, if you want to
|
36
|
+
specifiy permissions, you now have to pass the `:perms` option,
|
37
|
+
instead of `:permissions`. In this way you can pass any parameter,
|
38
|
+
and it will be appended to the URL (in case Flickr adds a new parameter).
|
35
39
|
|
36
|
-
|
37
|
-
|
38
|
-
|
40
|
+
- When you have a `Flickrie::User` instance, the
|
41
|
+
`Flickrie::User#time_zone` now returns a struct with `#label` and
|
42
|
+
`#offset` attributes (before it returned a `Hash` with those keys).
|
39
43
|
|
40
|
-
|
41
|
-
|
44
|
+
- When you call `Flickrie.get_media_context`, the result is now a
|
45
|
+
struct with attributes `#count`, `#previous`, `#next`.
|
42
46
|
|
43
47
|
## Version 0.7.3
|
44
48
|
|
data/README.md
CHANGED
@@ -45,7 +45,7 @@ You first need to install the gem.
|
|
45
45
|
Then, if you're using Bundler in your project, put it into your `Gemfile`:
|
46
46
|
|
47
47
|
```ruby
|
48
|
-
gem "flickrie"
|
48
|
+
gem "flickrie", "~> 1.0.0"
|
49
49
|
```
|
50
50
|
|
51
51
|
Then in your app you set the API key and shared secret (if you don't have them
|
data/Rakefile
CHANGED
@@ -8,7 +8,7 @@ task :spec do |task, args|
|
|
8
8
|
system "rspec -Ispec"
|
9
9
|
end
|
10
10
|
|
11
|
-
Dir["spec/*_spec.rb"].each do |spec|
|
11
|
+
Dir["spec/flickrie/*_spec.rb"].each do |spec|
|
12
12
|
task_name = File.basename(spec)[/.+(?=_spec\.rb)/]
|
13
13
|
task :"spec:#{task_name}" do
|
14
14
|
system "rspec -Ispec #{spec}"
|
data/lib/flickrie.rb
CHANGED
@@ -1,6 +1,161 @@
|
|
1
|
+
require 'flickrie/client'
|
2
|
+
require 'flickrie/upload_client'
|
3
|
+
require 'flickrie/middleware'
|
4
|
+
require 'faraday_middleware'
|
5
|
+
|
6
|
+
module Flickrie
|
7
|
+
DEFAULTS = {
|
8
|
+
:open_timeout => 3,
|
9
|
+
:timeout => 4
|
10
|
+
}
|
11
|
+
|
12
|
+
class << self
|
13
|
+
# Your API key. If you don't have one already, you can apply for it
|
14
|
+
# [here](http://www.flickr.com/services/apps/create/apply) (you first
|
15
|
+
# have to sign in).
|
16
|
+
attr_accessor :api_key
|
17
|
+
|
18
|
+
# Your shared secret. This goes in pair with your API key.
|
19
|
+
# If you don't have the API key already, you can apply for it
|
20
|
+
# [here](http://www.flickr.com/services/apps/create/apply) (you first
|
21
|
+
# have to sign in).
|
22
|
+
attr_accessor :shared_secret
|
23
|
+
|
24
|
+
# Time to wait for the connection to Flickr to open (in seconds).
|
25
|
+
# Otherwise `Faraday::Error::TimeoutError` is raised. If you're in a
|
26
|
+
# web application, you may want to rescue this exception and display
|
27
|
+
# some custom error page (telling the user to try to load the page again,
|
28
|
+
# for example).
|
29
|
+
#
|
30
|
+
# You may want to override this if you notice that your connection often
|
31
|
+
# timeouts.
|
32
|
+
#
|
33
|
+
# Defaults to 3 seconds.
|
34
|
+
attr_accessor :open_timeout
|
35
|
+
|
36
|
+
# Time to wait for the first block of response from Flickr to be read
|
37
|
+
# (in seconds). Otherwise `Faraday::Error::TimeoutError` is raised.
|
38
|
+
# If you're in a web application, you may want to rescue this exception
|
39
|
+
# and display some custom error page (telling the user to try to load
|
40
|
+
# the page again, for example).
|
41
|
+
#
|
42
|
+
# You may want to override this if you notice that your connection often
|
43
|
+
# timeouts.
|
44
|
+
#
|
45
|
+
# Defaults to 4 seconds.
|
46
|
+
attr_accessor :timeout
|
47
|
+
|
48
|
+
# Access token (token + secret) is used to make authenticated requests.
|
49
|
+
# Access tokens are unique for each Flickr user, and they last forever.
|
50
|
+
# So, if your app is of that kind that it asks users to authenticate through Flickr,
|
51
|
+
# after you get their access token, you can store it somewhere in the database,
|
52
|
+
# and you never have to ask that user to authenticate again.
|
53
|
+
#
|
54
|
+
# You can obtain the access token in various ways:
|
55
|
+
#
|
56
|
+
# - using this gem's [authentication proccess](https://github.com/janko-m/flickrie#authentication)
|
57
|
+
#
|
58
|
+
# - using my [flickr_auth](https://github.com/janko-m/flickr_auth) gem
|
59
|
+
#
|
60
|
+
# - using [omniauth](https://github.com/intridea/omniauth) with the
|
61
|
+
# [omniauth-flickr](https://github.com/timbreitkreutz/omniauth-flickr) strategy
|
62
|
+
attr_accessor :access_token, :access_secret
|
63
|
+
|
64
|
+
[
|
65
|
+
:api_key, :shared_secret, :timeout,
|
66
|
+
:open_timeout, :access_token, :access_secret
|
67
|
+
].
|
68
|
+
each do |attribute|
|
69
|
+
define_method "#{attribute}=" do |value|
|
70
|
+
instance_variable_set "@#{attribute}", value
|
71
|
+
@client = @upload_client = nil
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# This is for manual use (for example, if I haven't covered something yet, and you really need it).
|
76
|
+
# Here's an example:
|
77
|
+
#
|
78
|
+
# response = Flickrie.client.get "flickr.photos.getInfo", :photo_id => 8423943
|
79
|
+
# response.body['photo']['id'] # => 8423943
|
80
|
+
# response.body['photo']['description'] # => "..."
|
81
|
+
#
|
82
|
+
# Flickrie.client.post "flickr.photos.licenses.setLicense", :photo_id => 1241497, :license_id => 2
|
83
|
+
#
|
84
|
+
# For the full list of available API methods, see [this page](http://www.flickr.com/services/api/).
|
85
|
+
#
|
86
|
+
# @return [HTTP response] A Faraday HTTP response
|
87
|
+
def client
|
88
|
+
@client ||= new_client
|
89
|
+
end
|
90
|
+
|
91
|
+
# @private
|
92
|
+
def new_client(access_token = {})
|
93
|
+
params = {
|
94
|
+
:url => 'http://api.flickr.com/services/rest',
|
95
|
+
:params => {
|
96
|
+
:format => 'json',
|
97
|
+
:nojsoncallback => '1',
|
98
|
+
:api_key => api_key
|
99
|
+
},
|
100
|
+
:request => {
|
101
|
+
:open_timeout => open_timeout || DEFAULTS[:open_timeout],
|
102
|
+
:timeout => timeout || DEFAULTS[:timeout]
|
103
|
+
}
|
104
|
+
}
|
105
|
+
|
106
|
+
Client.new(params) do |b|
|
107
|
+
b.use Middleware::Retry
|
108
|
+
b.use FaradayMiddleware::OAuth,
|
109
|
+
:consumer_key => api_key,
|
110
|
+
:consumer_secret => shared_secret,
|
111
|
+
:token => access_token[:token] || self.access_token,
|
112
|
+
:token_secret => access_token[:secret] || self.access_secret
|
113
|
+
|
114
|
+
b.use Middleware::StatusCheck
|
115
|
+
b.use FaradayMiddleware::ParseJson
|
116
|
+
b.use Middleware::OAuthCheck
|
117
|
+
|
118
|
+
b.adapter :net_http
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
# @private
|
123
|
+
def upload_client
|
124
|
+
@upload_client ||= new_upload_client
|
125
|
+
end
|
126
|
+
|
127
|
+
# @private
|
128
|
+
def new_upload_client(access_token = {})
|
129
|
+
params = {
|
130
|
+
:url => 'http://api.flickr.com/services',
|
131
|
+
:request => {
|
132
|
+
:open_timeout => open_timeout || DEFAULTS[:open_timeout]
|
133
|
+
}
|
134
|
+
}
|
135
|
+
|
136
|
+
UploadClient.new(params) do |b|
|
137
|
+
b.use Middleware::Retry
|
138
|
+
b.use FaradayMiddleware::OAuth,
|
139
|
+
:consumer_key => api_key,
|
140
|
+
:consumer_secret => shared_secret,
|
141
|
+
:token => access_token[:token] || self.access_token,
|
142
|
+
:token_secret => access_token[:secret] || self.access_secret
|
143
|
+
b.request :multipart
|
144
|
+
|
145
|
+
b.use Middleware::UploadStatusCheck
|
146
|
+
b.use FaradayMiddleware::ParseXml
|
147
|
+
b.use Middleware::OAuthCheck
|
148
|
+
|
149
|
+
b.adapter :net_http
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
1
155
|
require 'flickrie/api_methods'
|
2
|
-
require 'flickrie/instance'
|
3
156
|
|
4
157
|
module Flickrie
|
5
158
|
extend ApiMethods
|
6
159
|
end
|
160
|
+
|
161
|
+
require 'flickrie/instance'
|
data/lib/flickrie/api_methods.rb
CHANGED
@@ -13,14 +13,20 @@ require 'flickrie/ticket'
|
|
13
13
|
|
14
14
|
module Flickrie
|
15
15
|
module ApiMethods
|
16
|
-
#
|
16
|
+
# For uploading photos and videos to Flickr. Example:
|
17
17
|
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
18
|
+
# path = File.expand_path("photo.jpg")
|
19
|
+
# photo_id = Flickrie.upload(path, :title => "Me and Jessica", :description => "...")
|
20
|
+
# photo = Flickrie.get_photo_info(photo_id)
|
21
|
+
# photo.title # => "Me and Jessica"
|
22
22
|
#
|
23
|
-
# If the
|
23
|
+
# If the `:async => 1` option is passed, returns the ticket ID (see {#check\_upload\_tickets}).
|
24
|
+
#
|
25
|
+
# @param media [File, String] A file or a path to the file you want to upload
|
26
|
+
# @param params [Hash] Options for uploading (see [this page](http://www.flickr.com/services/api/upload.api.html))
|
27
|
+
# @return [String] New photo's ID, or ticket's ID, if `:async => 1` is passed
|
28
|
+
#
|
29
|
+
# @note This method requires authentication with "write" permissions.
|
24
30
|
def upload(media, params = {})
|
25
31
|
response = upload_client.upload(media, params)
|
26
32
|
if params[:async] == 1
|
@@ -30,15 +36,20 @@ module Flickrie
|
|
30
36
|
end
|
31
37
|
end
|
32
38
|
|
33
|
-
#
|
39
|
+
# For replacing photos and videos on Flickr. Example:
|
40
|
+
#
|
41
|
+
# path = File.expand_path("photo.jpg")
|
42
|
+
# photo_id = 42374 # ID of the photo to be replaced
|
43
|
+
# id = Flickrie.replace(path, photo_id)
|
34
44
|
#
|
35
|
-
#
|
36
|
-
# photo_id = 42374 # ID of the photo to be replaced
|
37
|
-
# id = Flickrie.replace(path, photo_id, :title => "Me and Jessica", :description => "...")
|
38
|
-
# photo = Flickrie.get_photo_info(id)
|
39
|
-
# photo.title # => "Me and Jessica"
|
45
|
+
# If the `:async => 1` option is passed, returns the ticket ID (see {#check\_upload\_tickets}).
|
40
46
|
#
|
41
|
-
#
|
47
|
+
# @param media [File, String] A file or a path to the file you want to upload
|
48
|
+
# @param media_id [String, Fixnum] The ID of the photo/video to be replaced
|
49
|
+
# @param params [Hash] Options for replacing (see [this page](http://www.flickr.com/services/api/replace.api.html))
|
50
|
+
# @return [String] New photo's ID, or ticket's ID, if `:async => 1` is passed
|
51
|
+
#
|
52
|
+
# @note This method requires authentication with "write" permissions.
|
42
53
|
def replace(media, media_id, params = {})
|
43
54
|
response = upload_client.replace(media, media_id, params)
|
44
55
|
if params[:async] == 1
|
@@ -48,94 +59,199 @@ module Flickrie
|
|
48
59
|
end
|
49
60
|
end
|
50
61
|
|
51
|
-
|
52
|
-
#
|
62
|
+
# Fetches the Flickr user with the given email.
|
63
|
+
#
|
64
|
+
# @param email [String]
|
65
|
+
# @return [Flickrie::User]
|
66
|
+
# @api_method [flickr.people.findByEmail](http://www.flickr.com/services/api/flickr.people.findByEmail.html)
|
53
67
|
def find_user_by_email(email, params = {})
|
54
68
|
response = client.find_user_by_email(email, params)
|
55
69
|
User.from_find(response.body['user'])
|
56
70
|
end
|
57
71
|
|
72
|
+
# Fetches the Flickr user with the given username.
|
73
|
+
#
|
74
|
+
# @param username [String]
|
75
|
+
# @return [Flickrie::User]
|
76
|
+
# @api_method [flickr.people.findByUsername](http://www.flickr.com/services/api/flickr.people.findByUsername.html)
|
58
77
|
def find_user_by_username(username, params = {})
|
59
78
|
response = client.find_user_by_username(username, params)
|
60
79
|
User.from_find(response.body['user'])
|
61
80
|
end
|
62
81
|
|
63
|
-
|
64
|
-
|
82
|
+
# Fetches the Flickr user with the given NSID.
|
83
|
+
#
|
84
|
+
# @param nsid [String]
|
85
|
+
# @return [Flickrie::User]
|
86
|
+
# @api_method [flickr.people.getInfo](http://www.flickr.com/services/api/flickr.people.getInfo.html)
|
87
|
+
def get_user_info(nsid, params = {})
|
88
|
+
response = client.get_user_info(nsid, params)
|
65
89
|
User.from_info(response.body['person'])
|
66
90
|
end
|
67
91
|
|
68
|
-
|
69
|
-
|
92
|
+
# Fetches photos and videos from the Flickr user with the given NSID.
|
93
|
+
#
|
94
|
+
# @param nsid [String]
|
95
|
+
# @return [Array<Flickrie::Photo, Flickrie::Video>]
|
96
|
+
# @api_method [flickr.people.getPhotos](http://www.flickr.com/services/api/flickr.people.getPhotos.html)
|
97
|
+
#
|
98
|
+
# @note This method requires authentication with "read" permissions.
|
99
|
+
def media_from_user(nsid, params = {})
|
100
|
+
response = client.media_from_user(nsid, params)
|
70
101
|
Media.from_user(response.body['photos'])
|
71
102
|
end
|
72
|
-
|
73
|
-
|
103
|
+
# Fetches photos from the Flickr user with the given NSID.
|
104
|
+
#
|
105
|
+
# @param nsid [String]
|
106
|
+
# @return [Array<Flickrie::Photo>]
|
107
|
+
# @api_method [flickr.people.getPhotos](http://www.flickr.com/services/api/flickr.people.getPhotos.html)
|
108
|
+
#
|
109
|
+
# @note This method requires authentication with "read" permissions.
|
110
|
+
def photos_from_user(nsid, params = {})
|
111
|
+
media_from_user(nsid, params).
|
74
112
|
select { |media| media.is_a?(Photo) }
|
75
113
|
end
|
76
|
-
|
77
|
-
|
114
|
+
# Fetches videos from the Flickr user with the given NSID.
|
115
|
+
#
|
116
|
+
# @param nsid [String]
|
117
|
+
# @return [Array<Flickrie::Video>]
|
118
|
+
# @api_method [flickr.people.getPhotos](http://www.flickr.com/services/api/flickr.people.getPhotos.html)
|
119
|
+
#
|
120
|
+
# @note This method requires authentication with "read" permissions.
|
121
|
+
def videos_from_user(nsid, params = {})
|
122
|
+
media_from_user(nsid, params).
|
78
123
|
select { |media| media.is_a?(Video) }
|
79
124
|
end
|
80
125
|
|
81
|
-
|
82
|
-
|
126
|
+
# Fetches public photos and videos from the Flickr user with the given
|
127
|
+
# NSID.
|
128
|
+
#
|
129
|
+
# @param nsid [String]
|
130
|
+
# @return [Array<Flickrie::Photo, Flickrie::Video>]
|
131
|
+
# @api_method [flickr.people.getPublicPhotos](http://www.flickr.com/services/api/flickr.people.getPublicPhotos.html)
|
132
|
+
def public_media_from_user(nsid, params = {})
|
133
|
+
response = client.public_media_from_user(nsid, params)
|
83
134
|
Media.from_user(response.body['photos'])
|
84
135
|
end
|
85
|
-
|
86
|
-
|
136
|
+
# Fetches public photos from the Flickr user with the given NSID.
|
137
|
+
#
|
138
|
+
# @param nsid [String]
|
139
|
+
# @return [Array<Flickrie::Photo>]
|
140
|
+
# @api_method [flickr.people.getPublicPhotos](http://www.flickr.com/services/api/flickr.people.getPublicPhotos.html)
|
141
|
+
def public_photos_from_user(nsid, params = {})
|
142
|
+
public_media_from_user(nsid, params).
|
87
143
|
select { |media| media.is_a?(Photo) }
|
88
144
|
end
|
89
|
-
|
90
|
-
|
145
|
+
# Fetches public videos from the Flickr user with the given NSID.
|
146
|
+
#
|
147
|
+
# @param nsid [String]
|
148
|
+
# @return [Array<Flickrie::Video>]
|
149
|
+
# @api_method [flickr.people.getPublicPhotos](http://www.flickr.com/services/api/flickr.people.getPublicPhotos.html)
|
150
|
+
def public_videos_from_user(nsid, params = {})
|
151
|
+
public_media_from_user(nsid, params).
|
91
152
|
select { |media| media.is_a?(Video) }
|
92
153
|
end
|
93
154
|
|
94
|
-
|
95
|
-
#
|
155
|
+
# Add tags to the photo/video with the given ID.
|
156
|
+
#
|
157
|
+
# @param media_id [String, Fixnum]
|
158
|
+
# @param tags [String] A space delimited string with tags
|
159
|
+
# @api_method [flickr.photos.addTags](http://www.flickr.com/services/api/flickr.photos.addTags.html)
|
160
|
+
#
|
161
|
+
# @note This method requires authentication with "write" permissions.
|
96
162
|
def add_media_tags(media_id, tags, params = {})
|
97
163
|
client.add_media_tags(media_id, tags, params)
|
164
|
+
nil
|
98
165
|
end
|
99
166
|
alias add_photo_tags add_media_tags
|
100
167
|
alias add_video_tags add_media_tags
|
101
168
|
|
169
|
+
# Deletes the photo/video with the given ID.
|
170
|
+
#
|
171
|
+
# @param media_id [String, Fixnum]
|
172
|
+
# @api_method [flickr.photos.delete](http://www.flickr.com/services/api/flickr.photos.delete.html)
|
173
|
+
#
|
174
|
+
# @note This method requires authentication with "delete" permissions.
|
102
175
|
def delete_media(media_id, params = {})
|
103
176
|
client.delete_media(media_id, params)
|
104
|
-
|
177
|
+
nil
|
105
178
|
end
|
106
179
|
alias delete_photo delete_media
|
107
180
|
alias delete_video delete_media
|
108
181
|
|
182
|
+
# Fetches photos and videos from contacts of the user who authenticated.
|
183
|
+
#
|
184
|
+
# @param params [Hash] Options for this API method (see the link below)
|
185
|
+
# @return [Array<Flickrie::Photo, Flickrie::Video>]
|
186
|
+
# @api_method [flickr.photos.getContactsPhotos](http://www.flickr.com/services/api/flickr.photos.getContactsPhotos.html)
|
187
|
+
#
|
188
|
+
# @note This method requires authentication with "read" permissions.
|
109
189
|
def media_from_contacts(params = {})
|
110
190
|
response = client.media_from_contacts(params)
|
111
191
|
Media.from_contacts(response.body['photos'])
|
112
192
|
end
|
193
|
+
# Fetches photos from contacts of the user who authenticated.
|
194
|
+
#
|
195
|
+
# @param params [Hash] Options for this API method (see the link below)
|
196
|
+
# @return [Array<Flickrie::Photo>]
|
197
|
+
# @api_method [flickr.photos.getContactsPhotos](http://www.flickr.com/services/api/flickr.photos.getContactsPhotos.html)
|
198
|
+
#
|
199
|
+
# @note This method requires authentication with "read" permissions.
|
113
200
|
def photos_from_contacts(params = {})
|
114
201
|
media_from_contacts(params).select { |media| media.is_a?(Photo) }
|
115
202
|
end
|
203
|
+
# Fetches videos from contacts of the user who authenticated.
|
204
|
+
#
|
205
|
+
# @param params [Hash] Options for this API method (see the link below)
|
206
|
+
# @return [Array<Flickrie::Video>]
|
207
|
+
# @api_method [flickr.photos.getContactsPhotos](http://www.flickr.com/services/api/flickr.photos.getContactsPhotos.html)
|
208
|
+
#
|
209
|
+
# @note This method requires authentication with "read" permissions.
|
116
210
|
def videos_from_contacts(params = {})
|
117
211
|
media_from_contacts(params).select { |media| media.is_a?(Video) }
|
118
212
|
end
|
119
213
|
|
120
|
-
|
121
|
-
|
214
|
+
# Fetches public photos and videos from contacts of the user with the
|
215
|
+
# given NSID.
|
216
|
+
#
|
217
|
+
# @param nsid [String]
|
218
|
+
# @param params [Hash] Options for this API method (see the link below)
|
219
|
+
# @api_method [flickr.photos.getContactsPublicPhotos](http://www.flickr.com/services/api/flickr.photos.getContactsPublicPhotos.html)
|
220
|
+
def public_media_from_user_contacts(nsid, params = {})
|
221
|
+
response = client.public_media_from_user_contacts(nsid, params)
|
122
222
|
Media.from_contacts(response.body['photos'])
|
123
223
|
end
|
124
|
-
|
125
|
-
|
224
|
+
# Fetches public photos from contacts of the user with the
|
225
|
+
# given NSID.
|
226
|
+
#
|
227
|
+
# @param nsid [String]
|
228
|
+
# @param params [Hash] Options for this API method (see the link below)
|
229
|
+
# @api_method [flickr.photos.getContactsPublicPhotos](http://www.flickr.com/services/api/flickr.photos.getContactsPublicPhotos.html)
|
230
|
+
def public_photos_from_user_contacts(nsid, params = {})
|
231
|
+
public_media_from_user_contacts(nsid, params).
|
126
232
|
select { |media| media.is_a?(Photo) }
|
127
233
|
end
|
128
|
-
|
129
|
-
|
234
|
+
# Fetches public videos from contacts of the user with the
|
235
|
+
# given NSID.
|
236
|
+
#
|
237
|
+
# @param nsid [String]
|
238
|
+
# @param params [Hash] Options for this API method (see the link below)
|
239
|
+
# @api_method [flickr.photos.getContactsPublicPhotos](http://www.flickr.com/services/api/flickr.photos.getContactsPublicPhotos.html)
|
240
|
+
def public_videos_from_user_contacts(nsid, params = {})
|
241
|
+
public_media_from_user_contacts(nsid, params).
|
130
242
|
select { |media| media.is_a?(Photo) }
|
131
243
|
end
|
132
244
|
|
133
|
-
#
|
245
|
+
# Fetches context of the photo/video with the given ID. Example:
|
246
|
+
#
|
247
|
+
# context = Flickrie.get_photo_context(37124234)
|
248
|
+
# context.count # => 23
|
249
|
+
# context.previous # => #<Photo: id=2433240, ...>
|
250
|
+
# context.next # => #<Video: id=1282404, ...>
|
134
251
|
#
|
135
|
-
#
|
136
|
-
#
|
137
|
-
#
|
138
|
-
# context.next # => #<Video: id=1282404, ...>
|
252
|
+
# @param media_id [String, Fixnum]
|
253
|
+
# @return [Struct]
|
254
|
+
# @api_method [flickr.photos.getContext](http://www.flickr.com/services/api/flickr.photos.getContext.html)
|
139
255
|
def get_media_context(media_id, params = {})
|
140
256
|
response = client.get_media_context(media_id, params)
|
141
257
|
Media.from_context(response.body)
|
@@ -143,7 +259,21 @@ module Flickrie
|
|
143
259
|
alias get_photo_context get_media_context
|
144
260
|
alias get_video_context get_media_context
|
145
261
|
|
146
|
-
#
|
262
|
+
# Fetches numbers of photos and videos for given date ranges. Example:
|
263
|
+
#
|
264
|
+
# require 'date'
|
265
|
+
# dates = [DateTime.parse("3rd Jan 2011").to_time, DateTime.parse("11th Aug 2011").to_time]
|
266
|
+
# counts = Flickrie.get_media_counts(:taken_dates => dates.map(&:to_i).join(','))
|
267
|
+
#
|
268
|
+
# count = counts.first
|
269
|
+
# count.value # => 24
|
270
|
+
# count.date_range # => 2011-01-03 01:00:00 +0100..2011-08-11 02:00:00 +0200
|
271
|
+
# count.date_range.begin # => 2011-01-03 01:00:00 +0100
|
272
|
+
# count.from # => 2011-01-03 01:00:00 +0100
|
273
|
+
#
|
274
|
+
# @param params [Hash] Options for this API method (see the link below)
|
275
|
+
# @return [Flickrie::MediaCount]
|
276
|
+
# @api_method [flickr.photos.getCounts](http://www.flickr.com/services/api/flickr.photos.getCounts.html)
|
147
277
|
def get_media_counts(params = {})
|
148
278
|
response = client.get_media_counts \
|
149
279
|
MediaCount.ensure_utc(params)
|
@@ -153,28 +283,71 @@ module Flickrie
|
|
153
283
|
alias get_photos_counts get_media_counts
|
154
284
|
alias get_videos_counts get_media_counts
|
155
285
|
|
156
|
-
#
|
286
|
+
# Fetches the exif for the photo with the given ID. Example:
|
287
|
+
#
|
288
|
+
# photo = Flickrie.get_photo_exif(27234987)
|
289
|
+
# photo.exif.get('Model') # => 'Canon PowerShot G12'
|
290
|
+
#
|
291
|
+
# photo.exif.get('X-Resolution', :data => 'raw') # => '180'
|
292
|
+
# photo.exif.get('X-Resolution', :data => 'clean') # => '180 dpi'
|
293
|
+
# photo.exif.get('X-Resolution') # => '180 dpi'
|
294
|
+
#
|
295
|
+
# @param photo_id [String, Fixnum]
|
296
|
+
# @return [Flickrie::Photo]
|
297
|
+
# @api_method [flickr.photos.getExif](http://www.flickr.com/services/api/flickr.photos.getExif.html)
|
157
298
|
def get_photo_exif(photo_id, params = {})
|
158
299
|
response = client.get_media_exif(photo_id, params)
|
159
300
|
Photo.from_exif(response.body['photo'])
|
160
301
|
end
|
161
|
-
#
|
302
|
+
# Fetches the exif for the video with the given ID. Example:
|
303
|
+
#
|
304
|
+
# video = Flickrie.get_video_exif(27234987)
|
305
|
+
# video.exif.get('Model') # => 'Canon PowerShot G12'
|
306
|
+
#
|
307
|
+
# video.exif.get('X-Resolution', :data => 'raw') # => '180'
|
308
|
+
# video.exif.get('X-Resolution', :data => 'clean') # => '180 dpi'
|
309
|
+
# video.exif.get('X-Resolution') # => '180 dpi'
|
310
|
+
#
|
311
|
+
# @param video_id [String, Fixnum]
|
312
|
+
# @return [Flickrie::Video]
|
313
|
+
# @api_method [flickr.photos.getExif](http://www.flickr.com/services/api/flickr.photos.getExif.html)
|
162
314
|
def get_video_exif(video_id, params = {})
|
163
315
|
response = client.get_media_exif(video_id, params)
|
164
316
|
Video.from_exif(response.body['photo'])
|
165
317
|
end
|
166
318
|
|
167
|
-
#
|
319
|
+
# Fetches the list of users who favorited the photo with the given ID.
|
320
|
+
# Example:
|
321
|
+
#
|
322
|
+
# photo = Flickrie.get_photo_favorites(24810948)
|
323
|
+
# photo.favorites.first.username # => "John Smith"
|
324
|
+
#
|
325
|
+
# @param photo_id [String, Fixnum]
|
326
|
+
# @return [Flickrie::Photo]
|
327
|
+
# @api_method [flickr.photos.getFavorites](http://www.flickr.com/services/api/flickr.photos.getFavorites.html)
|
168
328
|
def get_photo_favorites(photo_id, params = {})
|
169
329
|
response = client.get_media_favorites(photo_id, params)
|
170
330
|
Photo.new(response.body['photo'])
|
171
331
|
end
|
172
|
-
#
|
332
|
+
# Fetches the list of users who favorited the video with the given ID.
|
333
|
+
# Example:
|
334
|
+
#
|
335
|
+
# video = Flickrie.get_video_favorites(24810948)
|
336
|
+
# video.favorites.first.username # => "John Smith"
|
337
|
+
#
|
338
|
+
# @param video_id [String, Fixnum]
|
339
|
+
# @return [Flickrie::Video]
|
340
|
+
# @api_method [flickr.photos.getFavorites](http://www.flickr.com/services/api/flickr.photos.getFavorites.html)
|
173
341
|
def get_video_favorites(video_id, params = {})
|
174
342
|
response = client.get_media_favorites(video_id, params)
|
175
343
|
Video.new(response.body['photo'])
|
176
344
|
end
|
177
345
|
|
346
|
+
# Fetches info of the photo/video with the given ID.
|
347
|
+
#
|
348
|
+
# @param media_id [String, Fixnum]
|
349
|
+
# @return [Flickrie::Photo, Flickrie::Video]
|
350
|
+
# @api_method [flickr.photos.getInfo](http://www.flickr.com/services/api/flickr.photos.getInfo.html)
|
178
351
|
def get_media_info(media_id, params = {})
|
179
352
|
response = client.get_media_info(media_id, params)
|
180
353
|
Media.from_info(response.body['photo'])
|
@@ -182,81 +355,158 @@ module Flickrie
|
|
182
355
|
alias get_photo_info get_media_info
|
183
356
|
alias get_video_info get_media_info
|
184
357
|
|
185
|
-
#
|
358
|
+
# Fetches the sizes of the photo with the given ID. Example:
|
359
|
+
#
|
360
|
+
# photo = Flickrie.get_photo_sizes(242348)
|
361
|
+
# photo.medium!(500)
|
362
|
+
# photo.size # => "Medium 500"
|
363
|
+
# photo.source_url # => "http://farm8.staticflickr.com/7090/7093101501_9337f28800.jpg"
|
364
|
+
#
|
365
|
+
# @param photo_id [String, Fixnum]
|
366
|
+
# @return [Flickrie::Photo]
|
367
|
+
# @api_method [flickr.photos.getSizes](http://www.flickr.com/services/api/flickr.photos.getSizes.html)
|
186
368
|
def get_photo_sizes(photo_id, params = {})
|
187
369
|
response = client.get_media_sizes(photo_id, params)
|
188
370
|
Photo.from_sizes(response.body['sizes'])
|
189
371
|
end
|
190
|
-
#
|
372
|
+
# Fetches the sizes of the video with the given ID. Example:
|
373
|
+
#
|
374
|
+
# video = Flickrie.get_video_sizes(438492)
|
375
|
+
# video.download_url # => "..."
|
376
|
+
#
|
377
|
+
# @param video_id [String, Fixnum]
|
378
|
+
# @return [Flickrie::Video]
|
379
|
+
# @api_method [flickr.photos.getSizes](http://www.flickr.com/services/api/flickr.photos.getSizes.html)
|
191
380
|
def get_video_sizes(video_id, params = {})
|
192
381
|
response = client.get_media_sizes(video_id, params)
|
193
382
|
Video.from_sizes(response.body['sizes'])
|
194
383
|
end
|
195
384
|
|
385
|
+
# Remove the tag with the given ID
|
386
|
+
#
|
387
|
+
# @param tag_id [String]
|
388
|
+
# @api_method [flickr.photos.removeTag](http://www.flickr.com/services/api/flickr.photos.removeTag.html)
|
389
|
+
#
|
390
|
+
# @note This method requires authentication with "write" permissions.
|
196
391
|
def remove_media_tag(tag_id, params = {})
|
197
392
|
client.remove_media_tag(tag_id, params)
|
393
|
+
nil
|
198
394
|
end
|
199
395
|
alias remove_photo_tag remove_media_tag
|
200
396
|
alias remove_video_tag remove_media_tag
|
201
397
|
|
398
|
+
# Fetches photos and videos matching a certain criteria.
|
399
|
+
#
|
400
|
+
# @param search_params [Hash] Options for searching (see the link below)
|
401
|
+
# @return [Array<Flickrie::Photo, Flickrie::Video>]
|
402
|
+
# @api_method [flickr.photos.search](http://www.flickr.com/services/api/flickr.photos.search.html)
|
202
403
|
def search_media(search_params = {})
|
203
404
|
response = client.search_media(search_params)
|
204
405
|
Media.from_search(response.body['photos'])
|
205
406
|
end
|
407
|
+
# Fetches photos matching a certain criteria.
|
408
|
+
#
|
409
|
+
# @param search_params [Hash] Options for searching (see the link below)
|
410
|
+
# @return [Array<Flickrie::Photo>]
|
411
|
+
# @api_method [flickr.photos.search](http://www.flickr.com/services/api/flickr.photos.search.html)
|
206
412
|
def search_photos(search_params = {})
|
207
413
|
search_media(search_params.merge(:media => 'photos'))
|
208
414
|
end
|
415
|
+
# Fetches videos matching a certain criteria.
|
416
|
+
#
|
417
|
+
# @param search_params [Hash] Options for searching (see the link below)
|
418
|
+
# @return [Array<Flickrie::Video>]
|
419
|
+
# @api_method [flickr.photos.search](http://www.flickr.com/services/api/flickr.photos.search.html)
|
209
420
|
def search_videos(search_params = {})
|
210
421
|
search_media(search_params.merge(:media => 'videos'))
|
211
422
|
end
|
212
423
|
|
213
|
-
|
214
|
-
#
|
215
|
-
|
216
|
-
#
|
217
|
-
def check_upload_tickets(tickets, params = {})
|
218
|
-
tickets = tickets.join(',') if tickets.respond_to?(:join)
|
219
|
-
response = client.check_upload_tickets(tickets, params)
|
220
|
-
response.body['uploader']['ticket'].
|
221
|
-
map { |info| Ticket.new(info) }
|
222
|
-
end
|
223
|
-
|
224
|
-
#--
|
225
|
-
# licenses
|
226
|
-
#++
|
227
|
-
# Returns an array of Flickrie::License
|
424
|
+
# Fetches all available types of licenses.
|
425
|
+
#
|
426
|
+
# @return [Array<Flickrie::License>]
|
427
|
+
# @api_method [flickr.photos.licenses.getInfo](http://www.flickr.com/services/api/flickr.photos.licenses.getInfo.html)
|
228
428
|
def get_licenses(params = {})
|
229
429
|
response = client.get_licenses(params)
|
230
430
|
License.from_hash(response.body['licenses']['license'])
|
231
431
|
end
|
232
432
|
|
233
|
-
|
234
|
-
#
|
433
|
+
# Fetches upload tickets with given IDs. Example:
|
434
|
+
#
|
435
|
+
# photo = File.open("...")
|
436
|
+
# ticket_id = Flickrie.upload(photo)
|
437
|
+
# sleep(10)
|
438
|
+
#
|
439
|
+
# ticket = Flickrie.check_upload_tickects(ticket_id)
|
440
|
+
# if ticket.complete?
|
441
|
+
# puts "Photo was uploaded, and its ID is #{ticket.photo_id}"
|
442
|
+
# end
|
443
|
+
#
|
444
|
+
# @param tickets [String] A space delimited string with ticket IDs
|
445
|
+
# @return [Flickrie::Ticket]
|
446
|
+
# @api_method [flickr.photos.upload.checkTickets](http://www.flickr.com/services/api/flickr.photos.upload.checkTickets.html)
|
447
|
+
def check_upload_tickets(tickets, params = {})
|
448
|
+
ticket_ids = tickets.join(',') rescue tickets
|
449
|
+
response = client.check_upload_tickets(ticket_ids, params)
|
450
|
+
response.body['uploader']['ticket'].
|
451
|
+
map { |info| Ticket.new(info) }
|
452
|
+
end
|
453
|
+
|
454
|
+
# Fetches information about the set with the given ID.
|
455
|
+
#
|
456
|
+
# @param set_id [String, Fixnum]
|
457
|
+
# @return [Flickrie::Set]
|
458
|
+
# @api_method [flickr.photosets.getInfo](http://www.flickr.com/services/api/flickr.photosets.getInfo.html)
|
235
459
|
def get_set_info(set_id, params = {})
|
236
460
|
response = client.get_set_info(set_id, params)
|
237
461
|
Set.from_info(response.body['photoset'])
|
238
462
|
end
|
239
463
|
|
240
|
-
|
241
|
-
|
242
|
-
|
464
|
+
# Fetches sets from a user with the given NSID.
|
465
|
+
#
|
466
|
+
# @param nsid [String]
|
467
|
+
# @return [Array<Flickrie::Set>]
|
468
|
+
# @api_method [flickr.photosets.getList](http://www.flickr.com/services/api/flickr.photosets.getList.html)
|
469
|
+
def sets_from_user(nsid, params = {})
|
470
|
+
response = client.sets_from_user(nsid, params)
|
471
|
+
Set.from_user(response.body['photosets']['photoset'], nsid)
|
243
472
|
end
|
244
473
|
|
474
|
+
# Fetches photos and videos from a set with the given ID.
|
475
|
+
#
|
476
|
+
# @param set_id [String]
|
477
|
+
# @param params [Hash] Options for this API method (see the link below)
|
478
|
+
# @return [Array<Flickrie::Photo, Flickrie::Video>]
|
479
|
+
# @api_method [flickr.photosets.getPhotos](http://www.flickr.com/services/api/flickr.photosets.getPhotos.html)
|
245
480
|
def media_from_set(set_id, params = {})
|
246
481
|
response = client.media_from_set(set_id, params)
|
247
482
|
Media.from_set(response.body['photoset'])
|
248
483
|
end
|
484
|
+
# Fetches photos from a set with the given ID.
|
485
|
+
#
|
486
|
+
# @param set_id [String]
|
487
|
+
# @param params [Hash] Options for this API method (see the link below)
|
488
|
+
# @return [Array<Flickrie::Photo>]
|
489
|
+
# @api_method [flickr.photosets.getPhotos](http://www.flickr.com/services/api/flickr.photosets.getPhotos.html)
|
249
490
|
def photos_from_set(set_id, params = {})
|
250
491
|
media_from_set(set_id, params.merge(:media => 'photos'))
|
251
492
|
end
|
493
|
+
# Fetches videos from a set with the given ID.
|
494
|
+
#
|
495
|
+
# @param set_id [String]
|
496
|
+
# @param params [Hash] Options for this API method (see the link below)
|
497
|
+
# @return [Array<Flickrie::Video>]
|
498
|
+
# @api_method [flickr.photosets.getPhotos](http://www.flickr.com/services/api/flickr.photosets.getPhotos.html)
|
252
499
|
def videos_from_set(set_id, params = {})
|
253
500
|
media_from_set(set_id, params.merge(:media => 'videos'))
|
254
501
|
end
|
255
502
|
|
256
|
-
|
257
|
-
#
|
258
|
-
|
259
|
-
#
|
503
|
+
# Tests if the authentication was successful. If it was, it
|
504
|
+
# returns info of the user who just authenticated.
|
505
|
+
#
|
506
|
+
# @return [Flickrie::User]
|
507
|
+
# @api_method [flickr.test.login](http://www.flickr.com/services/api/flickr.test.login.html)
|
508
|
+
#
|
509
|
+
# @note This method requires authentication with "read" permissions.
|
260
510
|
def test_login(params = {})
|
261
511
|
response = client.test_login(params)
|
262
512
|
User.from_test(response.body['user'])
|