h/plugins/drama.py

45 lines
1.3 KiB
Python
Raw Normal View History

2010-03-05 05:15:29 +00:00
'''Searches Encyclopedia Dramatica and returns the first paragraph of the
2010-03-03 18:11:52 +00:00
article'''
import json
from lxml import html
2010-03-03 18:11:52 +00:00
import urllib2
2010-03-03 18:11:52 +00:00
from util import hook
2010-03-05 05:15:29 +00:00
api_url = "http://encyclopediadramatica.com/api.php?action=opensearch&search="
ed_url = "http://encyclopediadramatica.com/"
2010-03-03 18:11:52 +00:00
ua_header = ('User-Agent', 'Skybot/1.0 http://bitbucket.org/Scaevolus/skybot/')
2010-03-03 18:11:52 +00:00
2010-03-13 06:16:06 +00:00
@hook.command('ed')
2010-03-03 18:11:52 +00:00
@hook.command
def drama(inp):
'''.drama <phrase> -- gets first paragraph of Encyclopedia Dramatica ''' \
'''article on <phrase>'''
if not inp:
return drama.__doc__
2010-03-05 05:15:29 +00:00
q = api_url + (urllib2.quote(inp, safe=''))
request = urllib2.Request(q)
request.add_header(*ua_header)
j = json.loads(urllib2.build_opener().open(request).read())
if not j[1]:
return 'no results found'
article_name = j[1][0].replace(' ', '_')
2010-03-05 05:15:29 +00:00
url = ed_url + (urllib2.quote(article_name))
request = urllib2.Request(url)
request.add_header(*ua_header)
page = html.fromstring(urllib2.build_opener().open(request).read())
for p in page.xpath('//div[@id="bodyContent"]/p'):
if p.text_content():
summary = ' '.join(p.text_content().splitlines())
if len(summary) > 300:
summary = summary[:summary.rfind(' ', 0, 300)] + "..."
return '%s :: \x02%s\x02' % (summary, url)
return "error"