1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
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:]))
|