flickr_fu 0.1.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.
@@ -0,0 +1,16 @@
1
+ # wrapping class to hold a flickr size
2
+ #
3
+ class Flickr::Photos::Size
4
+ attr_accessor :label, :width, :height, :source, :url
5
+
6
+ # create a new instance of a flickr size.
7
+ #
8
+ # Params
9
+ # * attributes (Required)
10
+ # a hash of attributes used to set the initial values of the size object
11
+ def initialize(attributes)
12
+ attributes.each do |k,v|
13
+ send("#{k}=", v)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ # wrapper class to hold a flickr upload status object.
2
+ #
3
+ class Flickr::Uploader::Status
4
+ attr_accessor :nsid, :is_pro, :username, :max_bandwidth, :used_bandwidth, :remaining_bandwidth, :max_filesize, :max_videosize, :sets_created, :sets_remaining
5
+
6
+ # create a new instance of a flickr upload status object.
7
+ #
8
+ # Params
9
+ # * flickr (Required)
10
+ # the flickr object
11
+ # * attributes (Required)
12
+ # a hash of attributes used to set the initial values of the status object
13
+ def initialize(flickr, attributes)
14
+ @flickr = flickr
15
+ attributes.each do |k,v|
16
+ send("#{k}=", v)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,31 @@
1
+ class Flickr::Test
2
+ def initialize(flickr)
3
+ @flickr = flickr
4
+ end
5
+
6
+ # A testing method which checks if the caller is logged in then returns their username.
7
+ #
8
+ def login
9
+ rsp = @flickr.send_request('flickr.test.login')
10
+ rsp.user.username.to_s
11
+ end
12
+
13
+ # A testing method which echo's all parameters back in the response.
14
+ #
15
+ # pass any number of options as a hash and it will be returned
16
+ #
17
+ def echo(options = {})
18
+ rsp = @flickr.send_request('flickr.test.echo', options)
19
+
20
+ options
21
+ end
22
+
23
+ # Null test
24
+ #
25
+ # Returns true unless there is an error
26
+ #
27
+ def null
28
+ rsp = @flickr.send_request('flickr.test.null')
29
+ true
30
+ end
31
+ end
@@ -0,0 +1,22 @@
1
+ # wrapping class to hold a flickr size
2
+ #
3
+ class Flickr::Auth::Token
4
+ attr_accessor :token, :permisions, :user_id, :username, :user_real_name
5
+
6
+ # create a new instance of a flickr auth token.
7
+ #
8
+ # Params
9
+ # * attributes (Required)
10
+ # a hash of attributes used to set the initial values of the token object
11
+ def initialize(attributes)
12
+ attributes.each do |k,v|
13
+ send("#{k}=", v)
14
+ end
15
+ end
16
+
17
+ # overide the default to_s to output the text of the token
18
+ #
19
+ def to_s
20
+ self.token.to_s
21
+ end
22
+ end
@@ -0,0 +1,162 @@
1
+ class Flickr::Uploader < Flickr::Base
2
+ def initialize(flickr)
3
+ @flickr = flickr
4
+ end
5
+
6
+ # upload a photo to flickr
7
+ #
8
+ # Params
9
+ # * filename (Required)
10
+ # path to the file to upload
11
+ # * options (Optional)
12
+ # options to attach to the photo (See Below)
13
+ #
14
+ # Options
15
+ # * title (Optional)
16
+ # The title of the photo.
17
+ # * description (Optional)
18
+ # A description of the photo. May contain some limited HTML.
19
+ # * tags (Optional)
20
+ # A space-seperated list of tags to apply to the photo.
21
+ # * privacy (Optional)
22
+ # Specifies who can view the photo. valid valus are:
23
+ # :public
24
+ # :private
25
+ # :friends
26
+ # :family
27
+ # :friends_and_family
28
+ # * safety_level (Optional)
29
+ # sets the safety level of the photo. valid values are:
30
+ # :safe
31
+ # :moderate
32
+ # :restricted
33
+ # * content_type (Optional)
34
+ # tells what type of image you are uploading. valid values are:
35
+ # :photo
36
+ # :screenshot
37
+ # :other
38
+ # * hidden (Optional)
39
+ # boolean that determines if the photo shows up in global searches
40
+ #
41
+ def upload(filename, options = {})
42
+ upload_data(File.new(filename, 'rb').read, MIME::Types.of(filename), options.merge(:filename => filename))
43
+ end
44
+
45
+ # upload a photo to flickr
46
+ #
47
+ # Params
48
+ # * photo (Required)
49
+ # image stored in a variable
50
+ # * mimetype (Required)
51
+ # mime type of the image
52
+ # * options (Optional)
53
+ # see upload method
54
+ #
55
+ def upload_data(photo, mimetype, options = {})
56
+ filename = options.delete(:filename) || Time.now.to_s
57
+ options = upload_options(options)
58
+ @flickr.sign_request(options)
59
+
60
+ form = Flickr::Uploader::MultiPartForm.new
61
+
62
+ options.each do |k,v|
63
+ form.parts << Flickr::Uploader::FormPart.new(k.to_s, v.to_s)
64
+ end
65
+
66
+ form.parts << Flickr::Uploader::FormPart.new('photo', photo, mimetype, filename)
67
+
68
+ headers = {"Content-Type" => "multipart/form-data; boundary=" + form.boundary}
69
+
70
+ rsp = Net::HTTP.start('api.flickr.com').post("/services/upload/", form.to_s, headers).body
71
+
72
+ xm = XmlMagic.new(rsp)
73
+
74
+ if xm[:stat] == 'ok'
75
+ xm
76
+ else
77
+ raise "#{xm.err[:code]}: #{xm.err[:msg]}"
78
+ end
79
+ end
80
+
81
+ # Returns information for the calling user related to photo uploads.
82
+ #
83
+ # * Bandwidth and filesize numbers are provided in bytes.
84
+ # * Bandwidth is specified in bytes per month.
85
+ # * Pro accounts display 99 for the number of remaining sets, since they have unlimited sets. Free accounts will display either 3, 2, 1, or 0.
86
+ #
87
+ def status
88
+ rsp = @flickr.send_request('flickr.people.getUploadStatus')
89
+
90
+ Flickr::Uploader::Status.new(@flickr, :nsid => rsp.user[:id],
91
+ :is_pro => (rsp.user[:ispro] == "1" ? true : false),
92
+ :username => rsp.user.username.to_s,
93
+ :max_bandwidth => rsp.user.bandwidth[:maxbytes],
94
+ :used_bandwidth => rsp.user.bandwidth[:usedbytes],
95
+ :remaining_bandwidth => rsp.user.bandwidth[:remainingbytes],
96
+ :max_filesize => rsp.user.filesize[:maxbytes],
97
+ :max_videosize => rsp.user.videosize[:maxbytes],
98
+ :sets_created => rsp.user.sets[:created].to_i,
99
+ :sets_remaining => (rsp.user[:ispro] == "1" ? 99 : rsp.user.sets[:remaining].to_i))
100
+ end
101
+
102
+ protected
103
+
104
+ def upload_options(options)
105
+ upload_options = { :api_key => @flickr.api_key }
106
+ upload_options.merge!({:title => options[:title], :description => options[:description], :tags => options[:tags]})
107
+ [ :is_public, :is_friend, :is_family, :async ].each { |key| upload_options[key] = options[key] ? '1' : '0' }
108
+
109
+ upload_options[:safety_level] = case options[:safety_level]
110
+ when :safe then '1'
111
+ when :moderate then '2'
112
+ when :restricted then '3'
113
+ end if options.has_key?(:safety_level)
114
+
115
+ upload_options[:content_type] = case options[:content_type]
116
+ when :photo then '1'
117
+ when :screenshot then '2'
118
+ when :other then '3'
119
+ end if options.has_key?(:content_type)
120
+
121
+ upload_options[:hidden] = options.has_key?(:hidden) ? '2' : '1'
122
+ upload_options
123
+ end
124
+ end
125
+
126
+
127
+ class Flickr::Uploader::FormPart
128
+ attr_reader :data, :mime_type, :attributes, :filename
129
+
130
+ def initialize(name, data, mime_type = nil, filename = nil)
131
+ @attributes = {}
132
+ @attributes['name'] = name
133
+ @attributes['filename'] = filename if filename
134
+ @data = data
135
+ @mime_type = mime_type
136
+ @filename = filename
137
+ end
138
+
139
+ def to_s
140
+ ([ "Content-Disposition: form-data" ] +
141
+ attributes.map{|k,v| "#{k}=\"#{v}\""}).
142
+ join('; ') + "\r\n"+
143
+ (@mime_type ? "Content-Type: #{@mime_type}\r\n" : '')+
144
+ "\r\n#{data}"
145
+ end
146
+ end
147
+
148
+
149
+ class Flickr::Uploader::MultiPartForm
150
+ attr_accessor :boundary, :parts
151
+
152
+ def initialize(boundary=nil)
153
+ @boundary = boundary || "----------------------------Ruby#{rand(1000000000000)}"
154
+ @parts = []
155
+ end
156
+
157
+ def to_s
158
+ "--#@boundary\r\n" +
159
+ parts.map{|p| p.to_s}.join("\r\n--#@boundary\r\n")+
160
+ "\r\n--#@boundary--\r\n"
161
+ end
162
+ end
@@ -0,0 +1,25 @@
1
+ require 'rubygems'
2
+ require 'xml_magic'
3
+ require 'net/http'
4
+ require 'cgi'
5
+ require 'uri'
6
+ require 'mime/types'
7
+ require 'digest/md5'
8
+ require 'yaml'
9
+ require 'time'
10
+ require 'date'
11
+
12
+ # base must load first
13
+ %w(base test auth token photos photo photo_response comment note size uploader status people person license).each do |file|
14
+ require File.join(File.dirname(__FILE__), 'flickr', file)
15
+ end
16
+
17
+ include CommonThread::XML
18
+
19
+ class Object
20
+ # returning allows you to pass an object to a block that you can manipulate returning the manipulated object
21
+ def returning(value)
22
+ yield(value)
23
+ value
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: flickr_fu
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.6
5
+ platform: ruby
6
+ authors:
7
+ - Ben Wyrosdick
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-09-12 00:00:00 -05:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: mime-types
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: xml-magic
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.0.0
34
+ version:
35
+ description: Provides a ruby interface to flickr via the REST api
36
+ email: ben@commonthread.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - README
43
+ files:
44
+ - README
45
+ - LICENSE
46
+ - Rakefile
47
+ - flickr_fu.gemspec
48
+ - lib/flickr/auth.rb
49
+ - lib/flickr/base.rb
50
+ - lib/flickr/comment.rb
51
+ - lib/flickr/license.rb
52
+ - lib/flickr/note.rb
53
+ - lib/flickr/people.rb
54
+ - lib/flickr/person.rb
55
+ - lib/flickr/photo.rb
56
+ - lib/flickr/photo_response.rb
57
+ - lib/flickr/photos.rb
58
+ - lib/flickr/size.rb
59
+ - lib/flickr/status.rb
60
+ - lib/flickr/test.rb
61
+ - lib/flickr/token.rb
62
+ - lib/flickr/uploader.rb
63
+ - lib/flickr_fu.rb
64
+ has_rdoc: true
65
+ homepage: http://github.com/commonthread/flickr_fu
66
+ post_install_message:
67
+ rdoc_options:
68
+ - --main
69
+ - README
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: "0"
77
+ version:
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: "0"
83
+ version:
84
+ requirements: []
85
+
86
+ rubyforge_project:
87
+ rubygems_version: 1.2.0
88
+ signing_key:
89
+ specification_version: 2
90
+ summary: Provides a ruby interface to flickr via the REST api
91
+ test_files: []
92
+