Add parsing part. Fix bugs. WiP.
This commit is contained in:
parent
c3af1983c7
commit
8a6e99255a
2
.gitignore
vendored
2
.gitignore
vendored
@ -33,3 +33,5 @@ nosetests.xml
|
||||
.mr.developer.cfg
|
||||
.project
|
||||
.pydevproject
|
||||
|
||||
test.py
|
||||
|
||||
74
src/parser.py
Normal file
74
src/parser.py
Normal file
@ -0,0 +1,74 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import error
|
||||
import re
|
||||
|
||||
class Parser(object):
|
||||
def __init__(self, domain, text, whoisServer=None):
|
||||
self.domain = domain
|
||||
self.text = text
|
||||
self.whoisServer = whoisServer and whoisServer or "default"
|
||||
|
||||
self.tld = self.domain.split(".")[-1]
|
||||
|
||||
self.parseDefaultConf = {}
|
||||
execfile("tlds/default", {}, self.parseDefaultConf)
|
||||
self.parseDefaultConf = self.parseDefaultConf.get("parse")
|
||||
|
||||
self.parseConf = {}
|
||||
|
||||
try:
|
||||
execfile("tlds/%s"%(self.tld), {}, self.parseConf)
|
||||
|
||||
self.parseConf = self.parseConf.get("parse")
|
||||
|
||||
if not self.parseConf and whoisServer not in self.parseDefaultConf:
|
||||
self.parseConf = self.parseDefaultConf.get("default")
|
||||
|
||||
elif not self.parseConf:
|
||||
self.parseConf = self.parseDefaultConf.get(whoisServer)
|
||||
|
||||
elif self.whoisServer in self.parseConf:
|
||||
self.parseConf = self.parseConf.get(self.whoisServer)
|
||||
|
||||
elif "default" in self.parseConf:
|
||||
self.parseConf = self.parseConf.get("default")
|
||||
|
||||
else:
|
||||
self.parseConf = self.parseDefaultConf.get("default")
|
||||
|
||||
# Check for LoadConf
|
||||
_parseConf = self.parseConf
|
||||
self.parseConf = {}
|
||||
|
||||
if "LoadConf" in _parseConf:
|
||||
try:
|
||||
# <tld>/<whois server>
|
||||
# e.g. org/whois.publicinternetregistry.net
|
||||
lc = _parseConf["LoadConf"].split("/", 1)
|
||||
|
||||
lcTLD = lc[0]
|
||||
lcWS = lc[1]
|
||||
|
||||
lcConf = {}
|
||||
execfile("tlds/%s"%(lcTLD), {}, lcConf)
|
||||
lcConf = lcConf.get("parse")
|
||||
|
||||
self.parseConf.update(lcConf.get(lcWS))
|
||||
|
||||
except:
|
||||
pass
|
||||
|
||||
self.parseConf.update(_parseConf)
|
||||
|
||||
except:
|
||||
self.parseConf = self.parseDefaultConf.get("default")
|
||||
|
||||
def run(self):
|
||||
result = {}
|
||||
for key in self.parseConf:
|
||||
matches = re.findall(self.parseConf[key], self.text, re.MULTILINE)
|
||||
if matches:
|
||||
result.update({key: map(lambda x: x.strip(), matches)})
|
||||
|
||||
print result
|
||||
13
src/tlds/default
Normal file
13
src/tlds/default
Normal file
@ -0,0 +1,13 @@
|
||||
parse = {
|
||||
"default": {
|
||||
"DomainName": "Domain Name:\s?(.+)",
|
||||
"Registrar": "Registrar:\s?(.+)",
|
||||
"WhoisServer": "Whois Server: \s?(.+)",
|
||||
"ReferralURL": "Referral URL:\s?(.+)",
|
||||
"UpdatedDate": "Updated Date:\s?(.+)",
|
||||
"CreationDate": "Creation Date:\s?(.+)",
|
||||
"ExpirationDate": "Expiration Date:\s?(.+)",
|
||||
"NameServer": "Name Server:\s?(.+)",
|
||||
"Status": "Status:\s?(.+)",
|
||||
},
|
||||
}
|
||||
@ -1,11 +1,12 @@
|
||||
server = {
|
||||
"host": "org.whois-servers.net",
|
||||
"port": 43,
|
||||
}
|
||||
|
||||
parse = {
|
||||
"regex": {
|
||||
"default": {
|
||||
|
||||
}
|
||||
# "LoadConf": "default/default",
|
||||
"NotFound": "NOT FOUND",
|
||||
"DomainName": "Domain Name:(.+)",
|
||||
}
|
||||
}
|
||||
|
||||
25
src/whois.py
25
src/whois.py
@ -5,6 +5,8 @@ import os
|
||||
import socket
|
||||
import re
|
||||
|
||||
import error
|
||||
|
||||
class Whois(object):
|
||||
def __init__(self, domain):
|
||||
self.domain = domain
|
||||
@ -17,12 +19,15 @@ class Whois(object):
|
||||
self.settings = {}
|
||||
|
||||
if self.tld in self.tldList:
|
||||
self.settings = {}
|
||||
execfile(os.path.join(self.tldPath, self.tld), {}, self.settings)
|
||||
_settings = {}
|
||||
execfile(os.path.join(self.tldPath, self.tld), {}, _settings)
|
||||
|
||||
if "server" in _settings:
|
||||
self.settings.update(_settings["server"])
|
||||
|
||||
def chooseServer(self):
|
||||
if "server" in self.settings:
|
||||
return self.settings["server"]["host"]
|
||||
return self.settings["host"]
|
||||
else:
|
||||
return self.tld + ".whois-servers.net"
|
||||
|
||||
@ -51,16 +56,18 @@ class Whois(object):
|
||||
return result
|
||||
|
||||
def run(self, redirect=True):
|
||||
result = self.query(self.chooseServer())
|
||||
whoisServer = self.chooseServer()
|
||||
result = self.query(whoisServer)
|
||||
|
||||
if redirect:
|
||||
redirection = re.findall(self.settings["server"]["redirect"], result, re.MULTILINE)
|
||||
if redirect and "redirect" in self.settings:
|
||||
redirection = re.findall(self.settings["redirect"], result, re.MULTILINE)
|
||||
|
||||
while redirection and len(redirection) >= 1:
|
||||
result = self.query(redirection[0])
|
||||
redirection = re.findall(self.settings["server"]["redirect"], result)
|
||||
whoisServer = redirection[0]
|
||||
result = self.query(whoisServer)
|
||||
redirection = re.findall(self.settings["redirect"], result)
|
||||
|
||||
|
||||
return result
|
||||
return whoisServer, result
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user