#!/usr/bin/env python """ wiktionary.py - Phenny Wiktionary Module Copyright 2009, Sean B. Palmer, inamidst.com Licensed under the Eiffel Forum License 2. http://inamidst.com/phenny/ """ import re import web uri = 'http://en.wiktionary.org/w/index.php?title=%s&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 wiktionary(word): bytes = web.get(uri % web.urllib.quote(word.encode('utf-8'))) bytes = r_ul.sub('', bytes) 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] + '[...]' phenny.say(result) w.commands = ['w'] w.example = '.w bailiwick' def encarta(phenny, input): return phenny.reply('Microsoft removed Encarta, try .w instead!') encarta.commands = ['dict'] if __name__ == '__main__': print __doc__.strip()