Sha256: bb4dea1142215943eec9be006c4b4ad39a2dd5c901a4938822b013131c74fa6e
Contents?: true
Size: 1.61 KB
Versions: 1
Compression:
Stored size: 1.61 KB
Contents
require 'net/http' require 'json' ### # Stupid simple class for uploading to imgur. # # client = Imgur2.new 'my imgur key' # p File.open(ARGV[0], 'rb') { |f| # client.upload f # } class Imgur2 < Struct.new(:key) VERSION = '1.1.0' def self.run argv client = Imgur2.new '65aea9a07b4f6110c90248ffa247d41a' fh = argv[0] ? File.open(argv[0], 'rb') : $stdin link = client.upload(fh)['upload']['links']['original'] link = client.follow_redirect link client.paste link puts link ensure fh.close end def upload io url = URI.parse 'http://api.imgur.com/2/upload.json' JSON.parse Net::HTTP.start(url.host) { |http| post = Net::HTTP::Post.new url.path post.set_form_data('key' => key, 'image' => [io.read].pack('m'), 'type' => 'base64') http.request(post).body } end def follow_redirect url follower = lambda do |uri, depth| raise "too many redirects" if depth > 3 parsed = URI.parse uri resp = Net::HTTP.start(parsed.host) { |http| head = Net::HTTP::Head.new parsed.path http.request head } if Net::HTTPRedirection === resp follower.call resp['Location'], depth + 1 else uri end end follower.call url, 0 end ## # Tries to find clipboard copy executable and if found puts +link+ in your # clipboard. def paste link clipboard = %w{ /usr/bin/pbcopy /usr/bin/xclip }.find { |path| File.exist? path } if clipboard IO.popen clipboard, 'w' do |io| io.write link end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
imgur2-1.1.0 | lib/imgur2.rb |