flickr.rbをプロキシ対応にしたい。
rubyからFlickrをいじるためのラッパー flickr.rb をプロキシに対応させるよう、手をいれる。
環境変数 http_proxy が設定されているときは、強制的にプロキシ経由になる。
flickr.rbは↓から。
http://redgreenblu.com/flickr/
手をいれたものはflickr-proxy.rbという名称にして、
diff -Naru flickr.rb flickr-proxy.rb
としたもの。
--- flickr.rb 2005-07-06 20:40:42.230064000 +0900 +++ flickr-proxy.rb 2005-07-06 20:34:58.265467200 +0900 @@ -48,6 +48,11 @@ require 'net/http' require 'xmlsimple' +#yf +Net::HTTP.version_1_2 + +hoge, $http_proxy_host, $http_proxy_port = /\Ahttp:\/\/([^:\/]+):*(\d+[^\/])*\/*\Z/.match(ENV['http_proxy']).to_a + # Flickr client class. Requires an API key, and optionally takes an email and password for authentication class Flickr @@ -79,7 +84,9 @@ # Does an HTTP GET on a given URL and returns the response body def http_get(url) - Net::HTTP.get_response(URI.parse(url)).body.to_s +#yf +# Net::HTTP.get_response(URI.parse(url)).body.to_s + Net::HTTP::Proxy($http_proxy_host, $http_proxy_port.to_i).get_response(URI.parse(url)).body.to_s end # Stores authentication credentials to use on all subsequent calls. @@ -319,7 +326,9 @@ # Returns the photo file data itself, in any specified size. Example: File.open(photo.title, 'w') { |f| f.puts photo.file } def file(size='Medium') - Net::HTTP.get_response(URI.parse(source(size))).body +#yf +# Net::HTTP.get_response(URI.parse(source(size))).body + Net::HTTP::Proxy($http_proxy_host, $http_proxy_port.to_i).get_response(URI.parse(source(size))).body end # Unique filename for the image, based on the Flickr NSID
最初http_proxy_hostとhttp_proxy_portをグローバル変数にしてなくて、はまった。http_proxy_hostというメソッドがないからmissing_methodに戻ってって具合でスタックオーバーフローでした。
一番外で宣言してるからスコープ内だと思ったのに、違うのかなぁ。