Class: Flickr::Upload
Instance Attribute Summary
Attributes inherited from APIBase
Instance Method Summary collapse
- #checkTickets(tickets) ⇒ Object
-
#error(el) ⇒ Object
TODO: It would probably be better if we wrapped the fault in something more meaningful.
- #make_signature(title = nil, description = nil, tags = nil, is_public = nil, is_friend = nil, is_family = nil, async = nil) ⇒ Object
- #prepare_parts(data, mimetype, filename, title = nil, description = nil, tags = nil, is_public = nil, is_friend = nil, is_family = nil, sig = nil, async = nil) ⇒ Object
- #send_form(form) ⇒ Object
- #upload_file(filename, title = nil, description = nil, tags = nil, is_public = nil, is_friend = nil, is_family = nil) ⇒ Object
- #upload_file_async(filename, title = nil, description = nil, tags = nil, is_public = nil, is_friend = nil, is_family = nil) ⇒ Object
- #upload_image(data, mimetype, filename, title = nil, description = nil, tags = nil, is_public = nil, is_friend = nil, is_family = nil) ⇒ Object
- #upload_image_async(data, mimetype, filename, title = nil, description = nil, tags = nil, is_public = nil, is_friend = nil, is_family = nil) ⇒ Object
Methods inherited from APIBase
Constructor Details
This class inherits a constructor from Flickr::APIBase
Instance Method Details
#checkTickets(tickets) ⇒ Object
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
# File 'lib/flickr/upload.rb', line 184 def checkTickets(tickets) tickets = [tickets] if tickets.class != Array targ = tickets.map{|t| t.id.to_s if t.class == Flickr::Ticket }.join(',') res = @flickr.call_method('flickr.photos.upload.checkTickets', 'tickets' => targ) tickets = [] res.elements['/uploader'].each_element('ticket') do |tick| att = tick.attributes tid = att['id'] t = @flickr.ticket_cache_lookup(tid) || Flickr::Ticket.new(tid,self) t.complete = Flickr::Ticket::COMPLETE[att['complete'].to_i] t.photoid = att['photoid'] t.invalid = true if (att['invalid'] && (att['invalid'].to_i == 1)) @flickr.ticket_cache_store(t) tickets << t end return tickets end |
#error(el) ⇒ Object
TODO: It would probably be better if we wrapped the fault in something more meaningful. At the very least, a broad division of errors, such as retryable and fatal.
65 66 67 68 69 70 71 |
# File 'lib/flickr/upload.rb', line 65 def error(el) att = el.attributes fe = XMLRPC::FaultException.new(att['code'].to_i, att['msg']) $stderr.puts "ERR: #{fe.faultString} (#{fe.faultCode})" raise fe end |
#make_signature(title = nil, description = nil, tags = nil, is_public = nil, is_friend = nil, is_family = nil, async = nil) ⇒ Object
100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/flickr/upload.rb', line 100 def make_signature(title=nil,description=nil, =nil, is_public=nil,is_friend=nil,is_family=nil,async=nil) args = {'api_key' => @flickr.api_key, 'auth_token' => @flickr.auth.token.token} args['title'] = title if title args['description'] = description if description args['tags'] = .join(',') if args['is_public'] = (is_public ? '1' : '0') if is_public != nil args['is_friend'] = (is_friend ? '1' : '0') if is_friend != nil args['is_family'] = (is_family ? '1' : '0') if is_family != nil args['async'] = (async ? '1' : '0') if async != nil args['api_sig'] = @flickr.sign(args) end |
#prepare_parts(data, mimetype, filename, title = nil, description = nil, tags = nil, is_public = nil, is_friend = nil, is_family = nil, sig = nil, async = nil) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/flickr/upload.rb', line 73 def prepare_parts(data,mimetype,filename,title=nil,description=nil, =nil, is_public=nil,is_friend=nil,is_family=nil, sig=nil, async=nil) parts = [] parts << Flickr::FormPart.new('title',title) if title parts << Flickr::FormPart.new('description',description) if description parts << Flickr::FormPart.new('tags',.join(',')) if parts << Flickr::FormPart.new('is_public', is_public ? '1' : '0') if is_public != nil parts << Flickr::FormPart.new('is_friend', is_friend ? '1' : '0') if is_friend != nil parts << Flickr::FormPart.new('is_family', is_family ? '1' : '0') if is_family != nil parts << Flickr::FormPart.new('async', async ? '1' : '0') if async != nil parts << Flickr::FormPart.new('api_key',@flickr.api_key) parts << Flickr::FormPart.new('auth_token', @flickr.auth.token.token) parts << Flickr::FormPart.new('api_sig',sig) parts << Flickr::FormPart.new('photo',data,mimetype) parts.last.attributes['filename'] = filename return parts end |
#send_form(form) ⇒ Object
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/flickr/upload.rb', line 114 def send_form(form) headers = {"Content-Type" => "multipart/form-data; boundary=" + form.boundary} http = Net::HTTP.new('www.flickr.com', 80) # http.read_timeout = 900 # 15 minutes max upload time tries = 3 begin res=http.post('/services/upload/',form.to_s,headers) rescue Timeout::Error => err tries -= 1 $stderr.puts "Timed out, will retry #{tries} more." retry if tries > 0 raise err end return res end |
#upload_file(filename, title = nil, description = nil, tags = nil, is_public = nil, is_friend = nil, is_family = nil) ⇒ Object
143 144 145 146 147 148 149 150 151 |
# File 'lib/flickr/upload.rb', line 143 def upload_file(filename,title=nil,description=nil,=nil, is_public=nil,is_friend=nil,is_family=nil) mt = MIME::Types.of(filename) f = File.open(filename,'rb') data = f.read f.close return upload_image(data,mt,filename,title,description,, is_public,is_friend,is_family) end |
#upload_file_async(filename, title = nil, description = nil, tags = nil, is_public = nil, is_friend = nil, is_family = nil) ⇒ Object
132 133 134 135 136 137 138 139 140 |
# File 'lib/flickr/upload.rb', line 132 def upload_file_async(filename,title=nil,description=nil,=nil, is_public=nil,is_friend=nil,is_family=nil) mt = MIME::Types.of(filename) f = File.open(filename,'rb') data = f.read f.close return upload_image_async(data,mt,filename,title,description, , is_public,is_friend,is_family) end |
#upload_image(data, mimetype, filename, title = nil, description = nil, tags = nil, is_public = nil, is_friend = nil, is_family = nil) ⇒ Object
169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/flickr/upload.rb', line 169 def upload_image(data,mimetype,filename,title=nil,description=nil, =nil, is_public=nil,is_friend=nil,is_family=nil) form = Flickr::MultiPartForm.new sig = make_signature(title,description, , is_public, is_friend, is_family) form.parts += prepare_parts(data,mimetype,filename,title, description, , is_public, is_friend, is_family, sig) res = REXML::Document.new(send_form(form).body) error(res.elements['/rsp/err']) if res.elements['/rsp/err'] val = res.elements['/rsp/photoid'].text return val end |
#upload_image_async(data, mimetype, filename, title = nil, description = nil, tags = nil, is_public = nil, is_friend = nil, is_family = nil) ⇒ Object
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/flickr/upload.rb', line 153 def upload_image_async(data,mimetype,filename,title=nil,description=nil, =nil, is_public=nil,is_friend=nil,is_family=nil) form = Flickr::MultiPartForm.new sig = make_signature(title,description, , is_public, is_friend, is_family, true) form.parts += prepare_parts(data,mimetype,filename,title, description, , is_public, is_friend, is_family, sig, true) res = REXML::Document.new(send_form(form).body) error(res.elements['/rsp/err']) if res.elements['/rsp/err'] t = Flickr::Ticket.new(res.elements['/rsp/ticketid'].text, self) @flickr.ticket_cache_store(t) return t end |