From: UTUMI Hirosi Date: 2007-11-05T17:10:33+09:00 Subject: [ruby-dev:32168] Can't use "|" in open-uri 内海と申します。はじめまして。 open-uri で使用する文字列に "|" が含まれていると、 bad URI と表示されて終了してしまいます。 私は Yahoo!デベロッパーネットワークの 「日本語形態素解析Webサービス」を利用しているのですが、 この中では URL に "|" を使用するケースがあります。 http://developer.yahoo.co.jp/jlp/MAService/V1/parse.html 例えば「テストです」という文章を解析して 名詞と助動詞を取り出す場合は、 次の URL をリクエストすることになります。 http://api.jlp.yahoo.co.jp/MAService/V1/parse?appid=YahooDemo&results=ma&filter =9|12&sentence=テストです "filter=9|12" のところで "|" を使っています。 対処法を検索したところ、次のような記述がありました。 http://www.adamrocker.com/blog/120/ruby_open_uri_parser_error.html // どうやらopen-uriのURIのパースにはURIライブラリを利用しているとの事。 ということで、URIライブラリのソースを眺めてみました。 するとuri/common.rbの39行目に以下の記述がありました。 RESERVED = ";/?:@&=+$,??[??]" # 内海注: ruby 1.8.6-p111 では次のようになっています。 # RESERVED = ";/?:@&=+$,\\[\\]" これはURIをパースする時に予約語となる文字列集合なのですが、 ここに「|」が含まれていない。 なるほど、これはパースできません。 ということで、この部分を以下のように変更してみました。 RESERVED = "|;/?:@&=+$,??[??]" # 内海注: ruby 1.8.6-p111 では次のようになる。 # RESERVED = "|;/?:@&=+$,\\[\\]" 「|」を追加しています。 これで実行したらうまく動きました。 // 私の環境でもこれでうまく動作しています。 アマゾンのWeb APIを使ってOR検索する場合にも "|" を使うそうです。 お手数をお掛けしますが修正していただけましたら幸いです。 -------------------------------------- Easy + Joy + Powerful = Yahoo! Bookmarks x Toolbar http://pr.mail.yahoo.co.jp/toolbar/