flickrie 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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'])
|