whois/parser.py
changeset 135 808c8bc803f5
parent 134 3ff7f09ea24a
child 137 565c0268bc39
child 140 196df98347d8
equal deleted inserted replaced
134:3ff7f09ea24a 135:808c8bc803f5
   128             if regex:
   128             if regex:
   129                 values = []
   129                 values = []
   130                 for data in re.findall(regex, self.text, re.IGNORECASE):
   130                 for data in re.findall(regex, self.text, re.IGNORECASE):
   131                     matches = data if isinstance(data, tuple) else [data]
   131                     matches = data if isinstance(data, tuple) else [data]
   132                     for value in matches:
   132                     for value in matches:
   133                         value = value.strip()
   133                         value = self._preprocess(attr, value)
   134                         if value and isinstance(value, basestring) and not value.isdigit() and '_date' in attr:
       
   135                             # try casting to date format
       
   136                             value = cast_date(
       
   137                                 value,
       
   138                                 dayfirst=self.dayfirst,
       
   139                                 yearfirst=self.yearfirst)
       
   140                         if value and value not in values:
   134                         if value and value not in values:
   141                             # avoid duplicates
   135                             # avoid duplicates
   142                             values.append(value)
   136                             values.append(value)
   143                 if values and attr in ('registrar', 'whois_server', 'referral_url'):
   137                 if values and attr in ('registrar', 'whois_server', 'referral_url'):
   144                     values = values[-1] # ignore junk
   138                     values = values[-1] # ignore junk
   147                 elif not values:
   141                 elif not values:
   148                     values = None
   142                     values = None
   149 
   143 
   150                 self[attr] = values
   144                 self[attr] = values
   151 
   145 
       
   146     def _preprocess(self, attr, value):
       
   147         value = value.strip()
       
   148         if value and isinstance(value, basestring) and not value.isdigit() and '_date' in attr:
       
   149             # try casting to date format
       
   150             value = cast_date(
       
   151                 value,
       
   152                 dayfirst=self.dayfirst,
       
   153                 yearfirst=self.yearfirst)
       
   154         return value
   152 
   155 
   153     def __setitem__(self, name, value):
   156     def __setitem__(self, name, value):
   154         super(WhoisEntry, self).__setitem__(name, value)
   157         super(WhoisEntry, self).__setitem__(name, value)
   155 
   158 
   156 
   159 
   256             return WhoisDk(domain, text)
   259             return WhoisDk(domain, text)
   257         elif domain.endswith('.it'):
   260         elif domain.endswith('.it'):
   258             return WhoisIt(domain, text)
   261             return WhoisIt(domain, text)
   259         elif domain.endswith('.ai'):
   262         elif domain.endswith('.ai'):
   260             return WhoisAi(domain, text)
   263             return WhoisAi(domain, text)
       
   264         elif domain.endswith('.il'):
       
   265             return WhoisIl(domain, text)
   261         else:
   266         else:
   262             return WhoisEntry(domain, text)
   267             return WhoisEntry(domain, text)
   263 
   268 
   264 
   269 
   265 class WhoisCom(WhoisEntry):
   270 class WhoisCom(WhoisEntry):
  1237     def __init__(self, domain, text):
  1242     def __init__(self, domain, text):
  1238         if 'not registered' in text:
  1243         if 'not registered' in text:
  1239             raise PywhoisError(text)
  1244             raise PywhoisError(text)
  1240         else:
  1245         else:
  1241             WhoisEntry.__init__(self, domain, text, self.regex)
  1246             WhoisEntry.__init__(self, domain, text, self.regex)
       
  1247 
       
  1248 class WhoisIl(WhoisEntry):
       
  1249     """Whois parser for .il domains
       
  1250     """
       
  1251     regex = {
       
  1252         'domain_name':     'domain: *(.+)',
       
  1253         'expiration_date': 'validity: *(.+)',
       
  1254         'registrant_name': 'person: *(.+)',
       
  1255         'dnssec':          'DNSSEC: *(.+)',
       
  1256         'status':          'status: *(.+)',
       
  1257         'name_servers':    'nserver: *(.+)',
       
  1258         'emails':          'e-mail: *(.+)',
       
  1259         'phone':           'phone: *(.+)',
       
  1260         'name_servers':    'nserver: *(.+)',
       
  1261         'registrar':       'registrar name: *(.+)',
       
  1262         'referral_url':    'registrar info: *(.+)',
       
  1263     }
       
  1264 
       
  1265     dayfirst = True
       
  1266 
       
  1267     def __init__(self, domain, text):
       
  1268         if 'No data was found' in text:
       
  1269             raise PywhoisError(text)
       
  1270         else:
       
  1271             WhoisEntry.__init__(self, domain, text, self.regex)
       
  1272 
       
  1273     def _preprocess(self, attr, value):
       
  1274         if attr == 'emails':
       
  1275             value = value.replace(' AT ', '@')
       
  1276         return super(WhoisIl, self)._preprocess(attr, value)