ほろ酔い開発日誌

Web開発、機械学習を中心とした技術を発信するブログです。Web開発はサーバー・インフラ周り、機械学習は特にComputer Visioin系が好きです。ただし、記事の内容はそういった内容に限定はせず、ビジネス的考察や技術外のエンジニア周りの話題等を含みます。

Ruby URL文字列を扱う方法

最近スクレイピングでURLを取得してきたのですが、絶対パスになっていたり相対パスになっていたり統一感がなくて困ったのでちょっとURLを変更してみようと思います。

相対パス絶対パスに変える

news_path = "http://hoge.com/news/"
entry_path = "/entry/121"

こんなURLがあったとして

absolute_entry_path = "http://hoge.com/entry/121"

がほしいとします。

はじめは

標準ライブラリの uri を使って

news_uri = URI.parse(news_path)
host = news_uri.host
ablosute_entry_path = host + entry_path

のような感じでいいかと思ったのですが、もっと楽なやり方もありました。

absolute_entry_path = URI.join(news_path, entry_path).to_s

これだけ!楽! 便利なメソッドがあるものですね!

URLのqueryを扱う

news_path = "http://hoge.com/news?date=20160430&site=newssite&hash=hogepoge"

みたいになんか無駄にqueryくっついていてこれどうにかしたいなーと思ったら、どうにかするやつありました。 queryのキーが hash となるものだけ削除します。

こちらのgemを使います。 sporkmonger/addressable

gem install addressable
require "addressable/uri"

parsed_url = Addressable::URI.parse(news_path)
query = parsed_url.query_values # queryのhashが出来る。
query.delete("hash")
parsed_url.query_values = query # hashを消したqueryを設定する
parsed_url.to_s
# => "http://hoge.com/news?date=20160430&site=newssite"

いい感じにqueryを変更出来ました!

以上、「絶対パス相対パスの扱い」と「queryの扱い」でした。