#!/usr/bin/env python3 # http://inamidst.com/saxo/ # Created by Sean B. Palmer import re import saxo pattern_sentence = \ r"^(.*?(?]*>(.*?)") regex_updated = re.compile('
]+>") def etymology(term, limit=None): term = term.rstrip("\x09\x20") page = saxo.request( "http://etymonline.com/search", query={"q": term}, headers={"Referer": "http://www.etymonline.com/"}) if not "text" in page: raise Exception("No response from %s" % page["url"]) text = page["text"] text = text.replace('Advertisement', '') definitions = regex_definition.findall(text) if not definitions: raise Exception("No definitions found in %s" % page["url"]) definition = regex_updated.sub(" ", definitions[0]) definition = regex_tag.sub("", definition) definition = definition.replace("\r", "") definition = definition.replace("\n", " ") definition = definition.replace(""", "'") definition = definition.replace("'", "'") limit = limit - len(page["url"]) - 3 definition = definition[:limit] + "..." definition = definition.replace('"', "'") return definition, page["url"] @saxo.pipe def ety(arg): if not arg: return "Display the etymology of a term from Etymonline" try: sentence, url = etymology(arg, 360) except Exception as err: link = "http://etymonline.com/search?term=" + arg return "Nothing found. Try " + link + (" (%s)" % err) if sentence: return "\"%s\" - %s" % (sentence, url) return "?"