忘れたときに備えた記録

トップ «前の日記(2008-08-30(Saturday)) 最新 次の日記(2008-09-09(Tuesday))» 編集
2005|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|11|12|
2009|01|02|03|04|05|06|10|12|
2010|06|07|08|12|
2011|07|09|
2012|09|11|
2013|02|03|09|
2015|10|11|
2016|01|08|11|
2017|02|08|10|
2018|11|
2020|03|

2008-09-06(Saturday)

lax_uri.rb - uriライブラリの制限緩い版

RubyのuriライブラリはRFC2396等に忠実なので、ホスト名に'_'を含むURIを処理せず例外を投げてしまいます。

具体的には

といったページを、uriライブラリを使うopen-uriでダウンロード出来ないわけです (っていうか、よく見たらどっちもinfoseek.co.jpのドメインだな。諸悪の根源はinfoseekか)。

まあとにかく、それで以前は、勉強もかねてメソッドを自作してopen-uriの代わりに使ったりしていました。

ところが最近、Mechanizeを使い始めたのですが、これがuriライブラリを使っているため、ホスト名に'_'を含むURIのページをダウンロードしたりできません。

それでとうとう、uriライブラリをオーバーライドしてホスト名に'_'を含むURIを処理できるようにしました。Malagmaに置いてあります。

こんな風に使うと

#!/usr/bin/ruby
uri = "http://foo_bar.org/"

require "uri"
begin
   puts "--- uri ---"
   puts URI.parse(uri)
rescue
   puts $!.message
end

require "lax_uri"
puts "--- lax_uri ---"
puts URI.parse(uri)

こんな感じで、きちんと(?)'_'付きのホスト名も処理してくれます。

--- uri ---
the scheme http does not accept registry part: foo_bar.org (or bad hostname?)
--- lax_uri ---
http://foo_bar.org/

Mechanizeを使うときも、あらかじめrequireしておけば問題なく'_'付きURIからページをダウンロード出来ます(mechanizeとのrequire順は不問)。

#!/usr/bin/ruby
require "rubygems"
require "mechanize"
require "lax_uri"

m = WWW::Mechanize.new
m.get("http://foo_bar.example.org/")
puts m.page.body
Tags: Ruby
本日のツッコミ(全4件) [ツッコミを入れる]
_ かずひこ (2008-09-09(Tuesday) 03:10)

やまだあきらさんが、たぶん似たことをしていると思いますが、いかがでしょうか?<br>ttp://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/35794

_ ひらく (2008-09-09(Tuesday) 14:48)

おお、ありがとうございます。すっかり見落としていました。<br>Rubyへのパッチとしてはあちらの方が理想的ですねぇ。取り込まれないかしらん

_ かずひこ (2008-09-09(Tuesday) 18:53)

じゃあ、ぜひMLで応援の一票を入れるのがいいのではないでしょうか? :)

_ ひらく (2008-09-10(Wednesday) 03:07)

一票投じてみました!!取り込まれたら嬉しいですねぇ

[]