Ruby: scrobbler の文字化けにモンキーパッチングで対処してみた
A monkey patching for scrobbler mojibake.
以前適当に書いたのを掘り出してあまり見直さずに貼ってみます。
このコードに続けて scrobbler を使った処理を書くか、 別ファイルに分けて require して使います。
require "rubygems"
require "scrobbler"
require "cgi"
module Scrobbler
module REST
class Connection
MULTIBYTE_CHAR = true
def request(resource, method = "get", args = nil)
url = URI.join(@base_url, resource)
temp_url = url.request_uri
temp_query = ""
if args
temp_query = args.map { |k,v|
if MULTIBYTE_CHAR
"%s=%s" % [k.to_s, CGI.escape(v.to_s)]
else
"%s=%s" % [escape(k.to_s), escape(v.to_s)]
end
}.join("&")
url.query = temp_query if MULTIBYTE_CHAR
end
req = case method
when "get"
if MULTIBYTE_CHAR
Net::HTTP::Get.new(temp_url)
else
Net::HTTP::Get.new(url.request_uri)
end
when "post"
if MULTIBYTE_CHAR
Net::HTTP::Post.new(temp_url)
else
Net::HTTP::Post.new(url.request_uri)
end
end
if @username and @password
req.basic_auth(@username, @password)
end
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = (url.port == 443)
res = if MULTIBYTE_CHAR
http.post(temp_url, temp_query)
else
http.start() { |conn| conn.request(req) }
end
res.body
end
private
def escape(str)
URI.escape(str, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
end
end
end
end
- 2009/11/16
- | tag: Ruby
- | trackback: 0
- | comment: 0
-
|