flickraw 0.9.5 → 0.9.6
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/README.rdoc +1 -1
- data/examples/web_oauth.rb +52 -0
- data/lib/flickraw.rb +1 -1
- data/lib/flickraw/api.rb +8 -8
- data/lib/flickraw/oauth.rb +12 -7
- data/test/test.rb +21 -7
- metadata +8 -7
data/README.rdoc
CHANGED
@@ -118,7 +118,7 @@ If you need to have several users authenticated at the same time in your applica
|
|
118
118
|
|
119
119
|
There are some helpers to build flickr urls :
|
120
120
|
|
121
|
-
=== url, url_m, url_s, url_t, url_b, url_z, url_o
|
121
|
+
=== url, url_m, url_s, url_t, url_b, url_z, url_q, url_n, url_c, url_o
|
122
122
|
|
123
123
|
info = flickr.photos.getInfo(:photo_id => "3839885270")
|
124
124
|
FlickRaw.url_b(info) # => "http://farm3.static.flickr.com/2485/3839885270_6fb8b54e06_b.jpg"
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'flickraw'
|
2
|
+
|
3
|
+
# A short howto for web flow authentication on the flickr website.
|
4
|
+
# This would live inside a rails controller or alternative framework equivalent
|
5
|
+
# Error handling left out for clarity :-)
|
6
|
+
# Added by Darren Greaves (https://github.com/boncey/)
|
7
|
+
#
|
8
|
+
# You need an API key first, see http://www.flickr.com/services/api/keys/
|
9
|
+
API_KEY=''
|
10
|
+
SHARED_SECRET=''
|
11
|
+
|
12
|
+
# This is the URL Flickr will redirect your users to once they agree to access
|
13
|
+
@callback_url='http://localhost:3000/auth_controller/callback'
|
14
|
+
|
15
|
+
FlickRaw.api_key=API_KEY
|
16
|
+
FlickRaw.shared_secret=SHARED_SECRET
|
17
|
+
|
18
|
+
# Users should hit this method to get the link which sends them to flickr
|
19
|
+
def auth
|
20
|
+
flickr = FlickRaw::Flickr.new
|
21
|
+
token = flickr.get_request_token(:oauth_callback => URI.escape(@callback_url))
|
22
|
+
# You'll need to store the token somewhere for when the user is returned to the callback method
|
23
|
+
# I stick mine in memcache with their session key as the cache key
|
24
|
+
|
25
|
+
@auth_url = flickr.get_authorize_url(token['oauth_token'], :perms => 'delete')
|
26
|
+
# Stick @auth_url in your template for users to click
|
27
|
+
end
|
28
|
+
|
29
|
+
# Your users browser will be redirected here from Flickr (see @callback_url above)
|
30
|
+
def callback
|
31
|
+
flickr = FlickRaw::Flickr.new
|
32
|
+
|
33
|
+
token = # Retrieve from cache or session etc - see above
|
34
|
+
oauth_token = params[:oauth_token]
|
35
|
+
oauth_verifier = params[:oauth_verifier]
|
36
|
+
|
37
|
+
raw_token = flickr.get_oauth_token(request_token['oauth_token'], request_token['oauth_token_secret'], oauth_verifier)
|
38
|
+
# raw_token is a hash like this {"user_nsid"=>"92023420%40N00", "oauth_token_secret"=>"XXXXXX", "username"=>"boncey", "fullname"=>"Darren%20Greaves", "oauth_token"=>"XXXXXX"}
|
39
|
+
# Use URI.unescape on the nsid and name parameters
|
40
|
+
|
41
|
+
oauth_token = raw_token["oauth_token"]
|
42
|
+
oauth_token_secret = raw_token["oauth_token_secret"]
|
43
|
+
|
44
|
+
# Store the oauth_token and oauth_token_secret in session or database
|
45
|
+
# and attach to a Flickraw instance before calling any methods requiring authentication
|
46
|
+
|
47
|
+
# Attach the tokens to your flickr instance - you can now make authenticated calls with the flickr object
|
48
|
+
flickr.access_token = oauth_token
|
49
|
+
flickr.access_secret =[oauth_token_secret
|
50
|
+
|
51
|
+
end
|
52
|
+
|
data/lib/flickraw.rb
CHANGED
data/lib/flickraw/api.rb
CHANGED
@@ -19,7 +19,7 @@ module FlickRaw
|
|
19
19
|
UPLOAD_PATH_SECURE=(END_POINT_SECURE + '/upload/').freeze
|
20
20
|
REPLACE_PATH_SECURE=(END_POINT_SECURE + '/replace/').freeze
|
21
21
|
|
22
|
-
PHOTO_SOURCE_URL='http://farm%s.
|
22
|
+
PHOTO_SOURCE_URL='http://farm%s.staticflickr.com/%s/%s_%s%s.%s'.freeze
|
23
23
|
URL_PROFILE='http://www.flickr.com/people/'.freeze
|
24
24
|
URL_PHOTOSTREAM='http://www.flickr.com/photos/'.freeze
|
25
25
|
URL_SHORT='http://flic.kr/p/'.freeze
|
@@ -102,13 +102,8 @@ module FlickRaw
|
|
102
102
|
|
103
103
|
private
|
104
104
|
def build_args(args={}, method = nil)
|
105
|
-
|
106
|
-
|
107
|
-
args.each {|k, v|
|
108
|
-
v = v.to_s.encode("utf-8").force_encoding("ascii-8bit") if RUBY_VERSION >= "1.9"
|
109
|
-
full_args[k.to_s] = v
|
110
|
-
}
|
111
|
-
full_args
|
105
|
+
args['method'] = method if method
|
106
|
+
args.merge('format' => 'json', 'nojsoncallback' => '1')
|
112
107
|
end
|
113
108
|
|
114
109
|
def process_response(req, response)
|
@@ -176,6 +171,9 @@ module FlickRaw
|
|
176
171
|
def url_t(r); PHOTO_SOURCE_URL % [r.farm, r.server, r.id, r.secret, "_t", "jpg"] end
|
177
172
|
def url_b(r); PHOTO_SOURCE_URL % [r.farm, r.server, r.id, r.secret, "_b", "jpg"] end
|
178
173
|
def url_z(r); PHOTO_SOURCE_URL % [r.farm, r.server, r.id, r.secret, "_z", "jpg"] end
|
174
|
+
def url_q(r); PHOTO_SOURCE_URL % [r.farm, r.server, r.id, r.secret, "_q", "jpg"] end
|
175
|
+
def url_n(r); PHOTO_SOURCE_URL % [r.farm, r.server, r.id, r.secret, "_n", "jpg"] end
|
176
|
+
def url_c(r); PHOTO_SOURCE_URL % [r.farm, r.server, r.id, r.secret, "_c", "jpg"] end
|
179
177
|
def url_o(r); PHOTO_SOURCE_URL % [r.farm, r.server, r.id, r.originalsecret, "_o", r.originalformat] end
|
180
178
|
def url_profile(r); URL_PROFILE + (r.owner.respond_to?(:nsid) ? r.owner.nsid : r.owner) + "/" end
|
181
179
|
def url_photopage(r); url_photostream(r) + r.id end
|
@@ -185,6 +183,8 @@ module FlickRaw
|
|
185
183
|
def url_short_m(r); URL_SHORT + "img/" + base58(r.id) + "_m.jpg" end
|
186
184
|
def url_short_s(r); URL_SHORT + "img/" + base58(r.id) + ".jpg" end
|
187
185
|
def url_short_t(r); URL_SHORT + "img/" + base58(r.id) + "_t.jpg" end
|
186
|
+
def url_short_q(r); URL_SHORT + "img/" + base58(r.id) + "_q.jpg" end
|
187
|
+
def url_short_n(r); URL_SHORT + "img/" + base58(r.id) + "_n.jpg" end
|
188
188
|
def url_photostream(r)
|
189
189
|
URL_PHOTOSTREAM +
|
190
190
|
if r.respond_to?(:pathalias) and r.pathalias
|
data/lib/flickraw/oauth.rb
CHANGED
@@ -12,9 +12,14 @@ module FlickRaw
|
|
12
12
|
end
|
13
13
|
|
14
14
|
class << self
|
15
|
+
def encode_value(v)
|
16
|
+
v = v.to_s.encode("utf-8").force_encoding("ascii-8bit") if RUBY_VERSION >= "1.9"
|
17
|
+
v.to_s
|
18
|
+
end
|
19
|
+
|
15
20
|
def escape(s)
|
16
|
-
s.
|
17
|
-
sprintf("%%%02X",
|
21
|
+
encode_value(s).gsub(/[^a-zA-Z0-9\-\.\_\~]/) {
|
22
|
+
$&.unpack("C*").map{|i| sprintf("%%%02X", i) }.join
|
18
23
|
}
|
19
24
|
end
|
20
25
|
|
@@ -83,7 +88,8 @@ module FlickRaw
|
|
83
88
|
end
|
84
89
|
|
85
90
|
def post_form(url, token_secret, oauth_params = {}, params = {})
|
86
|
-
|
91
|
+
encoded_params = Hash[*params.map {|k,v| [OAuthClient.encode_value(k), OAuthClient.encode_value(v)]}.flatten]
|
92
|
+
post(url, token_secret, oauth_params, params) {|request| request.form_data = encoded_params}
|
87
93
|
end
|
88
94
|
|
89
95
|
def post_multipart(url, token_secret, oauth_params = {}, params = {})
|
@@ -97,16 +103,15 @@ module FlickRaw
|
|
97
103
|
basename = File.basename(v.path).to_s if v.respond_to? :path
|
98
104
|
basename ||= File.basename(v.base_uri).to_s if v.respond_to? :base_uri
|
99
105
|
basename ||= "unknown"
|
100
|
-
basename = basename.encode("utf-8").force_encoding("ascii-8bit") if RUBY_VERSION >= "1.9"
|
101
106
|
request.body << "--#{boundary}\r\n" <<
|
102
|
-
"Content-Disposition: form-data; name=\"#{k}\"; filename=\"#{basename}\"\r\n" <<
|
107
|
+
"Content-Disposition: form-data; name=\"#{OAuthClient.encode_value(k)}\"; filename=\"#{OAuthClient.encode_value(basename)}\"\r\n" <<
|
103
108
|
"Content-Transfer-Encoding: binary\r\n" <<
|
104
109
|
"Content-Type: image/jpeg\r\n\r\n" <<
|
105
110
|
v.read << "\r\n"
|
106
111
|
else
|
107
112
|
request.body << "--#{boundary}\r\n" <<
|
108
|
-
"Content-Disposition: form-data; name=\"#{k}\"\r\n\r\n" <<
|
109
|
-
"#{v}\r\n"
|
113
|
+
"Content-Disposition: form-data; name=\"#{OAuthClient.encode_value(k)}\"\r\n\r\n" <<
|
114
|
+
"#{OAuthClient.encode_value(v)}\r\n"
|
110
115
|
end
|
111
116
|
}
|
112
117
|
|
data/test/test.rb
CHANGED
@@ -28,6 +28,7 @@ class Basic < Test::Unit::TestCase
|
|
28
28
|
flickr.auth.getFrob
|
29
29
|
flickr.auth.getFullToken
|
30
30
|
flickr.auth.getToken
|
31
|
+
flickr.auth.oauth.checkToken
|
31
32
|
flickr.auth.oauth.getAccessToken
|
32
33
|
flickr.blogs.getList
|
33
34
|
flickr.blogs.getServices
|
@@ -38,6 +39,7 @@ class Basic < Test::Unit::TestCase
|
|
38
39
|
flickr.contacts.getList
|
39
40
|
flickr.contacts.getListRecentlyUploaded
|
40
41
|
flickr.contacts.getPublicList
|
42
|
+
flickr.contacts.getTaggingSuggestions
|
41
43
|
flickr.favorites.add
|
42
44
|
flickr.favorites.getContext
|
43
45
|
flickr.favorites.getList
|
@@ -71,7 +73,9 @@ class Basic < Test::Unit::TestCase
|
|
71
73
|
flickr.panda.getPhotos
|
72
74
|
flickr.people.findByEmail
|
73
75
|
flickr.people.findByUsername
|
76
|
+
flickr.people.getGroups
|
74
77
|
flickr.people.getInfo
|
78
|
+
flickr.people.getLimits
|
75
79
|
flickr.people.getPhotos
|
76
80
|
flickr.people.getPhotosOf
|
77
81
|
flickr.people.getPublicGroups
|
@@ -127,6 +131,11 @@ class Basic < Test::Unit::TestCase
|
|
127
131
|
flickr.photos.setPerms
|
128
132
|
flickr.photos.setSafetyLevel
|
129
133
|
flickr.photos.setTags
|
134
|
+
flickr.photos.suggestions.approveSuggestion
|
135
|
+
flickr.photos.suggestions.getList
|
136
|
+
flickr.photos.suggestions.rejectSuggestion
|
137
|
+
flickr.photos.suggestions.removeSuggestion
|
138
|
+
flickr.photos.suggestions.suggestLocation
|
130
139
|
flickr.photos.transform.rotate
|
131
140
|
flickr.photos.upload.checkTickets
|
132
141
|
flickr.photosets.addPhoto
|
@@ -173,16 +182,16 @@ class Basic < Test::Unit::TestCase
|
|
173
182
|
flickr.push.unsubscribe
|
174
183
|
flickr.reflection.getMethodInfo
|
175
184
|
flickr.reflection.getMethods
|
185
|
+
flickr.stats.getCSVFiles
|
176
186
|
flickr.stats.getCollectionDomains
|
177
187
|
flickr.stats.getCollectionReferrers
|
178
188
|
flickr.stats.getCollectionStats
|
179
|
-
flickr.stats.getCSVFiles
|
180
189
|
flickr.stats.getPhotoDomains
|
181
190
|
flickr.stats.getPhotoReferrers
|
191
|
+
flickr.stats.getPhotoStats
|
182
192
|
flickr.stats.getPhotosetDomains
|
183
193
|
flickr.stats.getPhotosetReferrers
|
184
194
|
flickr.stats.getPhotosetStats
|
185
|
-
flickr.stats.getPhotoStats
|
186
195
|
flickr.stats.getPhotostreamDomains
|
187
196
|
flickr.stats.getPhotostreamReferrers
|
188
197
|
flickr.stats.getPhotostreamStats
|
@@ -195,6 +204,7 @@ class Basic < Test::Unit::TestCase
|
|
195
204
|
flickr.tags.getListUser
|
196
205
|
flickr.tags.getListUserPopular
|
197
206
|
flickr.tags.getListUserRaw
|
207
|
+
flickr.tags.getMostFrequentlyUsed
|
198
208
|
flickr.tags.getRelated
|
199
209
|
flickr.test.echo
|
200
210
|
flickr.test.login
|
@@ -407,11 +417,15 @@ class Basic < Test::Unit::TestCase
|
|
407
417
|
id = "3839885270"
|
408
418
|
info = flickr.photos.getInfo(:photo_id => id)
|
409
419
|
|
410
|
-
assert_equal "http://farm3.
|
411
|
-
assert_equal "http://farm3.
|
412
|
-
assert_equal "http://farm3.
|
413
|
-
assert_equal "http://farm3.
|
414
|
-
assert_equal "http://farm3.
|
420
|
+
assert_equal "http://farm3.staticflickr.com/2485/3839885270_6fb8b54e06.jpg", FlickRaw.url(info)
|
421
|
+
assert_equal "http://farm3.staticflickr.com/2485/3839885270_6fb8b54e06_m.jpg", FlickRaw.url_m(info)
|
422
|
+
assert_equal "http://farm3.staticflickr.com/2485/3839885270_6fb8b54e06_s.jpg", FlickRaw.url_s(info)
|
423
|
+
assert_equal "http://farm3.staticflickr.com/2485/3839885270_6fb8b54e06_t.jpg", FlickRaw.url_t(info)
|
424
|
+
assert_equal "http://farm3.staticflickr.com/2485/3839885270_6fb8b54e06_b.jpg", FlickRaw.url_b(info)
|
425
|
+
assert_equal "http://farm3.staticflickr.com/2485/3839885270_6fb8b54e06_z.jpg", FlickRaw.url_z(info)
|
426
|
+
assert_equal "http://farm3.staticflickr.com/2485/3839885270_6fb8b54e06_q.jpg", FlickRaw.url_q(info)
|
427
|
+
assert_equal "http://farm3.staticflickr.com/2485/3839885270_6fb8b54e06_n.jpg", FlickRaw.url_n(info)
|
428
|
+
assert_equal "http://farm3.staticflickr.com/2485/3839885270_6fb8b54e06_c.jpg", FlickRaw.url_c(info)
|
415
429
|
|
416
430
|
assert_equal "http://www.flickr.com/people/41650587@N02/", FlickRaw.url_profile(info)
|
417
431
|
assert_equal "http://www.flickr.com/photos/41650587@N02/", FlickRaw.url_photostream(info)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flickraw
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-05-01 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description:
|
15
15
|
email: maelclerambault@yahoo.fr
|
@@ -22,14 +22,15 @@ files:
|
|
22
22
|
- examples/search.rb
|
23
23
|
- examples/sinatra.rb
|
24
24
|
- examples/upload.rb
|
25
|
-
-
|
26
|
-
- test/test.rb
|
25
|
+
- examples/web_oauth.rb
|
27
26
|
- test/helper.rb
|
27
|
+
- test/test.rb
|
28
|
+
- test/test_upload.rb
|
28
29
|
- lib/flickraw.rb
|
30
|
+
- lib/flickraw/api.rb
|
29
31
|
- lib/flickraw/oauth.rb
|
30
|
-
- lib/flickraw/response.rb
|
31
32
|
- lib/flickraw/request.rb
|
32
|
-
- lib/flickraw/
|
33
|
+
- lib/flickraw/response.rb
|
33
34
|
- flickraw_rdoc.rb
|
34
35
|
- LICENSE
|
35
36
|
- README.rdoc
|
@@ -54,7 +55,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
54
55
|
version: '0'
|
55
56
|
requirements: []
|
56
57
|
rubyforge_project:
|
57
|
-
rubygems_version: 1.8.
|
58
|
+
rubygems_version: 1.8.23
|
58
59
|
signing_key:
|
59
60
|
specification_version: 3
|
60
61
|
summary: Flickr library with a syntax close to the syntax described on http://www.flickr.com/services/api
|