Контактная информация пуста/не анализируется для доменов от некоторых регистраторов

Я начинаю использовать whoisrb и замечаю, что домены от некоторых регистраторов не возвращают контактную информацию.

Например:

domain_name = ARGV[0]
r = Whois.whois(domain_name)

t=r.registrant_contact
  if t == nil
  puts 'Registrant Contact is empty.'
end

Вернет "Контакты регистранта пусты". Попытка получить доступ к атрибутам контакта приводит к ошибке, например undefined method 'id' for nil:NilClass (NoMethodError).

Если я проверю необработанную запись, которая возвращается, puts r, я увижу, что она получает толстую запись, поэтому контактная информация присутствует в необработанной необработанной записи.

На данный момент я заметил это двумя регистраторами: onlinenic.com и namesilo.com. Если вы попытаетесь запустить whois для этих двух доменов, вы поймете, что я имею в виду.

Я проверяю образец, совместимый с ICANN, здесь:

https://www.icann.org/resources/pages/approved-with-specs-2013-09-17-en#whois

против onlinenic.com и namesilo.com, и я не вижу существенных различий (хотя, возможно, я что-то упускаю).

Любые идеи, почему у него проблемы с разбором, или указатели на то, что я мог бы проверить, чтобы исправить это? Спасибо.


person Dave A.    schedule 25.01.2016    source источник


Ответы (2)


Это происходит, когда регистратор не имеет связанного синтаксического анализатора или у синтаксического анализатора нет определения, необходимого для анализа контактов.

Другими словами, если синтаксический анализатор не существует, возможно, что данные регистратора находятся в ответе, но библиотека не может их найти.

В этом случае решение состоит в том, чтобы либо добавить/обновить анализатор, соответствующий конкретному регистратору/реестру.

Поскольку такое поведение сбивает с толку тех, кто не знаком с внутренним устройством библиотеки, также обратите внимание на новый выпуск 4 вызовет ошибку в этом случае (вместо молчаливого возврата nil). Таким образом, будет ясно, когда значение равно нулю, а значение неизвестно.

person Simone Carletti    schedule 25.01.2016
comment
Спасибо, это имеет смысл. Я заработал, добавив новый синтаксический анализатор под lib/whois/record/parser, аналогичный другим серверам whois, совместимым с ICANN. - person Dave A.; 25.01.2016
comment
Не стесняйтесь предоставлять патч, если вы хотите, чтобы он был объединен с основным репо. - person Simone Carletti; 25.01.2016

r = Whois.whois(domain_name)

Здесь r — это объект Whois::Record, и вы можете найти доступные методы здесь. registrant_contact не является одним из них. Вероятно, вам придется разобрать его самостоятельно.

person Ho Man    schedule 25.01.2016
comment
Здесь доступны и другие свойства: whoisrb.org/manual/parser/properties. также см. их в комментариях здесь: whois-3.6.5/lib/whois/record/contact.rb # @attr [String] id # @attr [String] type # @attr [String] name # @attr [String] organization # @attr [String] address (...и т. д.) Я без проблем могу получить доступ к различным контактным свойствам регистранта для других доменов. - person Dave A.; 25.01.2016