uri からパス以外の部分を取り出したい。つまりホスト部分を取り出したい。
http://d.hatena.ne.jp/takuya_1st/2010-11-29/ http://d.hatena.ne.jp/takuya_1st/2010-11-29/p1
から↓
http://d.hatena.ne.jp/takuya_1st/
を取り出したい
一般的なURL::HTTPも扱いたい。
特定パスのより上を取り出したい。
http://user:passwd@localhost:port/path/to/file
↓こうしたい。
http://user:passwd@localhost:port/
のパス部分を除いてホスト部分だけを取り出したい。
String#split が便利です。
URIモジュール使うまでもない。
"http://d.hatena.ne.jp/takuya_1st/".split('/').first(3).join('/') =>"http://d.hatena.ne.jp
なんて便利なツールなんだ。Rubyは。
上位2階層までなら
"http://d.hatena.ne.jp/takuya_1st/2010-11-29/p1".split('/').first(5).join('/') =>"http://d.hatena.ne.jp/takuya_1st/2010-11-29"
おおお楽ちん。
URIモジュール不便。。
ちなみにURIモジュールを使うとすごく面倒。。
u=URI.parse("http://d.hatena.ne.jp/takuya_1st/") URI::HTTP.build([ u.userinfo,u.host,u.port,nil,nil,nil ]) # => #<URI::HTTP:0x480d190 URL:http://d.hatena.ne.jp> # #すこし簡単に u.to_s.split(u.path).first # => "http://d.hatena.ne.jp" #このアプローチは、いろいろ面倒だった。 puts "#{u.scheme}://#{u.userinfo}@#{u.host}:#{u.port}"
URIのパス区切りは"/"と決まっているので、それをString#splitに指定してやる。これはRubyに限らず他の言語でも。
"/" がQueryに入っている可能性もあるが、左から見て行くのなら、全然問題ない。