# coding=utf-8 """ wiktionary.py - Sopel Wiktionary Module Copyright 2009, Sean B. Palmer, inamidst.com Licensed under the Eiffel Forum License 2. http://sopel.chat """ import re import requests from module import commands, example uri = 'http://en.wiktionary.org/w/index.php?title={}&printable=yes' r_tag = re.compile(r'<[^>]+>') r_ul = re.compile(r'(?ims)') def text(html): text = r_tag.sub('', html).strip() text = text.replace('\n', ' ') text = text.replace('\r', '') text = text.replace('(intransitive', '(intr.') text = text.replace('(transitive', '(trans.') return text def wikt(word): bytes = requests.get(uri.format(word)) # bytes = r_ul.sub('', bytes) bytes = bytes.text mode = None etymology = None definitions = {} for line in bytes.splitlines(): if 'id="Etymology"' in line: mode = 'etymology' elif 'id="Noun"' in line: mode = 'noun' elif 'id="Verb"' in line: mode = 'verb' elif 'id="Adjective"' in line: mode = 'adjective' elif 'id="Adverb"' in line: mode = 'adverb' elif 'id="Interjection"' in line: mode = 'interjection' elif 'id="Particle"' in line: mode = 'particle' elif 'id="Preposition"' in line: mode = 'preposition' elif 'id="' in line: mode = None elif (mode == 'etmyology') and ('

' in line): etymology = text(line) elif (mode is not None) and ('

  • ' in line): definitions.setdefault(mode, []).append(text(line)) if ' 300: result = result[:295] + '[...]' bot.say(result)