commonthread-flickr_fu 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +13 -0
- data/Rakefile +40 -8
- data/VERSION.yml +4 -0
- data/flickr_fu.gemspec +114 -33
- data/lib/flickr/base.rb +49 -22
- data/lib/flickr/contact.rb +16 -0
- data/lib/flickr/contacts.rb +55 -0
- data/lib/flickr/geo.rb +42 -0
- data/lib/flickr/location.rb +15 -0
- data/lib/flickr/photo.rb +23 -0
- data/lib/flickr/photos.rb +6 -1
- data/lib/flickr/photoset.rb +36 -0
- data/lib/flickr/photosets.rb +36 -0
- data/lib/flickr/urls.rb +44 -0
- data/lib/flickr_fu.rb +23 -1
- data/spec/fixtures/flickr/contacts/get_list-fail-99.xml +4 -0
- data/spec/fixtures/flickr/contacts/get_public_list-0.xml +7 -0
- data/spec/fixtures/flickr/photos/geo/get_location-0.xml +11 -0
- data/spec/fixtures/flickr/photos/geo/get_location-fail-2.xml +4 -0
- data/spec/fixtures/flickr/photos/get_info-0.xml +41 -0
- data/spec/fixtures/flickr/photos/get_info-1.xml +19 -0
- data/spec/fixtures/flickr/photos/get_sizes-0.xml +10 -0
- data/spec/fixtures/flickr/photos/get_sizes-1.xml +8 -0
- data/spec/fixtures/flickr/photos/licenses/get_info.xml +12 -0
- data/spec/fixtures/flickr/photosets/get_list-0.xml +13 -0
- data/spec/fixtures/flickr/photosets/get_photos-0.xml +7 -0
- data/spec/fixtures/flickr/test/echo-0.xml +5 -0
- data/spec/fixtures/flickr/test/null-fail-99.xml +4 -0
- data/spec/fixtures/flickr/urls/get_group-0.xml +4 -0
- data/spec/fixtures/flickr/urls/get_group-fail-1.xml +4 -0
- data/spec/fixtures/flickr/urls/get_user_photos-0.xml +4 -0
- data/spec/fixtures/flickr/urls/get_user_photos-fail-1.xml +4 -0
- data/spec/fixtures/flickr/urls/get_user_photos-fail-2.xml +4 -0
- data/spec/fixtures/flickr/urls/get_user_profile-0.xml +4 -0
- data/spec/fixtures/flickr/urls/get_user_profile-fail-1.xml +4 -0
- data/spec/fixtures/flickr/urls/get_user_profile-fail-2.xml +4 -0
- data/spec/fixtures/flickr/urls/lookup_group-0.xml +6 -0
- data/spec/fixtures/flickr/urls/lookup_group-fail-1.xml +4 -0
- data/spec/fixtures/flickr/urls/lookup_user-0.xml +6 -0
- data/spec/fixtures/flickr/videos/get_info-0.xml +31 -0
- data/spec/fixtures/flickr/videos/get_sizes-0.xml +13 -0
- data/spec/flickr/base_spec.rb +97 -0
- data/spec/flickr/contacts_spec.rb +47 -0
- data/spec/flickr/errors_spec.rb +21 -0
- data/spec/flickr/geo_spec.rb +20 -0
- data/spec/flickr/photo_spec.rb +123 -0
- data/spec/flickr/photos_spec.rb +50 -0
- data/spec/flickr/photosets_spec.rb +49 -0
- data/spec/flickr/test_spec.rb +34 -0
- data/spec/flickr/urls_spec.rb +99 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +20 -0
- metadata +65 -7
@@ -0,0 +1,15 @@
|
|
1
|
+
class Flickr::Photos::Location
|
2
|
+
|
3
|
+
attr_accessor :latitude, :longitude, :accuracy
|
4
|
+
|
5
|
+
# Create an instance of Flickr::Photos::Location
|
6
|
+
#
|
7
|
+
# Params
|
8
|
+
# * attributes (Required)
|
9
|
+
# a hash of attributes used to set the initial values of the Location object
|
10
|
+
def initialize(attributes)
|
11
|
+
attributes.each do |k,v|
|
12
|
+
send("#{k}=", v)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/flickr/photo.rb
CHANGED
@@ -146,6 +146,29 @@ class Flickr::Photos::Photo
|
|
146
146
|
def license
|
147
147
|
@flickr.photos.licenses[self.license_id]
|
148
148
|
end
|
149
|
+
|
150
|
+
# Returns the location of the photo (if available)
|
151
|
+
# or nil if photo is not geo-tagged.
|
152
|
+
def location
|
153
|
+
begin
|
154
|
+
@location ||= @flickr.photos.geo.get_location(self.id)
|
155
|
+
rescue Flickr::Error => e
|
156
|
+
if e.code == 2 # 2: Photo has no location information.
|
157
|
+
return nil
|
158
|
+
else
|
159
|
+
raise e
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def location= location
|
165
|
+
if !location.nil?
|
166
|
+
@flickr.photos.geo.set_location(self.id, location.latitude, location.longitude, location.accuracy)
|
167
|
+
else
|
168
|
+
@flickr.photos.geo.remove_location(self.id)
|
169
|
+
end
|
170
|
+
@location = location
|
171
|
+
end
|
149
172
|
|
150
173
|
# Sets the license for a photo.
|
151
174
|
#
|
data/lib/flickr/photos.rb
CHANGED
@@ -148,7 +148,7 @@ class Flickr::Photos < Flickr::Base
|
|
148
148
|
# * media (Optional)
|
149
149
|
# The type of media to search for. 'photo', 'video', or 'both' are allowed arguments, with 'both' being the default.
|
150
150
|
#
|
151
|
-
def get_recent(options)
|
151
|
+
def get_recent(options = {})
|
152
152
|
options.merge!({:extras => "license,date_upload,date_taken,owner_name,icon_server,original_format,last_update,geo,tags,machine_tags,o_dims,views,media"})
|
153
153
|
|
154
154
|
rsp = @flickr.send_request('flickr.photos.getRecent', options)
|
@@ -201,6 +201,11 @@ class Flickr::Photos < Flickr::Base
|
|
201
201
|
end
|
202
202
|
end
|
203
203
|
end
|
204
|
+
|
205
|
+
# creates and/or returns the Flickr::Photos::Geo object
|
206
|
+
def geo
|
207
|
+
@geo ||= Flickr::Photos::Geo.new(@flickr)
|
208
|
+
end
|
204
209
|
|
205
210
|
# Returns a Flickr::Photos::Photo object of the given id.
|
206
211
|
# Raises an error if photo not found
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class Flickr::Photosets::Photoset
|
2
|
+
attr_accessor :id,:num_photos,:title,:description
|
3
|
+
|
4
|
+
def initialize(flickr, attributes)
|
5
|
+
@flickr = flickr
|
6
|
+
attributes.each do |k,v|
|
7
|
+
send("#{k}=", v)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_photos(options={})
|
12
|
+
options = options.merge(:photoset_id=>id)
|
13
|
+
rsp = @flickr.send_request('flickr.photosets.getPhotos', options)
|
14
|
+
collect_photos(rsp)
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
def collect_photos(rsp)
|
19
|
+
photos = []
|
20
|
+
return photos unless rsp
|
21
|
+
if rsp.photoset.photo
|
22
|
+
rsp.photoset.photo.each do |photo|
|
23
|
+
attributes = create_attributes(photo)
|
24
|
+
photos << Flickr::Photos::Photo.new(@flickr,attributes)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
return photos
|
28
|
+
end
|
29
|
+
|
30
|
+
def create_attributes(photo)
|
31
|
+
{:id => photo[:id],
|
32
|
+
:secret => photo[:secret],
|
33
|
+
:server => photo[:server],
|
34
|
+
:title => photo[:title]}
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
class Flickr::Photosets < Flickr::Base
|
2
|
+
def initialize(flickr)
|
3
|
+
@flickr = flickr
|
4
|
+
end
|
5
|
+
|
6
|
+
# Get the authorized user's contact list.
|
7
|
+
#
|
8
|
+
def get_list(options={})
|
9
|
+
rsp = @flickr.send_request('flickr.photosets.getList', options)
|
10
|
+
collect_photosets(rsp)
|
11
|
+
end
|
12
|
+
|
13
|
+
protected
|
14
|
+
def collect_photosets(rsp)
|
15
|
+
photosets = []
|
16
|
+
return photosets unless rsp
|
17
|
+
if rsp.photosets.photoset
|
18
|
+
rsp.photosets.photoset.each do |photoset|
|
19
|
+
attributes = create_attributes(photoset)
|
20
|
+
photosets << Photoset.new(@flickr, attributes)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
return photosets
|
24
|
+
end
|
25
|
+
|
26
|
+
def create_attributes(photoset)
|
27
|
+
|
28
|
+
{
|
29
|
+
:id => photoset[:id],
|
30
|
+
:num_photos => photoset[:photos],
|
31
|
+
:title => photoset.title,
|
32
|
+
:description => photoset.description
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
data/lib/flickr/urls.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# Wrapping class that holds methods in the flickr.urls namespace
|
2
|
+
class Flickr::Urls < Flickr::Base
|
3
|
+
def initialize(flickr)
|
4
|
+
@flickr = flickr
|
5
|
+
end
|
6
|
+
|
7
|
+
def get_group group_id
|
8
|
+
rsp = @flickr.send_request('flickr.urls.getGroup', {:group_id => group_id})
|
9
|
+
rsp.group[:url]
|
10
|
+
end
|
11
|
+
|
12
|
+
def get_user_photos user_id
|
13
|
+
rsp = @flickr.send_request('flickr.urls.getUserPhotos', {:user_id => user_id})
|
14
|
+
rsp.user[:url]
|
15
|
+
end
|
16
|
+
|
17
|
+
def get_user_profile user_id
|
18
|
+
rsp = @flickr.send_request('flickr.urls.getUserProfile', {:user_id => user_id})
|
19
|
+
rsp.user[:url]
|
20
|
+
end
|
21
|
+
|
22
|
+
def lookup_group url #, options = {}
|
23
|
+
#options.symbolize_keys!
|
24
|
+
#options.reverse_merge!({:include_groupname => false})
|
25
|
+
rsp = @flickr.send_request('flickr.urls.lookupGroup', {:url => url})
|
26
|
+
#if options[:include_groupname]
|
27
|
+
#[rsp.group[:id], {:groupname => rsp.group.groupname}]
|
28
|
+
#else
|
29
|
+
rsp.group[:id]
|
30
|
+
#end
|
31
|
+
end
|
32
|
+
|
33
|
+
def lookup_user url
|
34
|
+
rsp = @flickr.send_request('flickr.urls.lookupUser', {:url => url})
|
35
|
+
user_id = UserLookupResult.new(rsp.user[:id])
|
36
|
+
user_id.username = rsp.user.username
|
37
|
+
user_id
|
38
|
+
end
|
39
|
+
|
40
|
+
class UserLookupResult < String
|
41
|
+
attr_accessor :username
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
data/lib/flickr_fu.rb
CHANGED
@@ -11,7 +11,29 @@ require 'time'
|
|
11
11
|
require 'date'
|
12
12
|
|
13
13
|
# base must load first
|
14
|
-
|
14
|
+
[ "base",
|
15
|
+
"test",
|
16
|
+
"auth",
|
17
|
+
"token",
|
18
|
+
"photos",
|
19
|
+
"photo",
|
20
|
+
"photo_response",
|
21
|
+
"photosets",
|
22
|
+
"photoset",
|
23
|
+
"comment",
|
24
|
+
"note",
|
25
|
+
"size",
|
26
|
+
"uploader",
|
27
|
+
"status",
|
28
|
+
"people",
|
29
|
+
"person",
|
30
|
+
"license",
|
31
|
+
"errors",
|
32
|
+
"contacts",
|
33
|
+
"contact",
|
34
|
+
"geo",
|
35
|
+
"location",
|
36
|
+
"urls" ].each do |file|
|
15
37
|
require File.join(File.dirname(__FILE__), 'flickr', file)
|
16
38
|
end
|
17
39
|
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
2
|
+
<rsp stat="ok">
|
3
|
+
<contacts page="1" pages="1" per_page="1000" perpage="1000" total="2">
|
4
|
+
<contact nsid="40718771@N00" username="kooop" iconserver="2" iconfarm="1" ignored="0" />
|
5
|
+
<contact nsid="20039881@N00" username="wayoutwest" iconserver="1" iconfarm="1" ignored="0" />
|
6
|
+
</contacts>
|
7
|
+
</rsp>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
2
|
+
<rsp stat="ok">
|
3
|
+
<photo id="2984637736">
|
4
|
+
<location latitude="50.041376" longitude="21.999006" accuracy="16" context="0" place_id="X.5ul_ucAJtJcT0" woeid="517126">
|
5
|
+
<locality place_id="X.5ul_ucAJtJcT0" woeid="517126">Rzeszów</locality>
|
6
|
+
<county place_id="gUrbqNqYA5n4kv.erw" woeid="12591341">Rzeszów</county>
|
7
|
+
<region place_id="acDFruGYA5lyOpcIVg" woeid="12577943">Subcarpathia</region>
|
8
|
+
<country place_id="0kV97TybAphIxvm14g" woeid="23424923">Poland</country>
|
9
|
+
</location>
|
10
|
+
</photo>
|
11
|
+
</rsp>
|
@@ -0,0 +1,41 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
2
|
+
<rsp stat="ok">
|
3
|
+
<photo id="2984637736" secret="9e5762e027" server="3180" farm="4" dateuploaded="1225297614" isfavorite="0" license="0" rotation="0" media="photo">
|
4
|
+
<owner nsid="80755658@N00" username="Maciej Biłas" realname="Maciej Biłas" location="Rzeszów, Poland"/>
|
5
|
+
<title>Demolition of Hotel Rzeszów</title>
|
6
|
+
<description>
|
7
|
+
The last picture from a quite old event. The demolition of the best known hotel in Rzeszów called Hotel Rzeszów.
|
8
|
+
</description>
|
9
|
+
<visibility ispublic="1" isfriend="0" isfamily="0"/>
|
10
|
+
<dates posted="1225297614" taken="2007-04-20 17:56:06" takengranularity="0" lastupdate="1227358764"/>
|
11
|
+
<editability cancomment="0" canaddmeta="0"/>
|
12
|
+
<usage candownload="0" canblog="0" canprint="0"/>
|
13
|
+
<comments>0</comments>
|
14
|
+
<notes/>
|
15
|
+
<tags>
|
16
|
+
<tag id="4963651-2984637736-9769036" author="80755658@N00" raw="Hotel Rzeszów" machine_tag="0">hotelrzeszów
|
17
|
+
</tag>
|
18
|
+
<tag id="4963651-2984637736-9381" author="80755658@N00" raw="demolition" machine_tag="0">demolition
|
19
|
+
</tag>
|
20
|
+
<tag id="4963651-2984637736-1888184" author="80755658@N00" raw="Rzeszów" machine_tag="0">rzeszów
|
21
|
+
</tag>
|
22
|
+
<tag id="4963651-2984637736-8302" author="80755658@N00" raw="Poland" machine_tag="0">poland
|
23
|
+
</tag>
|
24
|
+
</tags>
|
25
|
+
<location latitude="50.041376" longitude="21.999006" accuracy="16" place_id="X.5ul_ucAJtJcT0" woeid="517126">
|
26
|
+
<locality place_id="X.5ul_ucAJtJcT0" woeid="517126">Rzeszów
|
27
|
+
</locality>
|
28
|
+
<county place_id="gUrbqNqYA5n4kv.erw" woeid="12591341">Rzeszów
|
29
|
+
</county>
|
30
|
+
<region place_id="acDFruGYA5lyOpcIVg" woeid="12577943">Subcarpathia
|
31
|
+
</region>
|
32
|
+
<country place_id="0kV97TybAphIxvm14g" woeid="23424923">Poland
|
33
|
+
</country>
|
34
|
+
</location>
|
35
|
+
<geoperms ispublic="1" iscontact="0" isfriend="0" isfamily="0"/>
|
36
|
+
<urls>
|
37
|
+
<url type="photopage">http://www.flickr.com/photos/lvizard/2984637736/
|
38
|
+
</url>
|
39
|
+
</urls>
|
40
|
+
</photo>
|
41
|
+
</rsp>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
2
|
+
<rsp stat="ok">
|
3
|
+
<photo id="3059178826" secret="951324cc9f" server="3008" farm="4" dateuploaded="1227628465" isfavorite="0" license="0" rotation="0" originalsecret="fdbf0e4ced" originalformat="jpg" views="0" media="photo">
|
4
|
+
<owner nsid="80755658@N00" username="Maciej Biłas" realname="Maciej Biłas" location="Rzeszów, Poland"/>
|
5
|
+
<title>test</title>
|
6
|
+
<description/>
|
7
|
+
<visibility ispublic="0" isfriend="0" isfamily="0"/>
|
8
|
+
<dates posted="1227628465" taken="2008-11-25 16:54:25" takengranularity="0" lastupdate="1227628476"/>
|
9
|
+
<permissions permcomment="3" permaddmeta="2"/>
|
10
|
+
<editability cancomment="1" canaddmeta="1"/>
|
11
|
+
<usage candownload="0" canblog="1" canprint="1"/>
|
12
|
+
<comments>0</comments>
|
13
|
+
<notes/>
|
14
|
+
<tags/>
|
15
|
+
<urls>
|
16
|
+
<url type="photopage">http://www.flickr.com/photos/lvizard/3059178826/</url>
|
17
|
+
</urls>
|
18
|
+
</photo>
|
19
|
+
</rsp>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
2
|
+
<rsp stat="ok">
|
3
|
+
<sizes canblog="0" canprint="0" candownload="0">
|
4
|
+
<size label="Square" width="75" height="75" source="http://farm4.static.flickr.com/3180/2984637736_9e5762e027_s.jpg" url="http://www.flickr.com/photos/lvizard/2984637736/sizes/sq/" media="photo"/>
|
5
|
+
<size label="Thumbnail" width="100" height="67" source="http://farm4.static.flickr.com/3180/2984637736_9e5762e027_t.jpg" url="http://www.flickr.com/photos/lvizard/2984637736/sizes/t/" media="photo"/>
|
6
|
+
<size label="Small" width="240" height="160" source="http://farm4.static.flickr.com/3180/2984637736_9e5762e027_m.jpg" url="http://www.flickr.com/photos/lvizard/2984637736/sizes/s/" media="photo"/>
|
7
|
+
<size label="Medium" width="500" height="333" source="http://farm4.static.flickr.com/3180/2984637736_9e5762e027.jpg" url="http://www.flickr.com/photos/lvizard/2984637736/sizes/m/" media="photo"/>
|
8
|
+
<size label="Large" width="1024" height="683" source="http://farm4.static.flickr.com/3180/2984637736_9e5762e027_b.jpg" url="http://www.flickr.com/photos/lvizard/2984637736/sizes/l/" media="photo"/>
|
9
|
+
</sizes>
|
10
|
+
</rsp>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
2
|
+
<rsp stat="ok">
|
3
|
+
<sizes canblog="1" canprint="1" candownload="0">
|
4
|
+
<size label="Square" width="75" height="75" source="http://farm4.static.flickr.com/3008/3059178826_951324cc9f_s.jpg" url="http://www.flickr.com/photos/lvizard/3059178826/sizes/sq/" media="photo"/>
|
5
|
+
<size label="Thumbnail" width="70" height="72" source="http://farm4.static.flickr.com/3008/3059178826_951324cc9f_t.jpg" url="http://www.flickr.com/photos/lvizard/3059178826/sizes/t/" media="photo"/>
|
6
|
+
<size label="Original" width="70" height="72" source="http://farm4.static.flickr.com/3008/3059178826_fdbf0e4ced_o.jpg" url="http://www.flickr.com/photos/lvizard/3059178826/sizes/o/" media="photo"/>
|
7
|
+
</sizes>
|
8
|
+
</rsp>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
2
|
+
<rsp stat="ok">
|
3
|
+
<licenses>
|
4
|
+
<license id="0" name="All Rights Reserved" url=""/>
|
5
|
+
<license id="4" name="Attribution License" url="http://creativecommons.org/licenses/by/2.0/"/>
|
6
|
+
<license id="6" name="Attribution-NoDerivs License" url="http://creativecommons.org/licenses/by-nd/2.0/"/>
|
7
|
+
<license id="3" name="Attribution-NonCommercial-NoDerivs License" url="http://creativecommons.org/licenses/by-nc-nd/2.0/"/>
|
8
|
+
<license id="2" name="Attribution-NonCommercial License" url="http://creativecommons.org/licenses/by-nc/2.0/"/>
|
9
|
+
<license id="1" name="Attribution-NonCommercial-ShareAlike License" url="http://creativecommons.org/licenses/by-nc-sa/2.0/"/>
|
10
|
+
<license id="5" name="Attribution-ShareAlike License" url="http://creativecommons.org/licenses/by-sa/2.0/"/>
|
11
|
+
</licenses>
|
12
|
+
</rsp>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
2
|
+
<rsp stat="ok">
|
3
|
+
<photosets cancreate="1">
|
4
|
+
<photoset id="5" primary="2483" secret="abcdef" server="8" photos="4" farm="1">
|
5
|
+
<title>Test</title>
|
6
|
+
<description>foo</description>
|
7
|
+
</photoset>
|
8
|
+
<photoset id="4" primary="1234" secret="832659" server="3" photos="12" farm="1">
|
9
|
+
<title>My Set</title>
|
10
|
+
<description>bar</description>
|
11
|
+
</photoset>
|
12
|
+
</photosets>
|
13
|
+
</rsp>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" ?>
|
2
|
+
<rsp stat="ok">
|
3
|
+
<photoset id="4" primary="2483" page="1" perpage="500" pages="1" total="2">
|
4
|
+
<photo id="2484" secret="123456" server="1" title="my photo" isprimary="0" />
|
5
|
+
<photo id="2483" secret="123456" server="1" title="flickr rocks" isprimary="1" />
|
6
|
+
</photoset>
|
7
|
+
</rsp>
|