こんにちは!kossyです!
今回はURIを簡単に扱えるGem「addressable」Gemの使い方について、ブログに残してみたいと思います。
環境
Ruby 2.6.6
addressable 2.7.0
基本的な使い方
$ url = "https://www.yahoo.co.jp/" => "https://www.yahoo.co.jp/" $ uri = Addressable::URI.parse(url) => #<Addressable::URI:0x2ab0974eb32c URI:https://www.yahoo.co.jp/> # URIクラスのインスタンスメソッドの数 $ URI.parse(url).methods.size => 146 # Addressable::URIクラスのインスタンスメソッドの数 $ uri.methods.size => 164 $ uri.scheme => "https" $ uri.host => "www.yahoo.co.jp" $ uri.path => "/" # Ruby標準のURIクラスには定義されてない $ uri.domain => "yahoo.co.jp" # Ruby標準のURIクラスには定義されてない $ uri.origin => "https://www.yahoo.co.jp"
インスタンスメソッドの数はAddressable::URIクラスの方が多かったです。
domainやoriginといったメソッドはAddressable::URI独自のメソッドのようです。
queryを操作する
$ url = "https://news.yahoo.co.jp/search?p=%E3%82%B3%E3%83%AD%E3%83%8A&ei=utf-8" => "https://news.yahoo.co.jp/search?p=%E3%82%B3%E3%83%AD%E3%83%8A&ei=utf-8" $ uri = Addressable::URI.parse(url) => #<Addressable::URI:0x3fad86027a4c URI:https://news.yahoo.co.jp/search?p=%E3%82%B3%E3%83%AD%E3%83%8A&ei=utf-8> $ uri.query => "p=%E3%82%B3%E3%83%AD%E3%83%8A&ei=utf-8" # クエリ文字列を取得する $ uri.query_values => {"p"=>"コロナ", "ei"=>"utf-8"} # クエリ文字列を全クリアする $ uri.query_values = nil => nil $ uri => #<Addressable::URI:0x3fad86027a4c URI:https://news.yahoo.co.jp/search>
フラグメントを取得する
fragmentメソッドを使うと#以下のフラグを取得することができます。
$ url = "https://news.yahoo.co.jp/search?p=%E3%82%B3%E3%83%AD%E3%83%8A&ei=utf-8#flag" => "https://news.yahoo.co.jp/search?p=%E3%82%B3%E3%83%AD%E3%83%8A&ei=utf-8#flag" $ uri = Addressable::URI.parse(url) => #<Addressable::URI:0x2ab097388f84 URI:https://news.yahoo.co.jp/search?p=%E3%82%B3%E3%83%AD%E3%83%8A&ei=utf-8#flag> $ uri.fragment => "flag"
まとめ
調査したところ日本語のURIにも対応できるみたいです。
Rubyは便利ライブラリがたくさんあって良きですね。
大いに参考にさせていただいた記事
この場を借りてお礼を申し上げます。
RubyでAddressable gemを使ってURIの取り扱いを楽にしよう | class Techブログ
rubyでドメインの扱いを幸せにするための記事 - Qiita
Rubyで日本語のURI(URL)をパーズするなら Addressable::URI を使おう - Qiita