>> 古い記事: Emacs: shell-mode で日本語が文字化けする場合の対処法
<< 新しい記事: JavaScript: canvas で点線・破線を描くためのライブラリを作ってみた

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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

ちなみに、「コードの世界」第6章に「オープンクラスとモンキーパッチング」という節があり、 「モンキーパッチングの目的」「モンキーパッチング技法」「モンキーパッチングの問題点」などについて解説されています。

まつもとゆきひろ コードの世界~スーパー・プログラマになる14の思考法
まつもとゆきひろ コードの世界~スーパー・プログラマになる14の思考法まつもとゆきひろ 日経Linux

日経BP出版センター 2009-05-21
売り上げランキング : 39923

おすすめ平均 star
starRuby使い向けの教養書
starタイトルを鵜呑みにしてしまいました
starDRY?

Amazonで詳しく見る
by G-Tools

>> 古い記事: Emacs: shell-mode で日本語が文字化けする場合の対処法
<< 新しい記事: JavaScript: canvas で点線・破線を描くためのライブラリを作ってみた
** ホームに戻る

コメント

コメントの投稿

管理者にだけ表示を許可する

|
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。