A simple Whois server with a simple simple API and a front-end built with AngularJS.

json_parser.rb 5.2KB

    require 'json' require 'ostruct' class WhoisParser def parse(data, whois_lookup, url) @parsed_data = Hash.new domain_type = url.split(".").last # check if the domain is registered if data["registered?"] == nil if check_domain_availability(data, whois_lookup) data["registered?"] = true data["available?"] = false else data["registered?"] = false data["available?"] = true end end if data["registered?"] case domain_type when "br" parserBr(data, whois_lookup, url) when "network" parserNetwork(data, whois_lookup, url) else parserCom(data, whois_lookup, url) end else # Domain @parsed_data["domain"] = url end # Registered? @parsed_data["registered?"] = data["registered?"] # Available? @parsed_data["available?"] = data["available?"] # Parsed whois lookup data #@parsed_data["whois_lookup"] = data # Raw whois lookup data #@parsed_data["raw"] = whois_lookup.to_s return JSON.pretty_generate(@parsed_data) end def parserCom(data, whois_lookup, url) # Domain Name if data["domain"] != nil @parsed_data["domain"] = data["domain"] else @parsed_data["domain"] = url end # Owner owner_data = whois_lookup.to_s.scan(/Registrant\sName:\s([^\\]+)/).first @parsed_data["owner"] = spliter(owner_data, "\r").downcase.split.map(&:capitalize).join(' ') # Registrar @parsed_data["registrar"] = data["registrar"][:name] # Creation Date temp = whois_lookup.to_s.scan(/Creation\sDate:\s([^\\]+)/).first.first creation_date_data = temp.scan(/Creation\sDate:\s([^\\]+)/).last @parsed_data["created_on"] = spliter(creation_date_data, "\n") # Expiration Date temp = whois_lookup.to_s.scan(/Expiration\sDate:\s([^\\]+)/).first.first expiration_date_data = temp.scan(/Expiration\sDate:\s([^\\]+)/).last @parsed_data["expires_on"] = spliter(expiration_date_data, "\n") # Update Date @parsed_data["update_on"] = data["updated_on"] end def parserBr(data, whois_lookup, url) # Domain Name domain_data = whois_lookup.to_s.scan(/domain:\s([^\\]+)/) if domain_data.class == Array if domain_data.first.class == Array domain = domain_data.first.first.split("\r").first.strip else domain = domain_data.first.split("\r").first.strip end else domain = domain_data.split("\r").first.strip end if domain != "" @parsed_data["domain"] = domain else @parsed_data["domain"] = url end # Owner owner_data = whois_lookup.to_s.scan(/owner:\s([^\\]+)/).first @parsed_data["owner"] = spliter(owner_data, "\r").force_encoding("ISO-8859-1").encode("UTF-8") # Registrar @parsed_data["registrar"] = "Registro BR" # Creation Date @parsed_data["created_on"] = data["created_on"] # Expiration Date @parsed_data["expires_on"] = data["expires_on"] # Update Date @parsed_data["updated_on"] = data["updated_on"] end def parserNetwork(data, whois_lookup, url) # Domain Name domain_data = whois_lookup.to_s.scan(/Domain\sName:\s([^\\]+)/) if domain_data.class == Array if domain_data.first.class == Array domain = domain_data.first.first.split("\r").first.strip else domain = domain_data.first.split("\r").first.strip end else domain = domain_data.split("\r").first.strip end if domain != "" @parsed_data["domain"] = domain else @parsed_data["domain"] = url end # Owner owner_data = whois_lookup.to_s.scan(/Registrant\sName:\s([^\\]+)/).first @parsed_data["owner"] = spliter(owner_data, "\r") # Registrar registrar_data = whois_lookup.to_s.scan(/Registrar:\s([^\\]+)/) @parsed_data["registrar"] = spliter(registrar_data) # Creation Date creation_date_data = whois_lookup.to_s.scan(/Creation\sDate:\s([^\\]+)/).first @parsed_data["created_on"] = spliter(creation_date_data, "\n") # Expiration Date expiration_date_data = whois_lookup.to_s.scan(/Expiry\sDate:\s([^\\]+)/).first @parsed_data["expires_on"] = spliter(expiration_date_data, "\n") # Update Date update_date_data = whois_lookup.to_s.scan(/Last\supdate\sof\sWHOIS\sdatabase:\s([^\\]+)/).first @parsed_data["update_on"] = spliter(update_date_data, "<") end def spliter(data, split_char = "\r") if data.class == Array if data.first.class == Array clean_data = data.first.first.split(split_char).first.strip else clean_data = data.first.split(split_char).first.strip end else clean_data = data.split(split_char).first.strip end return clean_data end def check_domain_availability(data, whois_lookup) data1 = whois_lookup.to_s.scan(/No\smatch\sfor/).first data2 = whois_lookup.to_s.scan(/domain\snot\sfound/).first if data1 == nil || data2 == nil return true else return false end end end