wideopenspaces-flickry 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,122 @@
1
+ # Flickry (by wideopenspac.es)
2
+
3
+ Flickry is a wrapper for Flickraw that makes working with the Flickr API safe &
4
+ easy by parsing the Flickraw response into the appropriate objects.
5
+
6
+ Now features support for Comments, Tags, Locations (including woeid and place_id
7
+ for region, county, etc)!
8
+
9
+ ## Installation
10
+
11
+ sudo gem install wideopenspaces-flickry
12
+
13
+ ## Using with Rails (2.2+)
14
+
15
+ In `config/environments.rb`, add:
16
+
17
+ config.gem "wideopenspaces-flickry", :source => "http://gems.github.com", :lib => 'flickry'
18
+
19
+ Add the following in `config/initializers/flickr.rb`:
20
+
21
+ # This is how to authenticate on flickr website.
22
+ # You need an API key for that, see http://www.flickr.com/services/api/keys/
23
+ API_KEY='your-api-key-here'
24
+ SHARED_SECRET='your-secret-here'
25
+ begin
26
+ FlickRaw.api_key=API_KEY
27
+ FlickRaw.shared_secret=SHARED_SECRET
28
+ rescue
29
+ end
30
+
31
+ ## Usage
32
+
33
+ pic = Flickry::Photo.new 3008067483
34
+
35
+ pic.urls
36
+ ["http://www.flickr.com/photos/..."]
37
+
38
+ **Dates**
39
+
40
+ pic.uploaded_at
41
+ => Thu Nov 06 13:27:13 -0700 2008
42
+ pic.taken_at
43
+ => Tue Nov 04 16:39:46 -0700 2008
44
+ pic.posted_at
45
+ => Thu Nov 06 13:27:13 -0700 2008
46
+ pic.last_updated_at
47
+ => Sat Jan 10 14:18:29 -0700 2009
48
+
49
+ **License**
50
+
51
+ pic.license
52
+ => "Attribution-NonCommercial-ShareAlike License"
53
+ pic.license.url
54
+ => "http://creativecommons.org/licenses/by-nc-sa/2.0/"
55
+
56
+ **Sizes**
57
+
58
+ pic.sizes.medium
59
+ => #<Flickry::Size source="http://farm4.static.flickr.com/....jpg", url="http://www.flickr.com/photos/.../sizes/m/", height="500", media="photo", width="334">
60
+
61
+ pic.sizes.medium.height
62
+ => "500"
63
+
64
+ **People**
65
+
66
+ person = pic.owner
67
+ => #<Flickry::Person location="", nsid="", realname="", username="", photosurl="", profileurl="">
68
+
69
+ person.profile
70
+ => "http://www.flickr.com/people/.../"
71
+
72
+ person.photos
73
+ => "http://www.flickr.com/photos/.../"
74
+
75
+ **Location**
76
+
77
+ pic.location
78
+ => #<Flickry::Location place_id="", region="", woeid="", country="", accuracy="", county="", latitude=41.8, locality="", longitude=-87.6, neighbourhood="">
79
+
80
+ reg = pic.location.region
81
+ => "Illinois"
82
+
83
+ reg.place_id # Look ma, that string has methods!
84
+ => "<place_id>"
85
+ reg.woeid
86
+ => "<woeid>"
87
+
88
+ country, region, county, locality, and neighbourhood all *look* like strings but have woeid and place_id attributes.
89
+
90
+ **Tags**
91
+
92
+ pic.tags
93
+ => ["hdr", "trump", "skyscraper", "skyline"]
94
+
95
+ pic.tag_list
96
+ => "hdr, trump, skyscraper, skyline"
97
+
98
+ **Comments**
99
+
100
+ pic.comments
101
+ => ["beautiful", "That HDR trumps others I've seen! Nice work! :)"]
102
+
103
+ pic.comments.last
104
+ => "That HDR trumps others I've seen! Nice work! :)"
105
+
106
+ pic.comments.last.author
107
+ => #<Flickry::Person location="", nsid="", realname="", username="", photosurl="", profileurl="">
108
+
109
+ pic.comments.last.comment_id
110
+ => "215779-3008067483-72157608738732709"
111
+
112
+ pic.comments.last.created_at
113
+ => Fri Nov 07 10:38:42 -0700 2008
114
+
115
+ pic.comments.last.permalink
116
+ => "http://www.flickr.com/photos/unquiet/3008067483/#comment72157608738732709"
117
+
118
+
119
+ ## Contributing
120
+
121
+ This thing needs tests! I was running tests against the flickr api directly but want
122
+ to stub those. If you feel like getting there before I do, go right ahead!
@@ -1,4 +1,4 @@
1
1
  ---
2
2
  :minor: 2
3
- :patch: 0
3
+ :patch: 1
4
4
  :major: 0
@@ -1,10 +1,59 @@
1
- require 'flickraw'
1
+ #require 'flickraw'
2
+ require 'httparty'
2
3
  require 'super_struct'
3
4
 
4
5
  require 'flickry/base'
5
6
  require 'flickry/location'
6
7
  require 'flickry/tag'
7
8
  require 'flickry/person'
9
+ require 'flickry/comment'
10
+ require 'flickry/size'
8
11
  require 'flickry/sizes'
12
+ require 'flickry/license'
9
13
  require 'flickry/photo'
10
14
 
15
+ module Flickry
16
+ VERSION='0.3.0'
17
+
18
+ FLICKR_HOST='api.flickr.com'.freeze
19
+
20
+ # Path of flickr REST API
21
+ REST_PATH='/services/rest/?'.freeze
22
+
23
+ # Path of flickr auth page
24
+ AUTH_PATH='/services/auth/?'.freeze
25
+
26
+ # Path of flickr upload
27
+ UPLOAD_PATH='/services/upload/'.freeze
28
+
29
+ class Flickr
30
+ include HTTParty
31
+ base_uri FLICKR_HOST
32
+
33
+ def initialize # :nodoc:
34
+ end
35
+
36
+ def authorize(args={})
37
+ full_args = {:api_key => Flickry.api_key, :perms => 'read'}
38
+ args.each {|k, v| full_args[k.to_sym] = v }
39
+ full_args[:api_sig] = Flickry.api_sig(full_args) if Flickry.shared_secret
40
+ url = 'http://' + Flickry::FLICKR_HOST + Flickry::AUTH_PATH + full_args.collect { |a, v| "#{a}=#{v}" }.join('&')
41
+ puts url
42
+ self.class.get(url)
43
+ end
44
+ end
45
+
46
+ class << self
47
+ # Your flickr API key, see http://www.flickr.com/services/api/keys for more information
48
+ attr_accessor :api_key
49
+
50
+ # The shared secret of _api_key_, see http://www.flickr.com/services/api/keys for more information
51
+ attr_accessor :shared_secret
52
+
53
+
54
+ # Returns the signature of hsh. This is meant to be passed in the _api_sig_ parameter.
55
+ def api_sig(hsh)
56
+ MD5.md5(Flickry.shared_secret + hsh.sort{|a, b| a[0].to_s <=> b[0].to_s }.flatten.join).to_s
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,22 @@
1
+ # Flickr has an API method for getting information about licenses
2
+ # but it probably doesn't change all that often.
3
+ module Flickry
4
+ class License < String
5
+ attr_accessor :name, :url
6
+ def initialize(license)
7
+ @name, @url = case id.to_i # License Name Information URL
8
+ when 1: ["Attribution-NonCommercial-ShareAlike License", "http://creativecommons.org/licenses/by-nc-sa/2.0/"]
9
+ when 2: ["Attribution-NonCommercial License", "http://creativecommons.org/licenses/by-nc/2.0/"]
10
+ when 3: ["Attribution-NonCommercial-NoDerivs License", "http://creativecommons.org/licenses/by-nc-nd/2.0/"]
11
+ when 4: ["Attribution License", "http://creativecommons.org/licenses/by/2.0/"]
12
+ when 5: ["Attribution-ShareAlike License", "http://creativecommons.org/licenses/by-sa/2.0/"]
13
+ when 6: ["Attribution-NoDerivs License", "http://creativecommons.org/licenses/by-nd/2.0/"]
14
+ when 7: ["No known copyright restrictions", "http://flickr.com/commons/usage/"]
15
+ else
16
+ ["All Rights Reserved", ""]
17
+ end
18
+
19
+ super(@name)
20
+ end
21
+ end
22
+ end
@@ -6,9 +6,9 @@ module Flickry
6
6
  self.raw_photo = foto
7
7
  self.photo_id = flickr_id
8
8
 
9
- extract_attrs!(foto, [:dateuploaded, :description, :farm, :id, :isfavorite, :license,
9
+ extract_attrs!(foto, [:dateuploaded, :description, :farm, :id, :isfavorite,
10
10
  :media, :notes, :originalformat, :originalsecret, :rotation, :secret, :server, :tags,
11
- :title, :urls])
11
+ :title])
12
12
  extract_attrs_into_substructs!(foto, {
13
13
  :dates => [:lastupdate, :posted, :taken, :takengranularity],
14
14
  :editability => [:canaddmeta, :cancomment],
@@ -17,19 +17,24 @@ module Flickry
17
17
  :visibility => [:isfamily, :isfriend, :ispublic]
18
18
  })
19
19
  self.location = Flickry::Location.new(foto.respond_to?(:location) ? foto.location : nil)
20
- self.owner = Flickry::Person.new(foto.respond_to?(:owner) ? foto.owner : nil)
21
-
20
+ self.owner = Flickry::Person.find(foto.respond_to?(:owner) ? foto.owner.nsid : nil)
21
+ self.license = Flickry::License.new(foto.respond_to?(:license) ? foto.license : 99)
22
22
  _tags = self.tags.dup
23
23
  self.tags = _tags.collect do |t|
24
24
  Flickry::Tag.new(t)
25
25
  end
26
+ self.urls = foto.urls.collect { |u| u.to_s }
26
27
  end
27
28
 
29
+ ## Sizes
30
+
28
31
  # Lazily fetches the photo's sizes when called, memoizes so later calls are faster...
29
32
  def sizes
30
33
  @sizes ||= Flickry::Sizes.new(flickr.photos.getSizes(:photo_id => self.photo_id))
31
34
  end
32
35
 
36
+ ## Comments
37
+
33
38
  # Lazily fetches the photo's comments when called, memoizes so later calls are faster...
34
39
  def comments
35
40
  return @comments if @comments
@@ -44,13 +49,40 @@ module Flickry
44
49
  end
45
50
  end
46
51
  return @comments
47
- end
52
+ end
53
+
54
+ ## Time/Dates
55
+ def last_updated_at
56
+ dates_to_time(:lastupdate)
57
+ end
58
+
59
+ def posted_at
60
+ dates_to_time(:posted)
61
+ end
62
+
63
+ def taken_at
64
+ Time.parse(self.dates.taken)
65
+ end
66
+
67
+ def uploaded_at
68
+ uploaded = self.dateuploaded.to_i
69
+ return nil if uploaded == 0
70
+ Time.at(uploaded)
71
+ end
72
+
73
+ ## Tags
48
74
 
49
75
  # Join tags into a single string
50
76
  def tag_list(separator = ', ')
51
77
  self.tags.join(separator)
52
78
  end
53
79
 
80
+ #W Booleans
81
+
82
+ def favorite?
83
+ self.isfavorite == 1
84
+ end
85
+
54
86
  def visible_to_family?
55
87
  self.visibility.isfamily == 1
56
88
  end
@@ -63,5 +95,13 @@ module Flickry
63
95
  self.visibility.ispublic == 1
64
96
  end
65
97
 
98
+ private
99
+
100
+ def dates_to_time(src)
101
+ time = self.dates.send(src).to_i
102
+ return nil if time == 0
103
+ Time.at(time)
104
+ end
105
+
66
106
  end
67
107
  end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wideopenspaces-flickry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ hash: 21
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 1
10
+ version: 0.2.1
5
11
  platform: ruby
6
12
  authors:
7
13
  - Jacob Stetser
@@ -9,18 +15,24 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2009-01-21 00:00:00 -08:00
13
- default_executable:
18
+ date: 2009-01-22 00:00:00 Z
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: wideopenspaces-flickraw
17
- version_requirement:
18
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
19
25
  requirements:
20
26
  - - ">="
21
27
  - !ruby/object:Gem::Version
28
+ hash: 15
29
+ segments:
30
+ - 0
31
+ - 5
32
+ - 2
22
33
  version: 0.5.2
23
- version:
34
+ type: :runtime
35
+ version_requirements: *id001
24
36
  description: Interface to Flickr API to make working with API responses safer and easier. DO NOT USE ME YET!
25
37
  email: jake@wideopenspac.es
26
38
  executables: []
@@ -30,10 +42,11 @@ extensions: []
30
42
  extra_rdoc_files: []
31
43
 
32
44
  files:
45
+ - README.markdown
33
46
  - VERSION.yml
34
- - lib/flickry
35
47
  - lib/flickry/base.rb
36
48
  - lib/flickry/comment.rb
49
+ - lib/flickry/license.rb
37
50
  - lib/flickry/location.rb
38
51
  - lib/flickry/person.rb
39
52
  - lib/flickry/photo.rb
@@ -45,8 +58,9 @@ files:
45
58
  - lib/super_struct.rb
46
59
  - test/flickry_test.rb
47
60
  - test/test_helper.rb
48
- has_rdoc: true
49
61
  homepage: http://github.com/wideopenspaces/flickry
62
+ licenses: []
63
+
50
64
  post_install_message:
51
65
  rdoc_options:
52
66
  - --inline-source
@@ -54,21 +68,27 @@ rdoc_options:
54
68
  require_paths:
55
69
  - lib
56
70
  required_ruby_version: !ruby/object:Gem::Requirement
71
+ none: false
57
72
  requirements:
58
73
  - - ">="
59
74
  - !ruby/object:Gem::Version
75
+ hash: 3
76
+ segments:
77
+ - 0
60
78
  version: "0"
61
- version:
62
79
  required_rubygems_version: !ruby/object:Gem::Requirement
80
+ none: false
63
81
  requirements:
64
82
  - - ">="
65
83
  - !ruby/object:Gem::Version
84
+ hash: 3
85
+ segments:
86
+ - 0
66
87
  version: "0"
67
- version:
68
88
  requirements: []
69
89
 
70
90
  rubyforge_project:
71
- rubygems_version: 1.2.0
91
+ rubygems_version: 1.7.2
72
92
  signing_key:
73
93
  specification_version: 2
74
94
  summary: Friendlier interface to flickr API, uses flickraw underneath