私は次のようなURLを持っています:
http://www.relevantmagazine.com/life/relationship/blog/23317-pursuing-singleness
そして、そこから関連する雑誌だけを抽出したいと思います。
現在私は持っています:
@urlroot = URI.parse(@link.url).host
しかし、それはwww.relevantmagazine.comを返します誰か が私を助けることができますか?
これにgemを使用するのはやり過ぎかもしれませんが、とにかく:2つの要素のトップレベルドメインなどを処理しながら、サイト名を抽出できるdomainatrixと呼ばれる便利なgemがあります。
url = Domainatrix.parse("http://www.pauldix.net")
url.url # => "http://www.pauldix.net" (the original url)
url.public_suffix # => "net"
url.domain # => "pauldix"
url.canonical # => "net.pauldix"
url = Domainatrix.parse("http://foo.bar.pauldix.co.uk/asdf.html?q=arg")
url.public_suffix # => "co.uk"
url.domain # => "pauldix"
url.subdomain # => "foo.bar"
url.path # => "/asdf.html?q=arg"
url.canonical # => "uk.co.pauldix.bar.foo/asdf.html?q=arg"
どうですか
@urlroot = URI.parse(@ link.url).host.gsub( "www。"、 "").split( "。")[0]
この正規表現を試してください:
regex = %r{http://[w]*[\.]*[^/|$]*}
次のURL文字列がある場合、次のようになります。
url = 'http://www.google.com/?q=blah'
url.scan(regex) => ["http://www.google.com"]
url = 'http://google.com/?q=blah'
url.scan(regex) => ["http://google.com"]
url = 'http://google.com'
url.scan(regex) => ["http://google.com"]
url = 'http://foo.bar.pauldix.co.uk/asdf.html?q=arg'
url.scan(regex) => ["http://foo.bar.pauldix.co.uk"]
完璧ではありませんが、プレフィックスとホスト名以外はすべて削除されます。http://
次に、文字列の先頭または先頭を探すだけでよいことがわかっている他のコードを使用して、プレフィックスを簡単にクリーンアップできhttp://www.
ます。もう1つの考えは、解析も行う場合は、私が提供した正規表現を少し調整する必要があるかもしれないということですhttps://
。これがあなたが始めるのに役立つことを願っています!
編集:
私は質問を読み直しました、そして私の答えがあなたが尋ねたものを実際にしないことに気づきました。解析しているURLが常にwwwのように設定された形式になるかどうかを知っていると役立つかもしれません。含まれている場合は、URLの最初のピリオドと2番目のピリオドの間のすべてを抽出する正規表現を使用できます。そうでない場合は、おそらくあなたは私の正規表現を微調整して、/またはwwwの間のすべてになるようにすることができます。そして最初の期間。これは、wwwを使用せずにサイト名だけを取得する最も簡単な方法かもしれません。または.comや.au.ukなど。
改訂された正規表現:
regex = %r{http://[w]*[\.]*[^\.]*}
url = 'http://foo.bar.pauldix.co.uk/asdf.html?q=arg'
url.scan(regex) => ["http://foo"]
変になります。正規表現を使用する場合は、URLをクリーンアップして必要な部分を抽出するために、おそらく段階的に実行する必要があります。
多分あなたはそれを分割することができますか?
URI.parse(@link.url).host.split('.')[1]
.co.uk
一部の登録済みドメインには、または.co.jp
などのように、登録済み国ドメインに複数のコンポーネントが含まれている場合があることに注意してください.com.au
。
タッドマンの答えと別の質問の答えに触発された答えを見つけました
@urlroot = URI.parse(item.url).host
@urlroot = @urlroot.start_with?('www.') ? @urlroot[4..-1] : @urlroot
@urlroot = @urlroot.split('.')[0]
最初の行はホストを取得し、2番目の行はwwwを削除します。それらが1行目で3行目である場合は、次のドットの前にすべてを取得します。