私はルビーとレールに非常に慣れていません。解析されたすべてのwhois情報をjson出力に出力しようとしています。私は次のものを持っています:
class WhoisController < ApplicationController
def index
c = Whois::Client.new
record = c.lookup("google.com")
parser = record.parser
created = parser.created_on
msg = {:created => created}
render :json => msg
end
end
出力:
{"created":"1997-09-15T00:00:00.000-07:00"}
ただし、パーサーにはさらに多くの情報があります....使用可能なすべてのフィールドを知らなくても、すべてのキー/値をjsonにダンプするにはどうすればよいですか?
私はもう試した:
class WhoisController < ApplicationController
def index
c = Whois::Client.new
record = c.lookup("google.com")
parser = record.parser
msg = {:whois => parser}
render :json => msg
end
end
しかし、最終的には次のようになります。
SystemStackError in WhoisController#index
編集:
私も試しました:
parser.attributes.each do |attr_name, attr_value|
puts attr_name
end
しかし、最終的に別のエラーが発生します。
undefined method `attributes' for #<Whois::Parser:0x00007fc030d74018>
Python と Go (リフレクションによる) の両方でこれを行うことができます。これを達成するRubyの方法は何ですか?
編集:
class WhoisController < ApplicationController
def index
c = Whois::Client.new
record = c.lookup("google.com")
parser = record.parser
msg = {}
for x_prop in Whois::Parser::PROPERTIES
msg[x_prop] = parser.send(x_prop)
end
render :json => msg
end
end
これは、すべてのプロパティがパーサーに存在する場合にのみ機能します。ただし、一部のドメイン名にはすべてのプロパティが含まれていないため、次のようになります。
Unable to find a parser for property `registrant_contacts'
次に、そのプロパティが存在する場合にのみ設定しようとします。
msg = {}
for x_prop in Whois::Parser::PROPERTIES
parser.has_attribute?(:x_prop)
msg[x_prop] = parser.send(x_prop)
end
render :json => msg
別のエラーが発生します:
undefined method `has_attribute?'
編集#3:
私も試しました:
msg = {}
for prop in Whois::Parser::PROPERTIES
msg[prop] = parser.send(prop) if parser.respond_to?(prop)
end
render :json => msg
プロパティがパーサーにない場合、これはまだ失敗します。;(