mirror of
https://github.com/Mikaela/Limnoria.git
synced 2025-01-30 14:14:37 +01:00
Add Http.zipinfo
This commit is contained in:
parent
7f87c1e40a
commit
20ac0993bc
@ -1,3 +1,6 @@
|
||||
* Added Http.zipinfo, which returns a veritable plethora of
|
||||
information about the supplied zip code.
|
||||
|
||||
* Added a configuration variable for every plugin, "public", that
|
||||
determines whether the plugin is considered public (i.e., whether
|
||||
it will show up in the list command when the list command isn't
|
||||
|
@ -358,6 +358,64 @@ class Http(callbacks.Privmsg):
|
||||
else:
|
||||
irc.error('No matching file extenstions were found.')
|
||||
|
||||
_zipinfore = re.compile(r'Latitude<BR>\(([^)]+)\)</th><th>Longitude<BR>'
|
||||
r'\(([^)]+)\).*?<tr>(.*?)</tr>', re.I)
|
||||
_zipstatre = re.compile(r'(Only about \d+,\d{3} of.*?in use.)')
|
||||
def zipinfo(self, irc, msg, args):
|
||||
"""<zip code>
|
||||
|
||||
Returns a plethora of information for the given <zip code>.
|
||||
"""
|
||||
zipcode = privmsgs.getArgs(args)
|
||||
try:
|
||||
int(zipcode)
|
||||
except ValueError:
|
||||
irc.error('Zip code must be a 5-digit integer.')
|
||||
return
|
||||
if len(zipcode) != 5:
|
||||
irc.error('Zip code must be a 5-digit integer.')
|
||||
return
|
||||
url = 'http://zipinfo.com/cgi-local/zipsrch.exe?cnty=cnty&ac=ac&'\
|
||||
'tz=tz&ll=ll&zip=%s&Go=Go' % zipcode
|
||||
try:
|
||||
text = webutils.getUrl(url)
|
||||
except webutils.WebError, e:
|
||||
irc.error(str(e))
|
||||
if 'daily usage limit' in text:
|
||||
irc.error('I have exceeded the site\'s daily usage limit.')
|
||||
return
|
||||
m = self._zipstatre.search(text)
|
||||
if m:
|
||||
irc.reply('%s %s is not one of them.' % (m.group(1), zipcode))
|
||||
return
|
||||
n = self._zipinfore.search(text)
|
||||
if not n:
|
||||
irc.error('Unable to retrieve information for that zip code.')
|
||||
return
|
||||
(latdir, longdir, rawinfo) = n.groups()
|
||||
# Info consists of the following (whitespace separated):
|
||||
# City, State Abbrev., Zip Code, County, FIPS Code, Area Code, Time
|
||||
# Zone, Daylight Time(?), Latitude, Longitude
|
||||
info = utils.htmlToText(rawinfo)
|
||||
info = info.split()
|
||||
resp = []
|
||||
# County was more than one word. Hopfully it was only two words
|
||||
if (len(info[-9]) > 2):
|
||||
resp.append('City: %s' % ' '.join(info[:-10]))
|
||||
resp.append('State: %s' % info[-10])
|
||||
resp.append('County: %s' % ' '.join(info [-6:-8]))
|
||||
else:
|
||||
resp.append('City: %s' % ' '.join(info[:-9]))
|
||||
resp.append('State: %s' % info[-9])
|
||||
resp.append('County: %s' % info[-7])
|
||||
resp.append('Area Code: %s' % info[-5])
|
||||
resp.append('Time Zone: %s' % info[-4])
|
||||
resp.append('Daylight Savings: %s' % info[-3])
|
||||
resp.append('Latitude: %s (%s)' % (info[-2], latdir))
|
||||
resp.append('Longitude: %s (%s)' % (info[-1], longdir))
|
||||
irc.reply('; '.join(resp))
|
||||
|
||||
|
||||
Class = Http
|
||||
|
||||
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
|
||||
|
@ -109,5 +109,14 @@ if network:
|
||||
def testPgpkey(self):
|
||||
self.assertNotError('pgpkey jeremiah fincher')
|
||||
|
||||
def testZipinfo(self):
|
||||
self.assertRegexp('zipinfo 02135',
|
||||
r'City: Brighton; State: MA; County: Suffolk')
|
||||
self.assertError('zipinfo 123456')
|
||||
self.assertError('zipinfo O1233')
|
||||
self.assertRegexp('zipinfo 00000',
|
||||
r'Only about \d+,\d+ of the \d+,\d+ possible')
|
||||
self.assertRegexp('zipinfo 78014', 'County: La Salle')
|
||||
|
||||
# vim:set shiftwidth=4 tabstop=8 expandtab textwidth=78:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user