summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xwikiquery78
1 files changed, 52 insertions, 26 deletions
diff --git a/wikiquery b/wikiquery
index 10356dd..b7f7648 100755
--- a/wikiquery
+++ b/wikiquery
@@ -1,12 +1,13 @@
#! /usr/bin/env python
+import shlex
import optparse
import sys
import wikipedia
from functools import partial
-version = "0.0.2"
+version = "0.1.1"
def stringify(o):
if isinstance(o, list):
@@ -20,15 +21,59 @@ def stringify(o):
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():
- parser = optparse.OptionParser(usage="!wiki <topic> [--search|--url]")
+ args = sys.argv[1:]
+
+ if not args:
+ args = sys.stdin.read().splitlines()
+
+ parser = optparse.OptionParser(usage="!wiki <topic> [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()
+ return parser.parse_args(args)
def main():
options, args = parse_args()
@@ -42,31 +87,12 @@ def main():
index = int(args.pop(0)) if args else None
if options.search:
- 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)
+ search(topic, index)
elif options.url:
- page = wikipedia.page(topic)
- display(page.url)
+ url(topic, index)
else:
- 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)
+ summary(topic, index)
+
if __name__ == "__main__":
main()