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.
- data/LICENSE +22 -0
- data/README +110 -0
- data/Rakefile +22 -0
- data/flickr_fu.gemspec +35 -0
- data/lib/flickr/auth.rb +69 -0
- data/lib/flickr/base.rb +102 -0
- data/lib/flickr/comment.rb +16 -0
- data/lib/flickr/license.rb +14 -0
- data/lib/flickr/note.rb +16 -0
- data/lib/flickr/people.rb +54 -0
- data/lib/flickr/person.rb +82 -0
- data/lib/flickr/photo.rb +298 -0
- data/lib/flickr/photo_response.rb +37 -0
- data/lib/flickr/photos.rb +228 -0
- data/lib/flickr/size.rb +16 -0
- data/lib/flickr/status.rb +19 -0
- data/lib/flickr/test.rb +31 -0
- data/lib/flickr/token.rb +22 -0
- data/lib/flickr/uploader.rb +162 -0
- data/lib/flickr_fu.rb +25 -0
- metadata +92 -0
data/lib/flickr/size.rb
ADDED
@@ -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
|
data/lib/flickr/test.rb
ADDED
@@ -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
|
data/lib/flickr/token.rb
ADDED
@@ -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
|
data/lib/flickr_fu.rb
ADDED
@@ -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
|
+
|