Whois-парсер, который не работает

Я новичок в Rails и хотел попробовать жемчужину Ruby Whois.

Я определил запись Active Record, которая создает отчет. Затем этот отчет будет заполнен данными из запроса whois (предпочтительно проанализированным).

Когда я делаю запрос, я получаю что-то действительно странное. Я использовал ByeBug в качестве отладчика:

$ (byebug) Whois.whois("google.it")

"\n*********************************************************************\n* Please note
 that the following result could be a subgroup of      *\n* the data contained in the database.    


    *\n*                                                                   *\n* Additional 
information can be visualized at:                      
*\n* http://www.nic.it/cgi-bin/Whois/whois.cgi
*\n*********************************************************************\n\nDomain:             google.it\nStatus:             ok\nCreated:            1999-12-10
00:00:00\nLast Update:        2014-05-07 00:52:45\nExpire Date:        2015-04-21\n
\nRegistrant\n  Name:             Google Ireland Holdings\n  Organization:     Google 
Ireland Holdings\n  ContactID:        DUP430692088\n  Address:          70 Sir John 
Rogersons Quay\n                    Dublin\n                    2\n                    
IE\n                    IE\n  Created:          2013-04-21 01:05:35\n  Last Update:      
2013-04-21 01:05:35\n\nAdmin Contact\n  Name:             Tsao Tu\n  Organization:     Tu 
Tsao\n  ContactID:        DUP142437129\n  Address:          70 Sir John Rogersons 
Quay\n                    Dublin\n                    2\n                    
IE\n                    IE\n  Created:          2013-04-21 01:05:35\n  Last Update:      
2013-04-21 01:05:35\n\nTechnical Contacts\n  Name:             Google Ireland Holdings\n  
Organization:     Google Ireland Holdings\n  ContactID:        DUP430692088\n  
Address:          70 Sir John Rogersons Quay\n                    
Dublin\n                    2\n                    IE\n                    IE\n  
Created:          2013-04-21 01:05:35\n  Last Update:      2013-04-21 01:05:35\n
\nRegistrar\n  Organization:     MarkMonitor International Limited\n  Name:             
MARKMONITOR-REG\n  Web:              https://www.markmonitor.com/\n\nNameservers\n  
ns1.google.com\n  ns4.google.com\n  ns2.google.com\n  ns3.google.com\n\n"



$ (byebug) Whois.whois("google.it").parser

#<Whois::Record::Parser:0x000000065bdc30 

    @record="\n*********************************************************************\n* 
Please note that the following result could be a subgroup of      *\n* the data contained 
in the database.                               
*\n*                                                                   *\n* Additional 
information can be visualized at:                      *\n* http://www.nic.it/cgi-bin/Whois
/whois.cgi
*\n*********************************************************************
\n\nDomain:             google.it\nStatus:             ok\nCreated:  1999-12-10
00:00:00\nLast Update:        2014-05-07 00:52:45\nExpire Date:        2015-04-21\n
\nRegistrant\n  Name:             Google Ireland Holdings\n  Organization:     Google 
Ireland Holdings\n  ContactID:        DUP430692088\n  Address:          70 Sir John 
Rogersons Quay\n                    Dublin\n                    2\n                    
IE\n                    IE\n  Created:          2013-04-21 01:05:35\n  Last Update:      
2013-04-21 01:05:35\n\nAdmin Contact\n  Name:             Tsao Tu\n  Organization:     Tu 
Tsao\n  ContactID:        DUP142437129\n  Address:          70 Sir John Rogersons 
Quay\n                    Dublin\n                    2\n                    
IE\n                    IE\n  Created:          2013-04-21 01:05:35\n  Last Update:      
2013-04-21 01:05:35\n\nTechnical Contacts\n  Name:             Google Ireland Holdings\n  Organization:     Google Ireland Holdings\n  ContactID:        DUP430692088\n  
Address:          70 Sir John Rogersons Quay\n                    
Dublin\n                    2\n                    IE\n                    IE\n  
Created:          2013-04-21 01:05:35\n  Last Update:      2013-04-21 01:05:35\n
\nRegistrar\n  Organization:     MarkMonitor International Limited\n  Name:             
MARKMONITOR-REG\n  Web:              https://www.markmonitor.com/\n\nNameservers\n  
ns1.google.com\n  ns4.google.com\n  ns2.google.com\n  ns3.google.com\n\n">

Я хотел бы знать, о чем все это. Он не структурирован так, как в IRB или на простой консоли.

И когда я пытаюсь посмотреть свойства, он просто говорит мне отключиться:

$ (byebug) Whois.whois("google.it").property_supported?(:domain)

NoMethodError Exception: undefined method `property_supported?' for #<Whois::Record:0x000000065aba08>
nil

Я использую виртуальную машину (Ubuntu precision64) с Rails 4.0 и Ruby версии 2.1.2. Веб-сервер — это Webrick по умолчанию.

Все, что я хотел бы сделать, это получить объект <Whois::Record> и извлечь из него значения, такие как домен, domain_id, регистратор и т. д.... какие-нибудь советы?


person Exos    schedule 30.09.2014    source источник
comment
пытался сделать код читабельным, но до этого не дошло   -  person Michael Durrant    schedule 30.09.2014
comment
Пожалуйста, найдите время, чтобы использовать правильную грамматику и форматирование. Это значительно упрощает чтение вашего вопроса, что помогает нам помочь вам решить проблему. НЕ делать это только обескураживает потенциальных ответчиков, которые считают, что вы не достаточно заботитесь, чтобы написать читаемый вопрос, так почему они должны заботиться настолько, чтобы попытаться помочь.   -  person the Tin Man    schedule 30.09.2014


Ответы (2)


Метод #whois возвращает объект Whois::Record, который упаковывает строку ответа whois и обеспечивает возможности синтаксического анализа. Вывод, который вы видите в консоли, — это просто представление объекта.

record = Whois.whois("google.it")
record.class
# => Whois::Record

В документации Record объясняется, как использовать объект. Например, чтобы распечатать его строковое представление, явно вызовите puts или используйте .to_s.

puts record.to_s

Если вам нужно получить доступ к определенному свойству, нет необходимости вызывать синтаксический анализатор. Просто получите доступ к собственности.

record.expires_on
# => 2015-04-21 00:00:00 +0200

Обязательно прочитайте документацию библиотеки.

person Simone Carletti    schedule 30.09.2014
comment
Не могу поверить, что я застрял из-за базовой вещи Ruby без Rails. Большое спасибо ! И да, я проверял документацию снова и снова, но я думаю, что есть некоторые тонкости, которые я пропущу в любом случае... - person Exos; 30.09.2014

  1. Вывод в консоли показывает, что выполнение вызова возвращает ожидаемый результат (настройка @record).

  2. property_supported? не работает, потому что этот метод недоступен для этого типа объекта.

Также я никогда не слышал о byebug.
Вы можете сделать rails console из корня приложения и попытаться использовать там объекты?

person Michael Durrant    schedule 30.09.2014
comment
Насколько я понял, отладчик rails не поддерживался для версий rails › 3.0, поэтому мне пришлось искать что-то еще. Byebug на самом деле довольно прост в использовании, ну, я бы не знал, так как я не пробовал никакой другой отладчик. - person Exos; 30.09.2014
comment
Byebug — очень хороший отладчик Ruby для версии 2.0+. - person the Tin Man; 30.09.2014