ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Rubyコミュのhttpリクエストに関する質問

  • mixiチェック
  • このエントリーをはてなブックマークに追加
httpのクエリに地名(日本語、英語ともに可)を入れると緯度経度をxmlで返してくれる
APIがあります。

以下のrubyのコードでxmlを取得しようとしているのですが、
どうもうまくいきません。

require 'open-uri'


address = "東京"
address1 = CGI.escapeHTML(address)

sio = OpenURI.open_uri(" http://api.knecht.jp/geocoding/api/?q=#{address1}",{ :proxy => "http://proxy-server.example.jp:8080/" })
puts sio.read


<エラー文>
c:/ruby/lib/ruby/1.8/uri/common.rb:432:in `split': bad URI(is not URI?): http://api.knecht.jp/geocoding/api/?q=東京 (URI::InvalidURIError)
from c:/ruby/lib/ruby/1.8/uri/common.rb:481:in `parse'
from c:/ruby/lib/ruby/1.8/open- uri.rb:122:in `open_uri'
from C:/DOCUME~1/a142980/LOCALS~1/Temp/rb59.tmp:10
Completed(1)


"東京"が直接渡されてしまっているようで、%93%8C%8B%9Eこんな文字に
変換されていないようです。

なにかいい対策を教えてください。お願いします。

コメント(6)

URI.encode()でしょうか。

文字コードを展開しているだけなので自前で書いてもそんなに大変ではありませんが。
sio = OpenURI.open_uri(" http
の行で、httpの前に空白が1個入っているのでuri/commonでパーズエラーになっています。
東京のエンコードについてはshachiさんが書かれている方法か、または
CGI.escape(address)
で。
あと、エラーになったスクリプトをそのまま提示するのは良いことなのですが、proxyの設定は削っておいたほうが良いと思います。
ためしてみたら、CP932のまま(%93%8C%8B%9E)でもレスポンスを得られますね。
>shachiさん

ありがとうございます。
おっしゃるとおりです。

address = "東京"
address1 = CGI.escape(address)

みたいな感じで変換して、
"http://api.knecht.jp/geocoding/api/?q=#{address1} "
こんな感じで埋め込めば、いけました。

漢字の文字コード変換、確かに必要ですよね。
アドバイスありがとうございます。


>shig さん

お返事ありがとうございます。
URI.encode()もCGI.escape()も機能としては同じもののようですね。


>artonsさん

お返事ありがとうございます。

空白気づきました。
proxyはまずいですよね。即消しておきます。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Ruby 更新情報

Rubyのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング