読者です 読者をやめる 読者になる 読者になる

ほろ酔い開発日誌

有意義な技術的Tipsを共有出来たら嬉しいです。Ruby、Railsが好きです。Web開発全般(Rails多め、フロント、サーバー、インフラ)、データ分析、機械学習あたりの記事が中心になる予定です。

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