fotonauts-flickr_fu 0.3.8 → 0.3.9
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.md +1 -1
- data/VERSION.yml +2 -1
- data/flickr_fu.gemspec +2 -1
- data/lib/flickr/base.rb +7 -6
- data/lib/flickr/errors.rb +1 -1
- data/lib/flickr/person.rb +1 -23
- data/lib/flickr/photo.rb +76 -20
- data/lib/flickr/photos.rb +31 -29
- data/lib/flickr/photosets.rb +2 -2
- data/lib/flickr/urls.rb +2 -2
- data/lib/flickr_fu.rb +0 -95
- data/spec/flickr/photo_spec.rb +1 -1
- metadata +17 -1
data/README.md
CHANGED
data/VERSION.yml
CHANGED
data/flickr_fu.gemspec
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = %q{fotonauts-flickr_fu}
|
|
5
|
-
s.version = "0.3.
|
|
5
|
+
s.version = "0.3.9"
|
|
6
6
|
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
8
8
|
s.authors = ["Ben Wyrosdick", "Maciej Bilas", "Fotonauts"]
|
|
@@ -105,6 +105,7 @@ Gem::Specification.new do |s|
|
|
|
105
105
|
|
|
106
106
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
|
107
107
|
s.add_runtime_dependency(%q<mime-types>, ["> 0.0.0"])
|
|
108
|
+
s.add_runtime_dependency(%q<nokogiri>, ["> 1.5.5"])
|
|
108
109
|
else
|
|
109
110
|
s.add_dependency(%q<mime-types>, ["> 0.0.0"])
|
|
110
111
|
end
|
data/lib/flickr/base.rb
CHANGED
|
@@ -81,19 +81,20 @@ module Flickr
|
|
|
81
81
|
# * endpoint (Optional)
|
|
82
82
|
# url of the api endpoint
|
|
83
83
|
#
|
|
84
|
+
require 'nokogiri'
|
|
84
85
|
def send_request(method, options = {}, http_method = :get, endpoint = REST_ENDPOINT)
|
|
85
86
|
options.merge!(:api_key => @api_key, :method => method)
|
|
86
87
|
sign_request(options)
|
|
87
88
|
|
|
88
89
|
rsp = request_over_http(options, http_method, endpoint)
|
|
89
90
|
|
|
90
|
-
rsp = '
|
|
91
|
-
xm =
|
|
92
|
-
|
|
93
|
-
if xm[
|
|
94
|
-
xm
|
|
91
|
+
rsp = '<?xml version="1.0" encoding="utf-8" ?><rsp stat="ok"></rsp>' if rsp == ""
|
|
92
|
+
xm = Nokogiri.Slop(rsp, nil, nil, Nokogiri::XML::ParseOptions::NOBLANKS)
|
|
93
|
+
|
|
94
|
+
if xm.rsp['stat'] == 'ok'
|
|
95
|
+
xm.rsp
|
|
95
96
|
else
|
|
96
|
-
|
|
97
|
+
Flickr::Errors.error_for(xm.rsp.err["code"].to_i, xm.rsp.err["msg"])
|
|
97
98
|
end
|
|
98
99
|
end
|
|
99
100
|
|
data/lib/flickr/errors.rb
CHANGED
|
@@ -10,7 +10,7 @@ module Flickr
|
|
|
10
10
|
# Currently raises only Flickr::Error
|
|
11
11
|
def self.error_for(code, message)
|
|
12
12
|
raise RuntimeError.new("Internal error. Flickr API error not identified or unknown error.") if (code.nil? || message.nil? || message.empty?)
|
|
13
|
-
raise RuntimeError.new("Internal error. Unknown error.") if code.to_i == 0 # We assume that error code 0 is never returned
|
|
13
|
+
raise RuntimeError.new("Internal error. Unknown error: #{code.inspect}") if code.to_i == 0 # We assume that error code 0 is never returned
|
|
14
14
|
e = Flickr::Error.new("#{code}: #{message}")
|
|
15
15
|
e.code = code
|
|
16
16
|
raise e
|
data/lib/flickr/person.rb
CHANGED
|
@@ -52,29 +52,7 @@ class Flickr::People::Person
|
|
|
52
52
|
:method => 'public_photos',
|
|
53
53
|
:options => options) do |photos|
|
|
54
54
|
rsp.photos.photo.each do |photo|
|
|
55
|
-
attributes =
|
|
56
|
-
:owner => photo[:owner],
|
|
57
|
-
:secret => photo[:secret],
|
|
58
|
-
:server => photo[:server],
|
|
59
|
-
:farm => photo[:farm],
|
|
60
|
-
:title => photo[:title],
|
|
61
|
-
:is_public => photo[:ispublic],
|
|
62
|
-
:is_friend => photo[:isfriend],
|
|
63
|
-
:is_family => photo[:isfamily],
|
|
64
|
-
:license_id => photo[:license].to_i,
|
|
65
|
-
:uploaded_at => (Time.at(photo[:dateupload].to_i) rescue nil),
|
|
66
|
-
:taken_at => (Time.parse(photo[:datetaken]) rescue nil),
|
|
67
|
-
:owner_name => photo[:ownername],
|
|
68
|
-
:icon_server => photo[:icon_server],
|
|
69
|
-
:original_format => photo[:originalformat],
|
|
70
|
-
:updated_at => (Time.at(photo[:lastupdate].to_i) rescue nil),
|
|
71
|
-
:geo => photo[:geo],
|
|
72
|
-
:tags => photo[:tags],
|
|
73
|
-
:machine_tags => photo[:machine_tags],
|
|
74
|
-
:o_dims => photo[:o_dims],
|
|
75
|
-
:views => photo[:views].to_i,
|
|
76
|
-
:media => photo[:media]}
|
|
77
|
-
|
|
55
|
+
attributes = Flickr::Photos.create_attributes(photo)
|
|
78
56
|
photos << Flickr::Photos::Photo.new(@flickr, attributes)
|
|
79
57
|
end if rsp.photos.photo
|
|
80
58
|
end
|
data/lib/flickr/photo.rb
CHANGED
|
@@ -1,8 +1,37 @@
|
|
|
1
1
|
# wrapping class to hold an flickr photo
|
|
2
2
|
class Flickr::Photos::Photo
|
|
3
|
-
attr_accessor :id,
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
attr_accessor :id,
|
|
4
|
+
:owner,
|
|
5
|
+
:secret,
|
|
6
|
+
:server,
|
|
7
|
+
:farm,
|
|
8
|
+
:title,
|
|
9
|
+
:is_public,
|
|
10
|
+
:is_friend,
|
|
11
|
+
:is_family # standard attributes
|
|
12
|
+
attr_accessor :license_id,
|
|
13
|
+
:uploaded_at,
|
|
14
|
+
:taken_at,
|
|
15
|
+
:owner_name,
|
|
16
|
+
:owner_realname,
|
|
17
|
+
:icon_server,
|
|
18
|
+
:original_format,
|
|
19
|
+
:updated_at,
|
|
20
|
+
:geo,
|
|
21
|
+
:tags,
|
|
22
|
+
:machine_tags,
|
|
23
|
+
:o_height,
|
|
24
|
+
:o_width,
|
|
25
|
+
:o_dims,
|
|
26
|
+
:views,
|
|
27
|
+
:media,
|
|
28
|
+
:rotation # extra attributes
|
|
29
|
+
attr_accessor :info_added,
|
|
30
|
+
:description,
|
|
31
|
+
:original_secret,
|
|
32
|
+
:owner_username,
|
|
33
|
+
:url_photopage,
|
|
34
|
+
:notes # info attributes
|
|
6
35
|
attr_accessor :comments # comment attributes
|
|
7
36
|
|
|
8
37
|
# create a new instance of a flickr photo.
|
|
@@ -18,7 +47,36 @@ class Flickr::Photos::Photo
|
|
|
18
47
|
send("#{k}=", v)
|
|
19
48
|
end
|
|
20
49
|
end
|
|
50
|
+
def self.create_attributes(photo)
|
|
51
|
+
{:id => photo['id'].to_i,
|
|
52
|
+
:secret => photo['secret'],
|
|
53
|
+
:server => photo['server'],
|
|
54
|
+
:farm => photo['farm'],
|
|
55
|
+
:license_id => photo['license'].to_i,
|
|
56
|
+
:rotation => photo['rotation'].to_i,
|
|
57
|
+
:uploaded_at => (Time.at(photo['dateuploaded'].to_i) rescue nil),
|
|
58
|
+
:owner => photo.owner['nsid'],
|
|
59
|
+
:owner_username => photo.owner['username'],
|
|
60
|
+
:owner_realname => photo.owner['realname'],
|
|
61
|
+
:icon_server => photo.owner['iconserver'],
|
|
62
|
+
:title => (photo.title.text rescue ''),
|
|
63
|
+
:description => photo.at_xpath("description").text, # description is a method of XML::Node, so we use at_xpath instead
|
|
64
|
+
:original_secret => photo['originalsecret'],
|
|
21
65
|
|
|
66
|
+
:is_public => photo.visibility['ispublic'].to_i,
|
|
67
|
+
:is_friend => photo.visibility['isfriend'].to_i,
|
|
68
|
+
:is_family => photo.visibility['isfamily'].to_i,
|
|
69
|
+
|
|
70
|
+
:taken_at => (Time.parse(photo.dates['taken']) rescue nil),
|
|
71
|
+
:updated_at => (Time.at(photo.dates['lastupdate'].to_i) rescue nil),
|
|
72
|
+
:tags => photo.tags.tag.map { |t|
|
|
73
|
+
{ :id => t['id'], :author => t['author'],
|
|
74
|
+
:raw => t['raw'], :machine_tag => t['machine_tag'],
|
|
75
|
+
:text => t.text }},
|
|
76
|
+
|
|
77
|
+
:url_photopage => photo.urls.url.text
|
|
78
|
+
}
|
|
79
|
+
end
|
|
22
80
|
# Alias to image_url method
|
|
23
81
|
def url(size = :medium)
|
|
24
82
|
image_url(size)
|
|
@@ -271,8 +329,8 @@ class Flickr::Photos::Photo
|
|
|
271
329
|
|
|
272
330
|
_sizes = []
|
|
273
331
|
rsp.sizes.size.each do |size|
|
|
274
|
-
_sizes << Flickr::Photos::Size.new(:label => size[:label], :width => size[:width],
|
|
275
|
-
:height => size[:height], :source => size[:source], :url => size[:url])
|
|
332
|
+
_sizes << Flickr::Photos::Size.new(:label => size[:label], :width => size[:width].to_i,
|
|
333
|
+
:height => size[:height].to_i, :source => size[:source], :url => size[:url])
|
|
276
334
|
end
|
|
277
335
|
_sizes
|
|
278
336
|
end
|
|
@@ -319,25 +377,23 @@ class Flickr::Photos::Photo
|
|
|
319
377
|
rsp = @flickr.send_request('flickr.photos.getInfo', :photo_id => self.id, :secret => self.secret)
|
|
320
378
|
|
|
321
379
|
self.info_added = true
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
self.url_photopage = rsp.photo.urls.url.to_s
|
|
327
|
-
self.comment_count = rsp.photo.comments.to_s.to_i
|
|
380
|
+
|
|
381
|
+
::Flickr::Photos::Photo.create_attributes(rsp.photo).each do |k,v|
|
|
382
|
+
send("#{k}=", v)
|
|
383
|
+
end
|
|
328
384
|
|
|
329
385
|
self.notes = []
|
|
330
386
|
|
|
331
|
-
rsp.photo.notes.
|
|
387
|
+
rsp.photo.notes.each do |note|
|
|
332
388
|
self.notes << Flickr::Photos::Note.new(:id => note[:id],
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
end
|
|
389
|
+
:note => note.to_s,
|
|
390
|
+
:author => note[:author],
|
|
391
|
+
:author_name => note[:authorname],
|
|
392
|
+
:x => note[:x],
|
|
393
|
+
:y => note[:y],
|
|
394
|
+
:width => note[:w],
|
|
395
|
+
:height => note[:h])
|
|
396
|
+
end
|
|
341
397
|
end
|
|
342
398
|
end
|
|
343
399
|
end
|
data/lib/flickr/photos.rb
CHANGED
|
@@ -215,39 +215,41 @@ class Flickr::Photos < Flickr::Base
|
|
|
215
215
|
# Raises an error if photo not found
|
|
216
216
|
def find_by_id(photo_id)
|
|
217
217
|
rsp = @flickr.send_request('flickr.photos.getInfo', :photo_id => photo_id)
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
218
|
+
|
|
219
|
+
attributes = Photo.create_attributes(rsp.photo)
|
|
220
|
+
|
|
221
|
+
Photo.new(@flickr, attributes)
|
|
222
222
|
end
|
|
223
223
|
|
|
224
224
|
protected
|
|
225
|
+
|
|
226
|
+
|
|
225
227
|
def create_attributes(photo)
|
|
226
|
-
{:id => photo[
|
|
227
|
-
:owner => photo[
|
|
228
|
-
:secret => photo[
|
|
229
|
-
:server => photo[
|
|
230
|
-
:farm => photo[
|
|
231
|
-
:title => photo[
|
|
232
|
-
:is_public => photo[
|
|
233
|
-
:is_friend => photo[
|
|
234
|
-
:is_family => photo[
|
|
235
|
-
:license_id => photo[
|
|
236
|
-
:uploaded_at => (Time.at(photo[
|
|
237
|
-
:taken_at => (Time.parse(photo[
|
|
238
|
-
:owner_name => photo[
|
|
239
|
-
:icon_server => photo[
|
|
240
|
-
:original_format => photo[
|
|
241
|
-
:updated_at => (Time.at(photo[
|
|
242
|
-
:rotation => photo[
|
|
243
|
-
:geo => photo[
|
|
244
|
-
:tags => photo[
|
|
245
|
-
:machine_tags => photo[
|
|
246
|
-
:o_dims => photo[
|
|
247
|
-
:o_height => photo[
|
|
248
|
-
:o_width => photo[
|
|
249
|
-
:views => photo[
|
|
250
|
-
:media => photo[
|
|
228
|
+
{:id => photo['id'].to_i,
|
|
229
|
+
:owner => photo['owner'],
|
|
230
|
+
:secret => photo['secret'],
|
|
231
|
+
:server => photo['server'],
|
|
232
|
+
:farm => photo['farm'],
|
|
233
|
+
:title => photo['title'],
|
|
234
|
+
:is_public => photo['ispublic'],
|
|
235
|
+
:is_friend => photo['isfriend'],
|
|
236
|
+
:is_family => photo['isfamily'],
|
|
237
|
+
:license_id => photo['license'].to_i,
|
|
238
|
+
:uploaded_at => (Time.at(photo['dateupload'].to_i) rescue nil),
|
|
239
|
+
:taken_at => (Time.parse(photo['datetaken']) rescue nil),
|
|
240
|
+
:owner_name => photo['ownername'],
|
|
241
|
+
:icon_server => photo['icon_server'],
|
|
242
|
+
:original_format => photo['originalformat'],
|
|
243
|
+
:updated_at => (Time.at(photo['lastupdate'].to_i) rescue nil),
|
|
244
|
+
:rotation => photo['rotation'],
|
|
245
|
+
:geo => photo['geo'],
|
|
246
|
+
:tags => photo['tags'],
|
|
247
|
+
:machine_tags => photo['machine_tags'],
|
|
248
|
+
:o_dims => photo['o_dims'],
|
|
249
|
+
:o_height => photo['o_height'],
|
|
250
|
+
:o_width => photo['o_width'],
|
|
251
|
+
:views => photo['views'].to_i,
|
|
252
|
+
:media => photo['media']}
|
|
251
253
|
end
|
|
252
254
|
|
|
253
255
|
end
|
data/lib/flickr/photosets.rb
CHANGED
|
@@ -40,8 +40,8 @@ class Flickr::Photosets < Flickr::Base
|
|
|
40
40
|
{
|
|
41
41
|
:id => photoset[:id],
|
|
42
42
|
:num_photos => photoset[:photos],
|
|
43
|
-
:title => photoset.title.to_s,
|
|
44
|
-
:description => photoset.description.
|
|
43
|
+
:title => photoset.title.text.to_s,
|
|
44
|
+
:description => photoset.at_xpath("description").text
|
|
45
45
|
}
|
|
46
46
|
end
|
|
47
47
|
|
data/lib/flickr/urls.rb
CHANGED
|
@@ -32,8 +32,8 @@ class Flickr::Urls < Flickr::Base
|
|
|
32
32
|
|
|
33
33
|
def lookup_user url
|
|
34
34
|
rsp = @flickr.send_request('flickr.urls.lookupUser', {:url => url})
|
|
35
|
-
user_id = UserLookupResult.new(rsp.user[
|
|
36
|
-
user_id.username = rsp.user.username
|
|
35
|
+
user_id = UserLookupResult.new(rsp.user['id'])
|
|
36
|
+
user_id.username = rsp.user.username.text
|
|
37
37
|
user_id
|
|
38
38
|
end
|
|
39
39
|
|
data/lib/flickr_fu.rb
CHANGED
|
@@ -36,101 +36,6 @@ require 'date'
|
|
|
36
36
|
require File.join(File.dirname(__FILE__), 'flickr', file)
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
-
module Flickr
|
|
40
|
-
|
|
41
|
-
if RUBY_VERSION =~ /1.8/
|
|
42
|
-
# Credit to Jim Weirich at http://onestepback.org/index.cgi/Tech/Ruby/BlankSlate.rdoc
|
|
43
|
-
class BlankSlate
|
|
44
|
-
instance_methods.each { |m| undef_method m unless m =~ /^__/ }
|
|
45
|
-
end
|
|
46
|
-
else
|
|
47
|
-
BlankSlate = BasicObject
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
# Class that makes accessing xml objects more like any other ruby object
|
|
51
|
-
# thanks to the magic of method missing
|
|
52
|
-
class XmlMagic < BlankSlate
|
|
53
|
-
require 'rexml/document'
|
|
54
|
-
|
|
55
|
-
def initialize(xml, namespace="")
|
|
56
|
-
if xml.class == ::REXML::Element or xml.class == ::Array
|
|
57
|
-
@element = xml
|
|
58
|
-
else
|
|
59
|
-
@xml = ::REXML::Document.new(xml)
|
|
60
|
-
@element = @xml.root
|
|
61
|
-
end
|
|
62
|
-
@namespace = namespace
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def each
|
|
66
|
-
@element.each {|e| yield ::Flickr::XmlMagic.new(e, @namespace)}
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def method_missing(method, selection=nil)
|
|
70
|
-
evaluate(method.to_s, selection)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def namespace=(namespace)
|
|
74
|
-
if namespace and namespace.length > 0 # caca
|
|
75
|
-
@namespace = namespace + ":"
|
|
76
|
-
else
|
|
77
|
-
@namespace = ""
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def to_s
|
|
82
|
-
if @element.class == ::Array
|
|
83
|
-
@element.collect{|e| e.text}.join
|
|
84
|
-
else
|
|
85
|
-
@element.text
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def [](index, count = nil)
|
|
90
|
-
if index.is_a?(::Fixnum) or index.is_a?(::Bignum) or index.is_a?(::Integer) or index.is_a?(::Range)
|
|
91
|
-
if @element.is_a?(::Array)
|
|
92
|
-
if count
|
|
93
|
-
::Flickr::XmlMagic.new(@element[index, count], @namespace)
|
|
94
|
-
else
|
|
95
|
-
::Flickr::XmlMagic.new(@element[index], @namespace)
|
|
96
|
-
end
|
|
97
|
-
else
|
|
98
|
-
nil
|
|
99
|
-
end
|
|
100
|
-
elsif index.is_a?(::Symbol)
|
|
101
|
-
if @element.is_a?(::Array)
|
|
102
|
-
if @element.empty?
|
|
103
|
-
nil
|
|
104
|
-
else
|
|
105
|
-
@element[0].attributes[index.to_s]
|
|
106
|
-
end
|
|
107
|
-
else
|
|
108
|
-
@element.attributes[index.to_s]
|
|
109
|
-
end
|
|
110
|
-
end
|
|
111
|
-
end
|
|
112
|
-
|
|
113
|
-
private
|
|
114
|
-
def evaluate(name, selection)
|
|
115
|
-
|
|
116
|
-
if @element.is_a?(::Array)
|
|
117
|
-
elements = @element[0].get_elements(@namespace + name)
|
|
118
|
-
else
|
|
119
|
-
elements = @element.get_elements(@namespace + name)
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
if elements.empty?
|
|
123
|
-
nil
|
|
124
|
-
else
|
|
125
|
-
if selection == :count
|
|
126
|
-
elements.length
|
|
127
|
-
else
|
|
128
|
-
::Flickr::XmlMagic.new(elements, @namespace)
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
end
|
|
132
|
-
end
|
|
133
|
-
end # module Flickr
|
|
134
39
|
|
|
135
40
|
|
|
136
41
|
class Object
|
data/spec/flickr/photo_spec.rb
CHANGED
|
@@ -37,7 +37,7 @@ describe Flickr::Photos::Photo do
|
|
|
37
37
|
it "should return the description" do
|
|
38
38
|
@flickr.should_receive(:request_over_http).and_return(@info_xml)
|
|
39
39
|
@photo.description.should ==
|
|
40
|
-
"
|
|
40
|
+
"\nThe last picture from a quite old event. The demolition of the best known hotel in Rzeszów called Hotel Rzeszów.\n\t\t"
|
|
41
41
|
end
|
|
42
42
|
end
|
|
43
43
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fotonauts-flickr_fu
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.9
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -29,6 +29,22 @@ dependencies:
|
|
|
29
29
|
- - ! '>'
|
|
30
30
|
- !ruby/object:Gem::Version
|
|
31
31
|
version: 0.0.0
|
|
32
|
+
- !ruby/object:Gem::Dependency
|
|
33
|
+
name: nokogiri
|
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
|
35
|
+
none: false
|
|
36
|
+
requirements:
|
|
37
|
+
- - ! '>'
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: 1.5.5
|
|
40
|
+
type: :runtime
|
|
41
|
+
prerelease: false
|
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
43
|
+
none: false
|
|
44
|
+
requirements:
|
|
45
|
+
- - ! '>'
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: 1.5.5
|
|
32
48
|
description: Provides a ruby interface to flickr via the REST api
|
|
33
49
|
email: ben@commonthread.com
|
|
34
50
|
executables: []
|