#! /usr/bin/env python import shlex import optparse import sys import wikipedia from functools import partial version = "0.1.2" def stringify(o): if isinstance(o, list): output = [] for item in o: output.append(item.encode("utf-8", "replace")) return '"%s"' % '", "'.join(output) else: return o.encode("utf-8", "replace") def display(o): print stringify(o) def search(topic, index): results = wikipedia.search(topic) if len(results) == 1: display(wikipedia.summary(results[0])) else: if index is not None: try: display(wikipedia.summary(results[index])) except IndexError: print "index out of range, options are: [%s]" % stringify(results) else: display(results) def url(topic, index): try: page = wikipedia.page(topic) except wikipedia.exceptions.DisambiguationError as e: if index is not None: try: display(wikipedia.page(e.options[index]).url) except IndexError: print "index out of range, options are: [%s]" % stringify(e.options) else: display(e.options) else: display(page.url) def summary(topic, index): try: display(wikipedia.summary(topic)) except wikipedia.exceptions.DisambiguationError as e: if index is not None: try: display(wikipedia.summary(e.options[index])) except IndexError: print "index out of range, options are: [%s]" % stringify(e.options) else: display(e.options) def parse_args(): args = sys.argv[1:] if not args: args = sys.stdin.read().split() parser = optparse.OptionParser(usage="!wiki [index] [--search|--url]") parser.add_option("--search", action="store_true") parser.add_option("--url", action="store_true") parser.add_option("-v", "--version", action="store_true") return parser.parse_args(args) def main(): options, args = parse_args() if options.version: print version sys.exit(0) if args: topic = args.pop(0) index = int(args.pop(0)) if args else None if options.search: search(topic, index) elif options.url: url(topic, index) else: summary(topic, index) if __name__ == "__main__": main()