flickr.rb 1.1.0 → 1.1.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.
- checksums.yaml +7 -0
- data/Changelog.txt +7 -2
- data/Gemfile +4 -0
- data/Gemfile.lock +24 -0
- data/LICENSE +16 -17
- data/Manifest.txt +2 -2
- data/README.txt +3 -1
- data/Rakefile +3 -24
- data/flickr.gemspec +22 -17
- data/lib/flickr.rb +104 -104
- data/rdoc/Flickr.html +1003 -0
- data/rdoc/Flickr/Config.html +267 -0
- data/rdoc/Flickr/Group.html +343 -0
- data/rdoc/Flickr/Photo.html +1396 -0
- data/rdoc/Flickr/PhotoCollection.html +229 -0
- data/rdoc/Flickr/Photoset.html +359 -0
- data/rdoc/Flickr/User.html +745 -0
- data/rdoc/README_txt.html +199 -0
- data/rdoc/created.rid +3 -1
- data/rdoc/fonts.css +167 -0
- data/rdoc/fonts/Lato-Light.ttf +0 -0
- data/rdoc/fonts/Lato-LightItalic.ttf +0 -0
- data/rdoc/fonts/Lato-Regular.ttf +0 -0
- data/rdoc/fonts/Lato-RegularItalic.ttf +0 -0
- data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
- data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
- data/rdoc/images/add.png +0 -0
- data/rdoc/images/arrow_up.png +0 -0
- data/rdoc/images/brick.png +0 -0
- data/rdoc/images/brick_link.png +0 -0
- data/rdoc/images/bug.png +0 -0
- data/rdoc/images/bullet_black.png +0 -0
- data/rdoc/images/bullet_toggle_minus.png +0 -0
- data/rdoc/images/bullet_toggle_plus.png +0 -0
- data/rdoc/images/date.png +0 -0
- data/rdoc/images/delete.png +0 -0
- data/rdoc/images/find.png +0 -0
- data/rdoc/images/loadingAnimation.gif +0 -0
- data/rdoc/images/macFFBgHack.png +0 -0
- data/rdoc/images/package.png +0 -0
- data/rdoc/images/page_green.png +0 -0
- data/rdoc/images/page_white_text.png +0 -0
- data/rdoc/images/page_white_width.png +0 -0
- data/rdoc/images/plugin.png +0 -0
- data/rdoc/images/ruby.png +0 -0
- data/rdoc/images/tag_blue.png +0 -0
- data/rdoc/images/tag_green.png +0 -0
- data/rdoc/images/transparent.png +0 -0
- data/rdoc/images/wrench.png +0 -0
- data/rdoc/images/wrench_orange.png +0 -0
- data/rdoc/images/zoom.png +0 -0
- data/rdoc/index.html +101 -21
- data/rdoc/js/darkfish.js +140 -0
- data/rdoc/js/jquery.js +18 -0
- data/rdoc/js/navigation.js +142 -0
- data/rdoc/js/search.js +109 -0
- data/rdoc/js/search_index.js +1 -0
- data/rdoc/js/searcher.js +228 -0
- data/rdoc/rdoc.css +580 -0
- data/rdoc/table_of_contents.html +473 -0
- data/test/flickr_test.rb +229 -227
- metadata +132 -68
- data/rdoc/classes/Flickr.html +0 -807
- data/rdoc/classes/Flickr/Config.html +0 -240
- data/rdoc/classes/Flickr/Group.html +0 -251
- data/rdoc/classes/Flickr/Photo.html +0 -1101
- data/rdoc/classes/Flickr/PhotoCollection.html +0 -194
- data/rdoc/classes/Flickr/Photoset.html +0 -266
- data/rdoc/classes/Flickr/User.html +0 -738
- data/rdoc/files/README_txt.html +0 -209
- data/rdoc/files/lib/flickr_rb.html +0 -162
- data/rdoc/fr_class_index.html +0 -33
- data/rdoc/fr_file_index.html +0 -28
- data/rdoc/fr_method_index.html +0 -112
- data/rdoc/rdoc-style.css +0 -208
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fe1049d8dd0d71354cf7f221012392823c8896eb
|
4
|
+
data.tar.gz: c95508f5d5d08a400aa902ef1b174f0838431daf
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 70cabf927f292907dee0eb85efa4cf7a0e249e1d04950d89c48a82a0d864b14f2dd325eeaa83091582878814a366b7f6e74525412a449e43622abe0e32a10d13
|
7
|
+
data.tar.gz: 60b7e5c0a70268b8e9efb90d3af595e3cc2aed001f54ef8b53320b2058bca095fe2816b5c883d121fcd8fde2c505105b0d26bc21ba7fa025baffe0de0f98b434
|
data/Changelog.txt
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
1.1.1 2014-04-17
|
2
|
+
* Migrated to usage of Bundler for dependency tracking
|
3
|
+
* Fixes retrieving list of photos no matter which sibling they are in XML structure
|
4
|
+
* Made tests compatible with latest version of mocha
|
5
|
+
|
1
6
|
1.1.0 2010-05-16
|
2
7
|
* Major improvement - now gem is very easy to use as a rails plugin with external configuration for api connection. - /config/flickr.api.yml
|
3
8
|
|
@@ -18,7 +23,7 @@
|
|
18
23
|
* 1 major enhancement
|
19
24
|
* When a collection of photos is fetched (e.g. by Flickr#search), a PhotoCollection object is now returned, a type of array, which allows easy access to the pagination information returned by Flickr (e.g. total items, pages, etc). Previously this info was lost
|
20
25
|
* Minor enhancements:
|
21
|
-
* Refactored parsing of response when getting info about photo (public API is not changed).
|
26
|
+
* Refactored parsing of response when getting info about photo (public API is not changed).
|
22
27
|
* All returned info is now parsed and stored (previously only some attributes were)
|
23
28
|
* A record is kept of whether info has been previously fetched from Flickr (avoids unnecessary extra calls)
|
24
29
|
* Improved User#getInfo. No longer makes API call for pretty_url (which was in addition to main getInfo call) or photos_url
|
@@ -49,7 +54,7 @@
|
|
49
54
|
* Minor enhancements:
|
50
55
|
* Tweaked internals so new client instance isn't created each time new object (e.g. photo, user) is created
|
51
56
|
* Improved test coverage
|
52
|
-
|
57
|
+
|
53
58
|
== 1.0.4 2008-05-11
|
54
59
|
|
55
60
|
* 1 major enhancement:
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
flickr (1.1.0)
|
5
|
+
xml-simple (>= 1.0.7)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
metaclass (0.0.4)
|
11
|
+
mocha (1.0.0)
|
12
|
+
metaclass (~> 0.0.1)
|
13
|
+
rake (10.1.1)
|
14
|
+
rdoc (4.0.0)
|
15
|
+
xml-simple (1.1.3)
|
16
|
+
|
17
|
+
PLATFORMS
|
18
|
+
ruby
|
19
|
+
|
20
|
+
DEPENDENCIES
|
21
|
+
flickr!
|
22
|
+
mocha
|
23
|
+
rake
|
24
|
+
rdoc
|
data/LICENSE
CHANGED
@@ -1,20 +1,19 @@
|
|
1
|
-
Copyright (c) 2007 Scott Raymond, Patrick Plattes, Chris Taggart
|
1
|
+
Copyright (c) 2007 Scott Raymond, Patrick Plattes, Chris Taggart, Rafał Piekarski
|
2
2
|
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
the following conditions:
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
10
9
|
|
11
|
-
The above copyright notice and this permission notice shall be
|
12
|
-
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
11
|
+
copies or substantial portions of the Software.
|
13
12
|
|
14
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
OF
|
20
|
-
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
|
+
SOFTWARE.
|
data/Manifest.txt
CHANGED
data/README.txt
CHANGED
data/Rakefile
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rake/testtask'
|
3
|
-
require '
|
4
|
-
require
|
5
|
-
require 'rubygems'
|
3
|
+
require 'rdoc/task'
|
4
|
+
require "bundler/gem_tasks"
|
6
5
|
|
7
6
|
task :default => :test
|
8
|
-
|
7
|
+
|
9
8
|
desc 'Test the flickr plugin.'
|
10
9
|
Rake::TestTask.new(:test) do |t|
|
11
10
|
t.libs << 'lib'
|
@@ -23,26 +22,6 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
23
22
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
24
23
|
end
|
25
24
|
|
26
|
-
spec = Gem::Specification.new do |s|
|
27
|
-
s.add_dependency('xml-simple', '>= 1.0.7')
|
28
|
-
s.name = 'flickr.rb'
|
29
|
-
s.version = "1.1.0"
|
30
|
-
s.platform = Gem::Platform::RUBY
|
31
|
-
s.summary = "An insanely easy interface to the Flickr photo-sharing service. Also available as a Rails plugin! By Scott Raymond. Maintainer: Patrick Plattes, Rafal Piekarski"
|
32
|
-
s.requirements << 'Flickr developers API key'
|
33
|
-
s.files = Dir.glob("**/*").delete_if { |item| item.include?(".git") || item[/^pkg/] }
|
34
|
-
s.require_path = 'lib'
|
35
|
-
s.author = "Scott Raymond, Patrick Plattes, Rafal Piekarski"
|
36
|
-
s.email = "ravbaker@gmail.com"
|
37
|
-
s.rubyforge_project = "flickr"
|
38
|
-
s.homepage = "http://github.com/RaVbaker/flickr/"
|
39
|
-
end
|
40
|
-
|
41
|
-
Rake::GemPackageTask.new(spec) do |pkg|
|
42
|
-
pkg.need_zip = true
|
43
|
-
pkg.need_tar = true
|
44
|
-
end
|
45
|
-
|
46
25
|
task "Dump Gemspec file"
|
47
26
|
task :debug do
|
48
27
|
puts spec.to_ruby
|
data/flickr.gemspec
CHANGED
@@ -1,30 +1,35 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
|
-
s.name
|
3
|
-
s.version
|
2
|
+
s.name = 'flickr.rb'
|
3
|
+
s.version = '1.1.1'
|
4
|
+
s.authors = ['Scott Raymond, Patrick Plattes, Rafal Piekarski']
|
5
|
+
s.autorequire = 'flickr.rb'
|
6
|
+
s.date = '2010-05-15'
|
7
|
+
s.email = 'ravbaker@gmail.com'
|
8
|
+
s.files = Dir.glob("**/*").delete_if { |item| item.include?(".git") || item[/^pkg/] }
|
9
|
+
s.homepage = 'http://github.com/RaVbaker/flickr/'
|
10
|
+
s.require_paths = ['lib']
|
11
|
+
s.requirements = ['Flickr developers API key']
|
12
|
+
s.summary = 'An insanely easy interface to the Flickr photo-sharing service. Also available as a Rails plugin! By Scott Raymond. Maintainer: Rafal Piekarski'
|
13
|
+
s.description = 'Gem for using Flickr API in Ruby - https://www.flickr.com/services/api/'
|
14
|
+
s.licenses = ['MIT']
|
4
15
|
|
5
|
-
s.
|
6
|
-
s.
|
7
|
-
s.autorequire = %q{flickr}
|
8
|
-
s.date = %q{2010-05-15}
|
9
|
-
s.email = %q{ravbaker@gmail.com}
|
10
|
-
s.files = ["History.txt", "LICENSE", "README.txt", "TODO", "lib/flickr.rb", "test/flickr_test.rb", "init.rb"]
|
11
|
-
s.homepage = %q{http://github.com/RaVbaker/flickr/}
|
12
|
-
s.require_paths = ["lib"]
|
13
|
-
s.requirements = ["Flickr developers API key"]
|
14
|
-
s.rubyforge_project = %q{flickr}
|
15
|
-
s.rubygems_version = %q{1.2.0}
|
16
|
-
s.summary = %q{An insanely easy interface to the Flickr photo-sharing service. Also available as a rails plugin! By Scott Raymond. Maintainer: Rafal Piekarski}
|
16
|
+
s.rubygems_version = '1.2.0'
|
17
|
+
s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
|
17
18
|
|
18
19
|
if s.respond_to? :specification_version then
|
19
20
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
20
21
|
s.specification_version = 2
|
21
22
|
|
22
23
|
if current_version >= 3 then
|
23
|
-
s.add_runtime_dependency(%q<xml-simple>, [
|
24
|
+
s.add_runtime_dependency(%q<xml-simple>, ['>= 1.0.7'])
|
24
25
|
else
|
25
|
-
s.add_dependency(%q<xml-simple>, [
|
26
|
+
s.add_dependency(%q<xml-simple>, ['>= 1.0.7'])
|
26
27
|
end
|
27
28
|
else
|
28
|
-
s.add_dependency(%q<xml-simple>, [
|
29
|
+
s.add_dependency(%q<xml-simple>, ['>= 1.0.7'])
|
29
30
|
end
|
31
|
+
|
32
|
+
s.add_development_dependency 'rake'
|
33
|
+
s.add_development_dependency 'rdoc'
|
34
|
+
s.add_development_dependency 'mocha'
|
30
35
|
end
|
data/lib/flickr.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# = Flickr
|
2
2
|
# An insanely easy interface to the Flickr photo-sharing service. By Scott Raymond.
|
3
|
-
#
|
3
|
+
#
|
4
4
|
# Author:: Scott Raymond <sco@redgreenblu.com>
|
5
5
|
# Copyright:: Copyright (c) 2005 Scott Raymond <sco@redgreenblu.com>. Additional content by Patrick Plattes and Chris Taggart (http://pushrod.wordpress.com)
|
6
6
|
# License:: MIT <http://www.opensource.org/licenses/mit-license.php>
|
@@ -42,21 +42,21 @@ require 'digest/md5'
|
|
42
42
|
class Flickr
|
43
43
|
attr_reader :api_key, :auth_token
|
44
44
|
attr_accessor :user
|
45
|
-
|
45
|
+
|
46
46
|
HOST_URL = 'http://api.flickr.com'
|
47
47
|
API_PATH = '/services/rest'
|
48
48
|
|
49
|
-
# Flickr, annoyingly, uses a number of representations to specify the size
|
49
|
+
# Flickr, annoyingly, uses a number of representations to specify the size
|
50
50
|
# of a photo, depending on the context. It gives a label such a "Small" or
|
51
|
-
# "Medium" to a size of photo, when returning all possible sizes. However,
|
51
|
+
# "Medium" to a size of photo, when returning all possible sizes. However,
|
52
52
|
# when generating the uri for the page that features that size of photo, or
|
53
|
-
# the source url for the image itself it uses a single letter. Bizarrely,
|
53
|
+
# the source url for the image itself it uses a single letter. Bizarrely,
|
54
54
|
# these letters are different depending on whether you want the Flickr page
|
55
55
|
# for the photo or the source uri -- e.g. a "Small" photo (240 pixels on its
|
56
|
-
# longest side) may be viewed at
|
56
|
+
# longest side) may be viewed at
|
57
57
|
# "http://www.flickr.com/photos/sco/2397458775/sizes/s/"
|
58
|
-
# but its source is at
|
59
|
-
# "http://farm4.static.flickr.com/3118/2397458775_2ec2ddc324_m.jpg".
|
58
|
+
# but its source is at
|
59
|
+
# "http://farm4.static.flickr.com/3118/2397458775_2ec2ddc324_m.jpg".
|
60
60
|
# The VALID_SIZES hash associates the correct letter with a label
|
61
61
|
VALID_SIZES = { "Square" => ["s", "sq"],
|
62
62
|
"Thumbnail" => ["t", "t"],
|
@@ -65,15 +65,15 @@ class Flickr
|
|
65
65
|
"Large" => ["b", "l"]
|
66
66
|
}
|
67
67
|
|
68
|
-
# To use the Flickr API you need an api key
|
69
|
-
# (see http://www.flickr.com/services/api/misc.api_keys.html), and the flickr
|
68
|
+
# To use the Flickr API you need an api key
|
69
|
+
# (see http://www.flickr.com/services/api/misc.api_keys.html), and the flickr
|
70
70
|
# client object shuld be initialized with this. You'll also need a shared
|
71
71
|
# secret code if you want to use authentication (e.g. to get a user's
|
72
72
|
# private photos)
|
73
73
|
# There are two ways to initialize the Flickr client. The preferred way is with
|
74
|
-
# a hash of params, e.g. 'api_key' => 'your_api_key', 'shared_secret' =>
|
75
|
-
# 'shared_secret_code'. Other way is to use in Rails an config file
|
76
|
-
# RAILS_ROOT/config/flickr.api.yml and there use params as key/values even
|
74
|
+
# a hash of params, e.g. 'api_key' => 'your_api_key', 'shared_secret' =>
|
75
|
+
# 'shared_secret_code'. Other way is to use in Rails an config file
|
76
|
+
# RAILS_ROOT/config/flickr.api.yml and there use params as key/values even
|
77
77
|
# specified for every environment.
|
78
78
|
def initialize(api_key_or_params={})
|
79
79
|
@host = HOST_URL
|
@@ -82,8 +82,8 @@ class Flickr
|
|
82
82
|
api_key_or_params = {:api_key => api_key_or_params} if api_key_or_params.is_a?(String)
|
83
83
|
api_key_or_params = Config.get if Config.parsed? and api_key_or_params.empty?
|
84
84
|
set_up_configuration api_key_or_params if api_key_or_params.is_a? Hash
|
85
|
-
end
|
86
|
-
|
85
|
+
end
|
86
|
+
|
87
87
|
def set_up_configuration api_key_or_params = {}
|
88
88
|
@api_key = api_key_or_params[:api_key]
|
89
89
|
@shared_secret = api_key_or_params[:shared_secret]
|
@@ -96,13 +96,13 @@ class Flickr
|
|
96
96
|
def get_token_from(frob)
|
97
97
|
auth_response = request("auth.getToken", :frob => frob)['auth']
|
98
98
|
@auth_token = auth_response['token']
|
99
|
-
@user = User.new( 'id' => auth_response['user']['nsid'],
|
99
|
+
@user = User.new( 'id' => auth_response['user']['nsid'],
|
100
100
|
'username' => auth_response['user']['username'],
|
101
101
|
'name' => auth_response['user']['fullname'],
|
102
102
|
'client' => self)
|
103
103
|
@auth_token
|
104
|
-
end
|
105
|
-
|
104
|
+
end
|
105
|
+
|
106
106
|
# Implements flickr.urls.lookupGroup and flickr.urls.lookupUser
|
107
107
|
def find_by_url(url)
|
108
108
|
response = urls_lookupUser('url'=>url) rescue urls_lookupGroup('url'=>url) rescue nil
|
@@ -119,18 +119,18 @@ class Flickr
|
|
119
119
|
def recent
|
120
120
|
photos_request('photos.getRecent')
|
121
121
|
end
|
122
|
-
|
122
|
+
|
123
123
|
def photos_search(params={})
|
124
124
|
photos_request('photos.search', params)
|
125
125
|
end
|
126
126
|
alias_method :search, :photos_search
|
127
|
-
|
127
|
+
|
128
128
|
# Gets public photos with a given tag
|
129
129
|
def tag(tag)
|
130
130
|
photos('tags'=>tag)
|
131
131
|
end
|
132
|
-
|
133
|
-
# Implements flickr.people.findByEmail and flickr.people.findByUsername.
|
132
|
+
|
133
|
+
# Implements flickr.people.findByEmail and flickr.people.findByUsername.
|
134
134
|
def users(lookup=nil)
|
135
135
|
user = people_findByEmail('find_email'=>lookup)['user'] rescue people_findByUsername('username'=>lookup)['user']
|
136
136
|
return User.new("id" => user["nsid"], "username" => user["username"], "client" => self)
|
@@ -140,35 +140,35 @@ class Flickr
|
|
140
140
|
def groups(group_name, options={})
|
141
141
|
collection = groups_search({"text" => group_name}.merge(options))['groups']['group']
|
142
142
|
collection = [collection] if collection.is_a? Hash
|
143
|
-
|
144
|
-
collection.collect { |group| Group.new( "id" => group['nsid'],
|
145
|
-
"name" => group['name'],
|
143
|
+
|
144
|
+
collection.collect { |group| Group.new( "id" => group['nsid'],
|
145
|
+
"name" => group['name'],
|
146
146
|
"eighteenplus" => group['eighteenplus'],
|
147
147
|
"client" => self) }
|
148
148
|
end
|
149
|
-
|
149
|
+
|
150
150
|
def photoset(photoset_id)
|
151
151
|
Photoset.new(photoset_id, @api_key)
|
152
152
|
end
|
153
|
-
|
153
|
+
|
154
154
|
# Implements flickr.tags.getRelated
|
155
155
|
def related_tags(tag)
|
156
156
|
tags_getRelated('tag'=>tag)['tags']['tag']
|
157
157
|
end
|
158
|
-
|
158
|
+
|
159
159
|
# Implements flickr.photos.licenses.getInfo
|
160
160
|
def licenses
|
161
161
|
photos_licenses_getInfo['licenses']['license']
|
162
162
|
end
|
163
|
-
|
163
|
+
|
164
164
|
# Returns url for user to login in to Flickr to authenticate app for a user
|
165
165
|
def login_url(perms)
|
166
166
|
"http://flickr.com/services/auth/?api_key=#{@api_key}&perms=#{perms}&api_sig=#{signature_from('api_key'=>@api_key, 'perms' => perms)}"
|
167
167
|
end
|
168
|
-
|
168
|
+
|
169
169
|
# Implements everything else.
|
170
170
|
# Any method not defined explicitly will be passed on to the Flickr API,
|
171
|
-
# and return an XmlSimple document. For example, Flickr#test_echo is not
|
171
|
+
# and return an XmlSimple document. For example, Flickr#test_echo is not
|
172
172
|
# defined, so it will pass the call to the flickr.test.echo method.
|
173
173
|
def method_missing(method_id, params={})
|
174
174
|
request(method_id.id2name.gsub(/_/, '.'), params)
|
@@ -188,82 +188,82 @@ class Flickr
|
|
188
188
|
end
|
189
189
|
|
190
190
|
# acts like request but returns a PhotoCollection (a list of Photo objects)
|
191
|
-
def photos_request(method, params={})
|
191
|
+
def photos_request(method, params={}, list_node="photos")
|
192
192
|
photos = request(method, params)
|
193
|
-
PhotoCollection.new(photos, @api_key)
|
193
|
+
PhotoCollection.new(photos, @api_key, list_node)
|
194
194
|
end
|
195
|
-
|
196
|
-
# Builds url for Flickr API REST request from given the flickr method name
|
195
|
+
|
196
|
+
# Builds url for Flickr API REST request from given the flickr method name
|
197
197
|
# (exclusing the 'flickr.' that begins each method call) and params (where
|
198
198
|
# applicable) which should be supplied as a Hash (e.g 'user_id' => "foo123")
|
199
199
|
def request_url(method, params={})
|
200
200
|
method = 'flickr.' + method
|
201
201
|
url = "#{@host}#{@api}/?api_key=#{@api_key}&method=#{method}"
|
202
202
|
params.merge!('api_key' => @api_key, 'method' => method, 'auth_token' => @auth_token)
|
203
|
-
signature = signature_from(params)
|
204
|
-
|
203
|
+
signature = signature_from(params)
|
204
|
+
|
205
205
|
url = "#{@host}#{@api}/?" + params.merge('api_sig' => signature).collect { |k,v| "#{k}=" + CGI::escape(v.to_s) unless v.nil? }.compact.join("&")
|
206
206
|
end
|
207
|
-
|
207
|
+
|
208
208
|
def signature_from(params={})
|
209
209
|
return unless @shared_secret # don't both getting signature if no shared_secret
|
210
210
|
request_str = params.reject {|k,v| v.nil?}.collect {|p| "#{p[0].to_s}#{p[1]}"}.sort.join # build key value pairs, sort in alpha order then join them, ignoring those with nil value
|
211
211
|
return Digest::MD5.hexdigest("#{@shared_secret}#{request_str}")
|
212
212
|
end
|
213
|
-
|
213
|
+
|
214
214
|
# A collection of photos is returned as a PhotoCollection, a subclass of Array.
|
215
215
|
# This allows us to retain the pagination info returned by Flickr and make it
|
216
216
|
# accessible in a friendly way
|
217
217
|
class PhotoCollection < Array
|
218
218
|
attr_reader :page, :pages, :perpage, :total
|
219
|
-
|
220
|
-
# builds a PhotoCollection from given params, such as those returned from
|
221
|
-
# photos.search API call. Note all the info is contained in the value of
|
222
|
-
# the first (and only) key-value pair of the response. The key will vary
|
219
|
+
|
220
|
+
# builds a PhotoCollection from given params, such as those returned from
|
221
|
+
# photos.search API call. Note all the info is contained in the value of
|
222
|
+
# the first (and only) key-value pair of the response. The key will vary
|
223
223
|
# depending on the original object the photos are related to (e.g 'photos',
|
224
224
|
# 'photoset', etc)
|
225
|
-
def initialize(photos_api_response={}, api_key={})
|
226
|
-
photos = photos_api_response
|
227
|
-
[ "page", "pages", "perpage", "total" ].each { |i| instance_variable_set("@#{i}", photos[i])}
|
225
|
+
def initialize(photos_api_response={}, api_key={}, list_node="photos")
|
226
|
+
photos = photos_api_response[list_node]
|
227
|
+
[ "page", "pages", "perpage", "total" ].each { |i| instance_variable_set("@#{i}", photos[i])}
|
228
228
|
collection = photos['photo'] || []
|
229
229
|
collection = [collection] if collection.is_a? Hash
|
230
230
|
collection.each { |photo| self << Photo.new(photo.delete('id'), api_key, photo) }
|
231
231
|
end
|
232
|
-
end
|
233
|
-
|
232
|
+
end
|
233
|
+
|
234
234
|
# This class supports external configuration
|
235
|
-
class Config
|
236
|
-
|
235
|
+
class Config
|
236
|
+
|
237
237
|
# Contains whole configuration for flickr API
|
238
|
-
@@configuration = {}
|
239
|
-
|
238
|
+
@@configuration = {}
|
239
|
+
|
240
240
|
# Is true if configuration has been parsed
|
241
241
|
@@parsed = false
|
242
|
-
|
242
|
+
|
243
243
|
# parses file and prepare @@configuration for access from outside to fetch configuration hash
|
244
244
|
def self.load_from_file file
|
245
245
|
return false unless File.exist?(file)
|
246
246
|
@@configuration = YAML.load(ERB.new(File.read(file)).result)
|
247
247
|
@@parsed = true
|
248
248
|
parse_in_rails_env!
|
249
|
-
end
|
250
|
-
|
249
|
+
end
|
250
|
+
|
251
251
|
# Excludes specific configuration for choosed environment in Rails
|
252
252
|
def self.parse_in_rails_env!
|
253
|
-
@@configuration = @@configuration[RAILS_ENV].symbolize_keys if defined? RAILS_ENV
|
254
|
-
end
|
255
|
-
|
253
|
+
@@configuration = @@configuration[RAILS_ENV].symbolize_keys if defined? RAILS_ENV and @@configuration.has_key? RAILS_ENV
|
254
|
+
end
|
255
|
+
|
256
256
|
# Returns configuration Hash
|
257
257
|
def self.get
|
258
258
|
@@configuration
|
259
259
|
end
|
260
|
-
|
260
|
+
|
261
261
|
# Returns true if configuration has been parsed
|
262
262
|
def self.parsed?
|
263
263
|
@@parsed
|
264
264
|
end
|
265
265
|
end
|
266
|
-
|
266
|
+
|
267
267
|
# Todo:
|
268
268
|
# logged_in?
|
269
269
|
# if logged in:
|
@@ -279,20 +279,20 @@ class Flickr
|
|
279
279
|
# flickr.test.login
|
280
280
|
# uploading
|
281
281
|
class User
|
282
|
-
|
282
|
+
|
283
283
|
attr_reader :client, :id, :name, :location, :photos_url, :url, :count, :firstdate, :firstdatetaken
|
284
284
|
|
285
|
-
# A Flickr::User can be instantiated in two ways. The old (deprecated)
|
286
|
-
# method is with an ordered series of values. The new method is with a
|
287
|
-
# params Hash, which is easier when a variable number of params are
|
285
|
+
# A Flickr::User can be instantiated in two ways. The old (deprecated)
|
286
|
+
# method is with an ordered series of values. The new method is with a
|
287
|
+
# params Hash, which is easier when a variable number of params are
|
288
288
|
# supplied, which is the case here, and also avoids having to constantly
|
289
289
|
# supply nil values for the email and password, which are now irrelevant
|
290
|
-
# as authentication is no longer done this way.
|
291
|
-
# An associated flickr client will also be generated if an api key is
|
290
|
+
# as authentication is no longer done this way.
|
291
|
+
# An associated flickr client will also be generated if an api key is
|
292
292
|
# passed among the arguments or in the params hash. Alternatively, and
|
293
|
-
# most likely, an existing client object may be passed in the params hash
|
293
|
+
# most likely, an existing client object may be passed in the params hash
|
294
294
|
# (e.g. 'client' => some_existing_flickr_client_object), and this is
|
295
|
-
# what happends when users are initlialized as the result of a method
|
295
|
+
# what happends when users are initlialized as the result of a method
|
296
296
|
# called on the flickr client (e.g. flickr.users)
|
297
297
|
def initialize(id_or_params_hash=nil, username=nil, email=nil, password=nil, api_key={})
|
298
298
|
if id_or_params_hash.is_a?(Hash)
|
@@ -325,35 +325,35 @@ class Flickr
|
|
325
325
|
def firstdatetaken
|
326
326
|
@firstdatetaken.nil? ? getInfo.firstdatetaken : @firstdatetaken
|
327
327
|
end
|
328
|
-
|
329
|
-
# Builds url for user's photos page as per
|
328
|
+
|
329
|
+
# Builds url for user's photos page as per
|
330
330
|
# http://www.flickr.com/services/api/misc.urls.html
|
331
331
|
def photos_url
|
332
332
|
"http://www.flickr.com/photos/#{id}/"
|
333
333
|
end
|
334
|
-
|
335
|
-
# Builds url for user's profile page as per
|
334
|
+
|
335
|
+
# Builds url for user's profile page as per
|
336
336
|
# http://www.flickr.com/services/api/misc.urls.html
|
337
337
|
def url
|
338
338
|
"http://www.flickr.com/people/#{id}/"
|
339
339
|
end
|
340
|
-
|
340
|
+
|
341
341
|
def pretty_url
|
342
342
|
@pretty_url ||= @client.urls_getUserProfile('user_id'=>@id)['user']['url']
|
343
343
|
end
|
344
|
-
|
344
|
+
|
345
345
|
# Implements flickr.people.getPublicGroups
|
346
346
|
def groups
|
347
347
|
collection = @client.people_getPublicGroups('user_id'=>@id)['groups']['group']
|
348
348
|
collection = [collection] if collection.is_a? Hash
|
349
|
-
collection.collect { |group| Group.new( "id" => group['nsid'],
|
349
|
+
collection.collect { |group| Group.new( "id" => group['nsid'],
|
350
350
|
"name" => group['name'],
|
351
351
|
"eighteenplus" => group['eighteenplus'],
|
352
352
|
"client" => @client) }
|
353
353
|
end
|
354
|
-
|
354
|
+
|
355
355
|
# Implements flickr.people.getPublicPhotos. Options hash allows you to add
|
356
|
-
# extra restrictions as per flickr.people.getPublicPhotos docs, e.g.
|
356
|
+
# extra restrictions as per flickr.people.getPublicPhotos docs, e.g.
|
357
357
|
# user.photos('per_page' => '25', 'extras' => 'date_taken')
|
358
358
|
def photos(options={})
|
359
359
|
@client.photos_request('people.getPublicPhotos', {'user_id' => @id}.merge(options))
|
@@ -370,12 +370,12 @@ class Flickr
|
|
370
370
|
@client.contacts_getPublicList('user_id'=>@id)['contacts']['contact'].collect { |contact| User.new(contact['nsid'], contact['username'], nil, nil, @api_key) }
|
371
371
|
#or
|
372
372
|
end
|
373
|
-
|
373
|
+
|
374
374
|
# Implements flickr.favorites.getPublicList
|
375
375
|
def favorites
|
376
376
|
@client.photos_request('favorites.getPublicList', 'user_id' => @id)
|
377
377
|
end
|
378
|
-
|
378
|
+
|
379
379
|
# Implements flickr.photosets.getList
|
380
380
|
def photosets
|
381
381
|
@client.photosets_getList('user_id'=>@id)['photosets']['photoset'].collect { |photoset| Photoset.new(photoset['id'], @api_key) }
|
@@ -395,7 +395,7 @@ class Flickr
|
|
395
395
|
def contactsPhotos
|
396
396
|
@client.photos_request('photos.getContactsPublicPhotos', 'user_id' => @id)
|
397
397
|
end
|
398
|
-
|
398
|
+
|
399
399
|
def to_s
|
400
400
|
@name
|
401
401
|
end
|
@@ -426,22 +426,22 @@ class Flickr
|
|
426
426
|
extra_params.each { |k,v| self.instance_variable_set("@#{k}", v) } # convert extra_params into instance variables
|
427
427
|
@client = Flickr.new @api_key
|
428
428
|
end
|
429
|
-
|
430
|
-
# Allows access to all photos instance variables through hash like
|
431
|
-
# interface, e.g. photo["datetaken"] returns @datetaken instance
|
429
|
+
|
430
|
+
# Allows access to all photos instance variables through hash like
|
431
|
+
# interface, e.g. photo["datetaken"] returns @datetaken instance
|
432
432
|
# variable. Useful for accessing any weird and wonderful parameter
|
433
433
|
# that may have been returned by Flickr when finding the photo,
|
434
|
-
# e.g. those returned by the extras argument in
|
434
|
+
# e.g. those returned by the extras argument in
|
435
435
|
# flickr.people.getPublicPhotos
|
436
436
|
def [](param_name)
|
437
437
|
instance_variable_get("@#{param_name}")
|
438
438
|
end
|
439
|
-
|
439
|
+
|
440
440
|
def title
|
441
441
|
@title.nil? ? getInfo("title") : @title
|
442
442
|
end
|
443
|
-
|
444
|
-
# Returns the owner of the photo as a Flickr::User. If we have no info
|
443
|
+
|
444
|
+
# Returns the owner of the photo as a Flickr::User. If we have no info
|
445
445
|
# about the owner, we make an API call to get it. If we already have
|
446
446
|
# the owner's id, create a user based on that. Either way, we cache the
|
447
447
|
# result so we don't need to check again
|
@@ -563,7 +563,7 @@ class Flickr
|
|
563
563
|
# Implements flickr.photos.notes.add
|
564
564
|
def add_note(note)
|
565
565
|
end
|
566
|
-
|
566
|
+
|
567
567
|
# Implements flickr.photos.setDates
|
568
568
|
def dates=(dates)
|
569
569
|
end
|
@@ -571,11 +571,11 @@ class Flickr
|
|
571
571
|
# Implements flickr.photos.setPerms
|
572
572
|
def perms=(perms)
|
573
573
|
end
|
574
|
-
|
574
|
+
|
575
575
|
# Implements flickr.photos.setTags
|
576
576
|
def tags=(tags)
|
577
577
|
end
|
578
|
-
|
578
|
+
|
579
579
|
# Implements flickr.photos.setMeta
|
580
580
|
def title=(title)
|
581
581
|
end
|
@@ -585,7 +585,7 @@ class Flickr
|
|
585
585
|
# Implements flickr.photos.addTags
|
586
586
|
def add_tag(tag)
|
587
587
|
end
|
588
|
-
|
588
|
+
|
589
589
|
# Implements flickr.photos.removeTag
|
590
590
|
def remove_tag(tag)
|
591
591
|
end
|
@@ -606,12 +606,12 @@ class Flickr
|
|
606
606
|
# Implements flickr.photos.notes.edit
|
607
607
|
def editNote(note_id)
|
608
608
|
end
|
609
|
-
|
609
|
+
|
610
610
|
# Converts the Photo to a string by returning its title
|
611
611
|
def to_s
|
612
612
|
title
|
613
613
|
end
|
614
|
-
|
614
|
+
|
615
615
|
private
|
616
616
|
|
617
617
|
# Implements flickr.photos.getInfo
|
@@ -626,10 +626,10 @@ class Flickr
|
|
626
626
|
@url = info['urls']['url']['content'] # assumes only one url
|
627
627
|
instance_variable_get("@#{attrib}")
|
628
628
|
end
|
629
|
-
|
630
|
-
# Builds source uri of image from params (often returned from other
|
631
|
-
# methods, e.g. User#photos). As specified at:
|
632
|
-
# http://www.flickr.com/services/api/misc.urls.html. If size is given
|
629
|
+
|
630
|
+
# Builds source uri of image from params (often returned from other
|
631
|
+
# methods, e.g. User#photos). As specified at:
|
632
|
+
# http://www.flickr.com/services/api/misc.urls.html. If size is given
|
633
633
|
# should be one the keys in the VALID_SIZES hash, i.e.
|
634
634
|
# "Square", "Thumbnail", "Medium", "Large", "Original", "Small" (These
|
635
635
|
# are the values returned by flickr.photos.getSizes).
|
@@ -646,8 +646,8 @@ class Flickr
|
|
646
646
|
"http://farm#{@farm}.static.flickr.com/#{@server}/#{@id}_#{@secret}_#{s_size}.jpg"
|
647
647
|
end
|
648
648
|
end
|
649
|
-
|
650
|
-
# Builds uri of Flickr page for photo. By default returns the main
|
649
|
+
|
650
|
+
# Builds uri of Flickr page for photo. By default returns the main
|
651
651
|
# page for the photo, but if passed a size will return the simplified
|
652
652
|
# flickr page featuring the given size of the photo
|
653
653
|
# TODO: Handle "Original" size
|
@@ -668,13 +668,13 @@ class Flickr
|
|
668
668
|
# flickr.groups.pools.remove
|
669
669
|
class Group
|
670
670
|
attr_reader :id, :client, :description, :name, :eighteenplus, :members, :online, :privacy, :url#, :chatid, :chatcount
|
671
|
-
|
671
|
+
|
672
672
|
def initialize(id_or_params_hash=nil, api_key={})
|
673
673
|
if id_or_params_hash.is_a?(Hash)
|
674
674
|
id_or_params_hash.each { |k,v| self.instance_variable_set("@#{k}", v) } # convert extra_params into instance variables
|
675
675
|
else
|
676
676
|
@id = id_or_params_hash
|
677
|
-
@api_key = api_key
|
677
|
+
@api_key = api_key
|
678
678
|
@client = Flickr.new @api_key
|
679
679
|
end
|
680
680
|
end
|
@@ -724,11 +724,11 @@ class Flickr
|
|
724
724
|
@url = "http://www.flickr.com/photos/#{@owner.getInfo.username}/sets/#{@id}/"
|
725
725
|
self
|
726
726
|
end
|
727
|
-
|
727
|
+
|
728
728
|
def getPhotos
|
729
|
-
photosetPhotos = @client.photos_request('photosets.getPhotos', {'photoset_id' => @id})
|
729
|
+
photosetPhotos = @client.photos_request('photosets.getPhotos', {'photoset_id' => @id}, "photoset")
|
730
730
|
end
|
731
731
|
|
732
732
|
end
|
733
|
-
|
733
|
+
|
734
734
|
end
|