RubyでURLパラメーターの値を取得する方法 | Addressableを利用して取得する
最終更新日:
この記事では、Rubyを用いて、以下のようなURLから、特定のパラメーターの値を取得する方法について記載します。
# idとempidを取得する
url = 'http://www.example.com?id=4&empid=6'
結論、以下のように取得可能です。
url = Addressable::URI.parse('http://www.example.com?id=4&empid=6')
url.query_values # {"id"=>"4", "empid"=>"6"}
目次 (PRも含まれます)
環境
rails -v
Rails 7.0.4
ruby -v
ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]
RubyでURLパラメーターを取得する方法
Rubyでは、URLを取得するライブラリに、以下のようなものがあります。
AddressableはURIの後継だそうです。
URLとAddressableがありますが、個人的にはURLパラメーターの取り扱いがAdderssableの方が体験としてよかったため、Addressableを利用して、以下の値を取得する方法について見ていきます。
※詳しくはAddressableのGithubに詳しい解説が書いてあるため、参照してください。
https://github.com/sporkmonger/addressable
Gem Addressableのインストール
まず、AddressableのGemをインストールします。
$ gem install addressable
URLパラメーターの取得
次に、
- id
- empid
の取得をしていきます。
URLをパースした値に対して、query_values
メソッドを呼ぶことで、ハッシュ形式でURLパラメーターを取得してくれます。
url = Addressable::URI.parse('http://www.example.com?id=4&empid=6')
# query_valuesを利用すると、ハッシュでURLパラメーターを取得してくれる
url.query_values # {"id"=>"4", "empid"=>"6"}
非常に簡単でした。
スキーマの取得
URLから、
- http
- https
などの値を取得したい場合は、schema
を指定することで取得可能です。
uri = Addressable::URI.parse("http://example.com/path/to/resource/")
uri.scheme
#=> "http"
ドメインの取得
URLから、
- example.com
の値を取得したい場合は、host
を指定することで取得可能です。
uri = Addressable::URI.parse("http://example.com/path/to/resource/")
uri.host
#=> "example.com"
相対パスの取得
URLから、
- /path/to/resource/
を取得したい場合、path
を指定することで取得できます。
uri = Addressable::URI.parse("http://example.com/path/to/resource/")
uri.path
#=> "/path/to/resource/"
備考:URIとの比較
URIでも同じようなことを行うことができるのですが、個人的にはAddressableの方がURLパラメーターの取得が楽でした。
参考までにURIのGithubのサンプルコードを掲載しておきます。
URI:
https://github.com/ruby/uri
require "uri"
uri = URI("http://foo.com/posts?id=30&limit=5#time=1305298413")
#=> #<URI::HTTP http://foo.com/posts?id=30&limit=5#time=1305298413>
uri.scheme #=> "http" #スキーマの取得
uri.host #=> "foo.com" #ドメインの取得
uri.path #=> "/posts" #パスの取得
uri.query #=> "id=30&limit=5" #URLパラメーターの取得
uri.fragment #=> "time=1305298413"
参考
- https://stackoverflow.com/questions/7316656/how-to-get-a-query-string-from-a-url-in-rails
- https://github.com/sporkmonger/addressable