2012-01-13 28 views
10

URL Với như:Cho một URL, làm thế nào tôi có thể nhận được chỉ là tên miền?

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

Sử dụng Ruby/Rails, làm thế nào tôi có thể trở về chỉ là tên miền?

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

Không có giao thức, không gạch chéo, chỉ tên miền phụ nếu nó không phải là www và tên miền, và ext?

Trả lời

19

Sử dụng Addressable :: URI.parse và phương pháp dụ #host:

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

Tôi phải đề xuất URI hoặc Địa chỉ :: URI. Địa chỉ đã có sẵn như là một phần của đường ray, và có hỗ trợ chuỗi truy vấn tốt hơn, nhưng, như được hiển thị ở nơi khác, URI hoạt động tốt như –

+0

rất mát mẻ và sạch sẽ. Cảm ơn – AnApprentice

+1

Tôi chắc rằng bạn phải cài đặt đá quý để sử dụng Địa chỉ. –

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

Hãy nhận biết rằng nếu bạn có một địa chỉ mà không http://, này trả về nil:

require 'uri' 

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

p URI.parse(url).host # nil 

Vì vậy, một cái gì đó như thế này nên là một giải pháp an toàn hơn:

require 'uri' 

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

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

puts URI.parse(url).host 
+0

Sử dụng 'String # start_with?' Thay vì '.match'. Nó có thể nhanh hơn, và rõ ràng hơn - nó nói những gì nó đang làm. –

Các vấn đề liên quan