복붙노트

[RUBY-ON-RAILS] 어떻게 메인 도메인을 얻기 위해 루비의 URL을 구문 분석?

RUBY-ON-RAILS

어떻게 메인 도메인을 얻기 위해 루비의 URL을 구문 분석?

나는 www를 도메인의 주요 부분을 얻을 루비 어떤 URL을 구문 분석 할 수 있어야합니다 (바로 XXXX.com)

해결법

  1. ==============================

    1.이것은 거의 모든 URL과 함께 작동합니다 :

    이것은 거의 모든 URL과 함께 작동합니다 :

    # URL always gets parsed twice
    def get_host_without_www(url)
      url = "http://#{url}" if URI.parse(url).scheme.nil?
      host = URI.parse(url).host.downcase
      host.start_with?('www.') ? host[4..-1] : host
    end
    

    또는:

    # Only parses twice if url doesn't start with a scheme
    def get_host_without_www(url)
      uri = URI.parse(url)
      uri = URI.parse("http://#{url}") if uri.scheme.nil?
      host = uri.host.downcase
      host.start_with?('www.') ? host[4..-1] : host
    end
    

    당신은 'URI'을 필요로 할 수 있습니다.

  2. ==============================

    2.참고 유일한 방법은 모든 최상위 도메인 목록을 만들려면 도메인 (정책이 각 레지스트리와 다를 수) 특정 최상위 도메인에 등록 할 수있는 가장 높은 수준을 찾는 어떤 알고리즘 방법이 없습니다 주시고 도메인을 등록 할 수있는 수준.

    참고 유일한 방법은 모든 최상위 도메인 목록을 만들려면 도메인 (정책이 각 레지스트리와 다를 수) 특정 최상위 도메인에 등록 할 수있는 가장 높은 수준을 찾는 어떤 알고리즘 방법이 없습니다 주시고 도메인을 등록 할 수있는 수준.

    이는 공공 접미사 목록이 존재하는 이유입니다.

    나는 PublicSuffix, 다른 부분에 도메인을 분해 루비 라이브러리의 저자입니다.

    다음은 그 예이다

    require 'uri/http'
    
    uri = URI.parse("http://toolbar.google.com")
    domain = PublicSuffix.parse(uri.host)
    # => "toolbar.google.com"
    domain.domain
    # => "google.com"
    
    uri = URI.parse("http://www.google.co.uk")
    domain = PublicSuffix.parse(uri.host)
    # => "www.google.co.uk"
    domain.domain
    # => "google.co.uk"
    
  3. ==============================

    3.조금만 참고 : Mischas 두 번째 예에서 URL의 두 번째 구문 분석을 극복하기 위해, 대신 URI.parse의 문자열 비교를 만들 수 있습니다.

    조금만 참고 : Mischas 두 번째 예에서 URL의 두 번째 구문 분석을 극복하기 위해, 대신 URI.parse의 문자열 비교를 만들 수 있습니다.

    # Only parses once
    def get_host_without_www(url)
      url = "http://#{url}" unless url.start_with?('http')
      uri = URI.parse(url)
      host = uri.host.downcase
      host.start_with?('www.') ? host[4..-1] : host
    end
    

    이 방법의 단점은 널리 표준 HTTP의 URL (들) 기반의 URL을 제한하고 있다는 것이다. 당신이 그것을 더 일반적인 FTP (링크 f.e.)를 사용한다면 당신은 그에 따라 조정해야합니다.

  4. ==============================

    4.어드레스로 특히 구문 분석 도메인에 PublicSuffix 보석을 사용, 아마 2018 년 정답이다.

    어드레스로 특히 구문 분석 도메인에 PublicSuffix 보석을 사용, 아마 2018 년 정답이다.

    그러나, 나는 다양한 데이터 소스에서 여러 장소에서 분석하는 이런 종류의 작업을 수행해야하고, 반복적으로 사용하는 자세한 그것을 조금을 발견했다. 나는 주위에 래퍼를 생성 그래서에서는 Adomain :

    require 'adomain'
    
    Adomain["https://toolbar.google.com"]
    # => "toolbar.google.com"
    
    Adomain["https://www.google.com"]
    # => "google.com"
    
    Adomain["stackoverflow.com"]
    # => "stackoverflow.com"
    

    나는이 다른 사람에게 도움이되기를 바랍니다.

  5. ==============================

    5.여기 .co.uk에서와 .com.fr와 함께 잘 작동 하나의 - 종류의 도메인

    여기 .co.uk에서와 .com.fr와 함께 잘 작동 하나의 - 종류의 도메인

    domain = uri.host[/[^.\s\/]+\.([a-z]{3,}|([a-z]{2}|com)\.[a-z]{2})$/]
    
  6. ==============================

    6.URL이 형식 http://www.google.com을 인 경우에, 당신은 뭔가를 할 수 있습니다 :

    URL이 형식 http://www.google.com을 인 경우에, 당신은 뭔가를 할 수 있습니다 :

    a = 'http://www.google.com'
    puts a.split(/\./)[1] + '.' + a.split(/\./)[2]
    

    또는

    a =~ /http:\/\/www\.(.*?)$/
    puts $1
    
  7. ==============================

    7.그럼 당신은이 방법을 쓸 수 있습니다 :

    그럼 당신은이 방법을 쓸 수 있습니다 :

    require 'URI'
    def domain_name(url, arg={:with_dot_principal=>false})
      arg[:with_dot_principal] ? URI(url).hostname.split('.').last(2).join('.') : URI(url).hostname.split('.').last(2).first
    end
    

    그리고 사용 :

    domain_name("https://www.google.com/?gws_rd=ssl&safe=active&ssui=on")
    # => "google"
    domain_name("http://google.com", with_dot_principal: true)
    # => "google.com"
    
  8. from https://stackoverflow.com/questions/6674230/how-would-you-parse-a-url-in-ruby-to-get-the-main-domain by cc-by-sa and MIT license