从ruby中的字符串中删除子域

7 ruby subdomain dns url uri

我正在循环一系列的网址,并想要清理它们.我有以下代码:

# Parse url to remove http, path and check format
o_url = URI.parse(node.attributes['href'])

# Remove www
new_url = o_url.host.gsub('www.', '').strip
Run Code Online (Sandbox Code Playgroud)

如何对此进行扩展以删除某些网址中存在的子网域?

Pau*_*Dix 29

我刚刚写了一个名为Domainatrix的库.你可以在这里找到它:http://github.com/pauldix/domainatrix

require 'rubygems'
require 'domainatrix'

url = Domainatrix.parse("http://www.pauldix.net")
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"
Run Code Online (Sandbox Code Playgroud)

  • 由于此 gem 尚未收到任何更新,请参阅 @DarrenCheng 以获取更新的 gem:https://github.com/weppos/publicsuffix-ruby (2认同)

mol*_*olf 6

这是一个棘手的问题.某些顶级域名不接受第二级注册.

比较example.comexample.co.uk.如果您只是删除除最后两个域之外的所有内容,那么您最终会得到example.com,而且co.uk这绝不是意图.

Firefox通过有效的顶级域名过滤来解决这个问题,并且他们维护所有这些域名的列表.有关更多信息,请访问publicsuffix.org.

您可以使用此列表过滤掉以外的所有领域的权利旁边有效的TLD.我不知道有任何Ruby库可以做到这一点,但发布一个是个好主意!

更新:有C,Perl和PHP库来执行此操作.给定C版本,您可以创建Ruby扩展.或者,您可以将代码移植到Ruby.


Dar*_*eng 5

对于后代,这是2014年10月的更新:

我正在寻找一个更依赖的最新依赖,并找到了public_suffix gem(RubyGems)(GitHub).它通过维护已知公共后缀的列表来主动维护并处理所有顶级域和嵌套子域问题.

结合URI.parse用于剥离协议和路径,它的效果非常好:

??? 2.1.2 ? PublicSuffix.parse(URI.parse('https://subdomain.google.co.uk/path/on/path').host).domain
=> "google.co.uk"
Run Code Online (Sandbox Code Playgroud)


Rut*_*ing 2

就像是:

def remove_subdomain(host)
    # Not complete. Add all root domain to regexp
    host.sub(/.*?([^.]+(\.com|\.co\.uk|\.uk|\.nl))$/, "\\1")
end

puts remove_subdomain("www.example.com") # -> example.com
puts remove_subdomain("www.company.co.uk") # -> company.co.uk
puts remove_subdomain("www.sub.domain.nl") # -> domain.nl
Run Code Online (Sandbox Code Playgroud)

您仍然需要添加您认为是根域的所有(根)域。因此,“.uk”可能是根域,但您可能希望将主机保留在“.co.uk”部分之前。