2012-01-13 27 views
10

URL dado como:Dada una URL, ¿cómo puedo obtener solo el dominio?

http://online.wsj.com/ 
http://online.wsj.com/article/SB10001424052970204409004577158764211274708.html 
http://www.techcrunch.com/2012/01/13/techcrunch-coo/ 

El uso de Ruby/Rails, ¿cómo puedo volver sólo el dominio?

online.wsj.com 
online.wsj.com 
techcrunch.com 

Sin protocolo, sin barras, sólo el subdominio si no es www, y el dominio, y ext?

Respuesta

19

uso direccionable :: URI.parse y el método de instancia #host:

Addressable::URI.parse("http://techcrunch.com/foo/bar").host #=> "techcrunch.com" 
+3

Debí haber sugerido el URI o el URI direccionable ::. Direccionable ya está allí como parte de los rieles, y tiene mejor soporte de cadena de consultas, pero, como se muestra en otro lugar, URI funciona igual de bien –

+0

muy bueno y limpio. Gracias – AnApprentice

+1

Estoy bastante seguro de que tienes que instalar la gema para usar direccionable. –

2
pry(main)> require 'uri' 
pry(main)> url = "http://www.techcrunch.com/2012/01/13/techcrunch-coo?param1=foo&param2=bar" 
pry(main)> URI.parse(url).host 
=> "www.techcrunch.com" 
1
>> require 'uri' 
>> URI.parse("http://www.techcrunch.com/2012/01/13/techcrunch-coo/").host 
=> "www.techcrunch.com" 
7

en cuenta que si usted tiene una url sin http://, este devuelve nil:

require 'uri' 

url = "www.techcrunch.com/2012/01/13/techcrunch-coo/" 

p URI.parse(url).host # nil 

Así que algo como esto debería ser una solución más segura:

require 'uri' 

url = "www.techcrunch.com/2012/01/13/techcrunch-coo/" 

url = 'http://' + url unless url.match(/^http:\/\//) 

puts URI.parse(url).host 
+0

Use 'String # start_with?' En lugar de '.match'. Es probablemente más rápido y más claro, dice lo que está haciendo. –

Cuestiones relacionadas