def parse(self, domain, data): data = WhoisDataParser.parse(self, domain, data) for l in data: if l.count(': ') == 0: continue try: k, v = [x.strip() for x in l.split(':', 1)] except ValueError: raise WhoisError('Error parsing line %s' % l) try: k = FIELD_MAP[k] except KeyError: raise WhoisError('Unknown field on line %s' % l) if k in DATE_FIELDS: v = DATE_PARSER(v) elif k == 'nameservers': m = RE_NS_STATUS.match(v) if not m: raise WhoisError('Error parsing line %s' % l) v = m.groupdict()['ns'] elif k in DNS_FIELDS: v = v.lower() elif k == 'dnssec': v = v != 'no' and True or False self.set(k, v)
def parse(self, domain, data): data = WhoisDataParser.parse(self, domain, data) for l in data: if not l.startswith(' ') or l.strip()=='': continue try: k, v = [x.strip() for x in l.split(':', 1)] except ValueError: raise WhoisError('Error parsing line %s' % l) try: k = FIELD_MAP[k] except KeyError: raise WhoisError('Unknown field on line %s' % l) if k in DATE_FIELDS: v = DATE_PARSER(v) elif k in DNS_FIELDS: v = v.lower() self.set(k, v)
def parse(self, domain, data): """Parse data Parse Nominet whois data """ def next_section(name, section, value): if section is not None and value is not None: self.set(section, value) return (name, None) def push_value(value, new_value): if value is None: value = new_value else: if type(value) != list: value = [value] value.append(new_value) return value data = WhoisDataParser.parse(self, domain, data) section = None value = None for l in [l.strip() for l in data]: if l.startswith('% ') or l == '': continue l = l.decode('utf-8') if l[:len(END_HEADER_PREFIX)] == END_HEADER_PREFIX: break if l[-1]==':' and l[:-1] in SECTION_HEADERS.keys(): (section, value) = next_section(SECTION_HEADERS[l[:-1]], section, value) continue if section == 'dates': for key, field in DATE_FIELD_MAP.items(): if l[:len(key)] == key: datevalue = l[len(key):].strip() if datevalue != OLD_DATE_BANNER: datevalue = DATE_PARSER(datevalue) else: datevalue = OLD_DATE_VALUE self.set(field, datevalue) break elif section == 'nameservers': m = RE_NS_LIST.match(l) if m: ns = m.groupdict()['ns'].strip() glue = [x.strip() for x in m.groupdict()['addresses'].split(',')] self.set('glue_%s' % ns, glue) else: ns = l.strip() value = push_value(value, ns) else: value = push_value(value, l) if section is not None and value is not None: self.set(section, value)
def parse(self, domain, data): """Parse data Parse SaudiNIC whois data """ def next_section(name, section, value): if section is not None and value is not None: self.set(section, value) return (name,None) def push_value(value, new_value): if value is None: value = new_value else: if type(value) != list: value = [value] value.append(new_value) return value data = WhoisDataParser.parse(self, domain, data) section = None value = None for l in [l.strip() for l in data]: if l.startswith('% ') or l == '': continue l = l.decode('utf-8') if l[:12] == 'Domain Name:': self.set('domainname', l[12:].lstrip()) continue if l == 'Registrant:': (section, value) = next_section('registrant', section, value) continue if l == 'Administrative Contact:': (section, value) = next_section('admin_contact', section, value) continue if l == 'Technical Contact:': (section, value) = next_section('technical_contact', section, value) continue if l == 'Name Servers:': (section, value) = next_section('nameservers', section, value) continue if l[:11] == 'Created on:': self.set('created', datetime.strptime(l[12:], '%Y-%m-%d').date()) continue if l[:16] == 'Last Updated on:': self.set('modified', datetime.strptime(l[17:], '%Y-%m-%d').date()) continue if section == 'registrant': if l[:8] == 'Address:': (section, value) = next_section('registrant_address', section, value) value = l[9:] continue else: value = push_value(value, l) if section == 'admin_contact': if l[:8] == 'Address:': (section, value) = next_section('admin_address', section, value) value = l[9:] continue else: value = push_value(value, l) if section == 'technical_contact': if l[:8] == 'Address:': (section, value) = next_section('technical_address', section, value) value = l[9:] continue else: value = push_value(value, l) if section in ( 'registrant_address', 'admin_address', 'technical_address', ): value = push_value(value, l) elif section == 'nameservers': m = RE_NS_LIST.match(l) if m: ns = m.groupdict()['ns'].strip() glue = [x.strip() for x in m.groupdict()['addresses'].split(',')] self.set('glue_%s' % ns, glue) else: ns = l.strip() value = push_value(value, ns) if section is not None and value is not None: self.set(section, value)
def parse(self, domain, data): """Parse data Parse Nominet whois data """ def next_section(name, section, value): if section is not None and value is not None: self.set(section, value) return (name, None) def push_value(value, new_value): if value is None: value = new_value else: if type(value) != list: value = [value] value.append(new_value) return value data = WhoisDataParser.parse(self, domain, data) section = None value = None for l in [l.strip() for l in data]: if l.startswith('% ') or l == '': continue l = l.decode('utf-8') if l[:len(END_HEADER_PREFIX)] == END_HEADER_PREFIX: break if l[-1] == ':' and l[:-1] in SECTION_HEADERS.keys(): (section, value) = next_section(SECTION_HEADERS[l[:-1]], section, value) continue if section == 'dates': for key, field in DATE_FIELD_MAP.items(): if l[:len(key)] == key: datevalue = l[len(key):].strip() if datevalue != OLD_DATE_BANNER: datevalue = DATE_PARSER(datevalue) else: datevalue = OLD_DATE_VALUE self.set(field, datevalue) break elif section == 'nameservers': m = RE_NS_LIST.match(l) if m: ns = m.groupdict()['ns'].strip() glue = [ x.strip() for x in m.groupdict()['addresses'].split(',') ] self.set('glue_%s' % ns, glue) else: ns = l.strip() value = push_value(value, ns) else: value = push_value(value, l) if section is not None and value is not None: self.set(section, value)