info = { 'author': 'Jon Bergli Heier', 'title': 'mahou Showtime', 'description': 'Parser for "mahou Showtime!"', } import urllib2, time from BeautifulSoup import BeautifulSoup class Module: def __init__(self, bot): self.irc = bot if self.irc: self.irc.register_keyword('!ep', self) self.cache = '' self.lastcache = 0 def find_next(self, search): search = [x.lower() for x in search.split()] try: if time.time() - self.lastcache >= 3600 or not self.cache: self.cache = urllib2.urlopen('http://www.mahou.org/Showtime/Showtime.html').read() self.lastcache = time.time() except: return 'Failed to fetch showtime data.' soup = BeautifulSoup(self.cache) trs = soup.findAll('tr') del trs[0] # delete the "header" table row # Note: 4th tr contains a hr for tr1, tr2, tr3 in zip(trs[::4], trs[1::4], trs[2::4]): title = tr1.td.b.a.text if all([x in title.lower() for x in search]): eta, channel = [x.strip() for x in tr2('td')[1].text.split('/')] airtime = tr3('td')[1].text return '%s airs on %s at %s (eta: %s)' % (title, channel, airtime, eta) return 'No match found.' def keyword(self, nick, channel, kw, msg): target = channel if not channel == self.irc.nickname else nick.split('!')[0] args = msg.split() if len(args) == 0: self.irc.msg(target, 'Usage: !ep search') return self.irc.msg(target, self.find_next(' '.join(args))) if __name__ == '__main__': import sys m = Module(None) print m.find_next(' '.join(sys.argv[1:]))