1
2
3
4 """Converts long URLs to tiny URLs, with either tinyurl, urltea, or a custom url."""
5
6 __author__="Andrew Pennebaker (andrew.pennebaker@gmail.com)"
7 __date__="22 Jun 2007 - 24 Jun 2007"
8 __copyright__="Copyright 2007 Andrew Pennebaker"
9 __license__="GPL"
10 __version__="0.0.1"
11 __URL__="http://snippets.dzone.com/posts/show/4195"
12 __credits__="http://lateral.netmanagers.com.ar/weblog/2007/04/08.html#BB548"
13
14 import sys, getopt, urllib
15
16 import configreader
17
18 def tiny(url, settings):
19 try:
20 encodedurl=settings["posting url"]+urllib.urlencode({"url":url})
21 instream=urllib.urlopen(encodedurl)
22 tinyurl=instream.read()
23 instream.close()
24
25 if len(tinyurl)==0:
26 return url
27
28 if settings["service"]=="urltea" and len(settings["description"])>0:
29 tinyurl+=settings["description delimeter"]+settings["description"]
30
31 return tinyurl
32 except IOError, e:
33 raise "Could not connect."
34
35 def usage():
36 print "Usage: %s [options] <url1> <url2> <url3> ..." % (sys.argv[0])
37 print "\nDefaults to urlTea unless specified in options or a config file."
38 print "\n-s|--service [tinyurl|urltea]"
39 print "-u|--custom-url <posting url>"
40 print "-d|--description <comment> May only be used with urltea."
41 print "-c|--config <configfile>"
42 print "-h|--help (usage)"
43
44 sys.exit()
45
46 def main():
47 systemArgs=sys.argv[1:]
48 oplist, args=[], []
49
50 settings={
51 "config":"tiny.conf",
52 "service":"urltea",
53 "urltea url":"http://urltea.com/api/text/?url=",
54 "tinyurl url":"http://tinyurl.com/api-create.php?",
55 "description delimeter":"?",
56 "description":""
57 }
58
59 try:
60 optlist, args=getopt.getopt(systemArgs, "s:u:d:c:h", ["service=", "custom-url=", "description=", "config=", "help"])
61 except:
62 usage()
63
64 for option, value in optlist:
65 if option=="-c" or option=="--config":
66 settings["config"]=value
67
68 try:
69 configreader.load(open(settings["config"], "r"), settings)
70 except IOError, e:
71 pass
72
73 for option, value in optlist:
74 if option=="-h" or option=="--help":
75 usage()
76 elif option=="-s" or option=="--service":
77 settings["service"]=value
78 elif option=="-d" or option=="--description":
79 settings["description"]=value
80
81 if settings["service"]!="urltea" and len(settings["description"])>0:
82 usage()
83
84 try:
85 settings["posting url"]=settings[settings["service"]+" url"]
86 except:
87 usage()
88
89 for option, value in optlist:
90 if option=="-u" or option=="--custom-url":
91 settings["posting url"]=value
92
93 if len(args)<1:
94 usage()
95
96 for u in args:
97 print tiny(u, settings)
98
99 if __name__=="__main__":
100 try:
101 main()
102 except KeyboardInterrupt, e:
103 pass