1
2
3
4 __author__="Andrew Pennebaker (andrew.pennebaker@gmail.com)"
5 __date__="9 Dec 2006 - 10 Dec 2006"
6 __copyright__="Copyright 2006 Andrew Pennebaker"
7 __license__="GPL"
8 __version__="0.0.1"
9 __credits__="Based on Yubnub for Windows (http://www.opbarnes.com/blog/Programming/OPB/Utilities/yubnub.html)"
10 __URL__="http://snippets.dzone.com/posts/show/3120"
11
12 from html2txt import html2txt
13
14 import webbrowser
15 from urllib import urlopen
16 import re
17
18 import sys
19 from getopt import getopt
20
21 PARSER="http://yubnub.org/parser/parse?command="
22
23 BROWSER_MODE="BROWSER"
24 PLAIN_MODE="PLAIN"
25
26 def space2plus(s):
27 return "+".join(s.split())
28
29 def yubnub(command=""):
30 global PARSER
31
32 return PARSER+space2plus(command)
33
34 def yubnubBrowser(command):
35 return webbrowser.open(yubnub(command))
36
37 def cleanHTML(html):
38 h=html2txt()
39 h.feed(html)
40 h.close()
41
42 return h.output()
43
44 def yubnubPlain(command, clean=True):
45 command=yubnub(command)
46
47 try:
48 url=urlopen(command)
49 lines=url.readlines()
50 url.close()
51
52 lines="".join(lines)
53
54 if clean:
55 return cleanHTML(lines)
56
57 return lines
58
59 except IOError, e:
60 return "Error connecting to "+command
61
62 def usage():
63 print "Usage: "+sys.argv[0]+" [options] <command>"
64 print "-b --browser"
65 print "\n--plain (default)"
66 print "\t-c --clean (default)"
67 print "\t-d --dirty"
68 print "\n--parser <parser> (experimental)"
69 print "\n-h --help"
70
71 sys.exit()
72
73 def main():
74 global PARSER
75
76 global BROWSER_MODE
77 global PLAIN_MODE
78
79 mode=PLAIN_MODE
80 parser=PARSER
81 clean=True
82
83 systemArgs=sys.argv[1:]
84 optlist, args=[], []
85 try:
86 optlist, args=getopt(systemArgs, "bhcd", ["browser", "plain", "clean", "dirty", "parser=", "help"])
87 except:
88 usage()
89
90 for option, value in optlist:
91 if option=="-h" or option=="--help":
92 usage()
93
94 elif option=="-b" or option=="--browser":
95 mode=BROWSER_MODE
96 elif option=="--plain":
97 mode=PLAIN_MODE
98 elif option=="-c" or option=="--clean":
99 clean=True
100 elif option=="-d" or option=="--dirty":
101 clean=False
102 elif option=="--parser":
103 parser=value
104
105 command=" ".join(args)
106
107 if mode==BROWSER_MODE:
108 yubnubBrowser(command)
109 elif mode==PLAIN_MODE:
110 for line in yubnubPlain(command, clean):
111 sys.stdout.write(line)
112 print ""
113
114 if __name__=="__main__":
115 main()