From 86a0333afd709d2e0567c1d3ccf31d2a4e7bcf01 Mon Sep 17 00:00:00 2001 From: Steven Smith Date: Fri, 14 Feb 2014 13:44:12 +0800 Subject: [PATCH 1/2] xkcd.py - xkcd search and autoresponse --- plugins/xkcd.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 plugins/xkcd.py diff --git a/plugins/xkcd.py b/plugins/xkcd.py new file mode 100644 index 0000000..41f486b --- /dev/null +++ b/plugins/xkcd.py @@ -0,0 +1,38 @@ +import re +from util import hook, http + +xkcd_re = (r'(.*:)//(www.xkcd.com|xkcd.com)(.*)', re.I) + +months = {'1': 'January', 2: 'February', 3: 'March', 4: 'April', 5: 'May', 6: 'June', 7: 'July', 8: 'August', 9: 'September', 10: 'October', 11: 'November', 12: 'December'} + + +def xkcd_info(id, url=False): + data = http.get_json("http://www.xkcd.com/" + id + "/info.0.json") + date = "%s %s %s" % (data['day'], months[int(data['month'])], data['year']) + if url: + url = " | http://xkcd.com/" + id.replace("/", "") + return "xkcd: \x02%s\x02 (%s)%s" % (data['title'], date, url if url else "") + + +def xkcd_search(inp): + soup = http.get_soup("http://www.ohnorobot.com/index.pl?s=%s&Search=Search&comic=56&e=0&n=0&b=0&m=0&d=0&t=0" % inp) + result = soup.find('li') + if result: + title = result.find('a').find('b').text + url = result.find('div', {'class': 'tinylink'}).text + id = url[:-1].split("/")[-1] + return xkcd_info(id, url=True) + else: + return "No results found!" + + +@hook.regex(*xkcd_re) +def xkcd_url(match): + id = match.group(3).split(" ")[0].split("/")[1] + return xkcd_info(id) + + +@hook.command +def xkcd(inp): + """xkcd - Search for xkcd comic matching """ + return xkcd_search(inp) From 27b62feb5f4ea8d9bc7685b9ff39f78a4a66b414 Mon Sep 17 00:00:00 2001 From: Luke Rogers Date: Fri, 14 Feb 2014 19:13:30 +1300 Subject: [PATCH 2/2] tweakages --- plugins/xkcd.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/plugins/xkcd.py b/plugins/xkcd.py index 41f486b..77c33f0 100644 --- a/plugins/xkcd.py +++ b/plugins/xkcd.py @@ -1,35 +1,38 @@ import re + from util import hook, http + xkcd_re = (r'(.*:)//(www.xkcd.com|xkcd.com)(.*)', re.I) - -months = {'1': 'January', 2: 'February', 3: 'March', 4: 'April', 5: 'May', 6: 'June', 7: 'July', 8: 'August', 9: 'September', 10: 'October', 11: 'November', 12: 'December'} +months = {'1': 'January', 2: 'February', 3: 'March', 4: 'April', 5: 'May', 6: 'June', 7: 'July', 8: 'August', + 9: 'September', 10: 'October', 11: 'November', 12: 'December'} -def xkcd_info(id, url=False): - data = http.get_json("http://www.xkcd.com/" + id + "/info.0.json") +def xkcd_info(xkcd_id, url=False): + """ takes an XKCD entry ID and returns a formatted string """ + data = http.get_json("http://www.xkcd.com/" + xkcd_id + "/info.0.json") date = "%s %s %s" % (data['day'], months[int(data['month'])], data['year']) if url: - url = " | http://xkcd.com/" + id.replace("/", "") + url = " | http://xkcd.com/" + xkcd_id.replace("/", "") return "xkcd: \x02%s\x02 (%s)%s" % (data['title'], date, url if url else "") def xkcd_search(inp): - soup = http.get_soup("http://www.ohnorobot.com/index.pl?s=%s&Search=Search&comic=56&e=0&n=0&b=0&m=0&d=0&t=0" % inp) + soup = http.get_soup("http://www.ohnorobot.com/index.pl?s={}&Search=Search&" + "comic=56&e=0&n=0&b=0&m=0&d=0&t=0".format(inp)) result = soup.find('li') if result: - title = result.find('a').find('b').text url = result.find('div', {'class': 'tinylink'}).text - id = url[:-1].split("/")[-1] - return xkcd_info(id, url=True) + xkcd_id = url[:-1].split("/")[-1] + return xkcd_info(xkcd_id, url=True) else: return "No results found!" @hook.regex(*xkcd_re) def xkcd_url(match): - id = match.group(3).split(" ")[0].split("/")[1] - return xkcd_info(id) + xkcd_id = match.group(3).split(" ")[0].split("/")[1] + return xkcd_info(xkcd_id) @hook.command