2017-09-12 9 views
-1

入力=>予想される出力ルビーのhttp(s)、www(n)、およびpublicサフィックスを削除するにはどうすればよいですか?

  1. https://mail.google.com.au =>mail.google
  2. http://www.google.in =>google
  3. https://www9.calendar.google.co.uk =>calendar.google
  4. https://www12.stage.calendar.google.co.uk =>stage.calendar.google
  5. www.blog.botreetechnologies.com =>blog.botreetechnologies

更新

t = URI.parse 'http://www.google.com' 
t.host 
#=> "www.google.com" 

URI.split 'http://www.google.com' 
#=> ["http", nil, "www.google.com", nil, nil, "", nil, nil, nil] 
uri = URI.parse("http://www.google.co.uk") 
#=> #<URI::HTTP http://www.google.co.uk> 
domain = PublicSuffix.parse(uri.host) 
#=> #<PublicSuffix::Domain:0x00000003c538e0 @sld="google", @tld="co.uk", @trd="www"> 
domain.sld 
#=> "google" 

uri = URI.parse("http://www.mail.google.co.uk") 
#=> #<URI::HTTP http://www.mail.google.co.uk> 
domain = PublicSuffix.parse(uri.host) 
#=> #<PublicSuffix::Domain:0x00000002e97bc0 @sld="google", @tld="co.uk", @trd="www.mail"> 
domain.sld 
#=> "google" 

%w[http://www.example.com/page http://blog.example.com/page].each do |u| 
    puts URI.parse(u).host.sub(/^www\./, '') 
end 
# example.com 
# blog.example.com 

uri = URI.parse("www.pinkpoodles.com.au") 
#=> #<URI::Generic www.pinkpoodles.com.au> 
uri.host 
#=> nil 
+3

何か試しましたか? –

+1

[publicsuffix-ruby](https://github.com/weppos/publicsuffix-ruby)は、公開されている接尾辞を削除するのに役立ちます。 – Stefan

+0

@Зелёный私は何を試してポストを更新します。私は迅速なシングルラインソリューションを探していた –

答えて

0

ここで私はそれをどのように修正しましたか。つま先で素早くペーストする

def filename(website_domain) 
    domain = website_domain.starts_with?('http') ? website_domain : "https://#{website_domain}" 
    uri = URI.parse domain 
    suffix = PublicSuffix.parse(uri.host) 
    name = uri.host.sub(/^www\d*\./i, '').sub(/\.#{suffix.tld}/, '') 
    "#{name}.filtered.xml" 
end 
1

私は "ワンライナー" を考えることはできませんが、このようなものは動作します:

require 'uri' 
require 'public_suffix' 

def simple_host(uri) 
    uri = URI(uri) 
    uri = URI("http://#{uri}") unless uri.scheme 
    domain = PublicSuffix.parse(uri.host) 
    trd = domain.trd 
    if trd 
    trd = trd.split('.') 
    trd.shift if trd.first.start_with?('www') 
    end 
    [*trd, domain.sld].join('.') 
end 

simple_host('https://mail.google.com.au')    #=> "mail.google" 
simple_host('http://www.google.in')      #=> "google" 
simple_host('https://www9.calendar.google.co.uk')  #=> "calendar.google" 
simple_host('https://www12.stage.calendar.google.co.uk') #=> "stage.calendar.google" 
simple_host('www.blog.botreetechnologies.com')   #=> "blog.botreetechnologies" 
0

ない1つのラインの仕事。しかし、ここでは、少なくともあなたが提供したテストケースを満たす文字列操作を行う関数があります。

def foo(url) 
    url = url.split("//").last.split(".") 
    url = url.each do |word| 
    if word.include?("http") || word.include?("www") || word.length < 3 
     url.delete(word) 
    end 
    end 
    if url.length > 1 
    if url.length >= 3 && url[2].length > 3 
     url = [url[0], url[1], url[2]].join('.') 
    else 
     url = [url[0], url[1]].join(".") 
    end 
    else 
    url = url.first 
    end 
end 

foo 'http://www.google.in' 
# => 'google' 

foo 'https://www9.calendar.google.co.uk' 
# => 'calendar.google' 

foo 'https://mail.google.com.au' 
# => 'mail.google' 

foo 'https://www12.stage.calendar.google.co.uk' 
# => 'stage.calendar.google' 

foo 'www.blog.botreetechnologies.com' 
# => 'blog.botreetechnologies' 
+0

URLのすべてのタイプでうまく動作しません。たとえば、http:// www.pop.com.auです。 –

関連する問題