ほろ酔い開発日誌

AI企業のエンジニアのブログです。機械学習、Web開発の技術的お話、ビジネスチックなお話、日常のお役立ち情報など雑多な内容でお送りします。

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の扱い」でした。