Dan Carroll avatar Dan Carroll committed 1cbf251

Use OptionParser to parse arguments. Make twits.py work sanely.

Comments (0)

Files changed (1)

 #! /usr/bin/env python
+"""twits is a simple command-line interface to show you the 
+latest tweets without distracting you"""
 
 import sys
 import twitter
 
-def printPublicTweets():
+from optparse import OptionParser, OptionGroup
+
+def getPublicTweets():
     api = twitter.Api()
-    tweets = api.GetPublicTimeline()
-    printTweets(tweets)
+    return api.GetPublicTimeline()
 
-def printUserTweets(user):
+def getUserTweets(user):
     api = twitter.Api()
-    tweets = api.GetUserTimeline(user)
-    printTweets(tweets)
+    return api.GetUserTimeline(user)
 
-def printTweets(tweets):
-    for tweet in tweets:
-	print "%s: %s" % (tweet.relative_created_at, tweet.text)
+def printTweets(tweets, count):
+    for tweet in tweets[:count]:
+	    print "%s: %s" % (tweet.relative_created_at, tweet.text)
+
+def _build_parser():
+    """Return a parser for the command-line interface."""
+    usage = "Usage: %prog [-u USERNAME] [-c COUNT]"
+    parser = OptionParser(usage=usage)
+    
+    config = OptionGroup(parser, "Configuration Options")
+    config.add_option("-u", "--user", dest="user", default="",
+                      help="Show a specific USER")
+    config.add_option("-c", "--count", dest="count", default="10",
+                      help="Show COUNT number of tweets")
+    parser.add_option_group(config)
+    
+    return parser
+
+def _main():
+    """Run the twits program."""
+    (options, args) = _build_parser().parse_args()
+
+    # print options
+    # print args
+
+    if options.user:
+	    tweets = getUserTweets(options.user)
+    else:
+	    tweets = getPublicTweets()
+
+    printTweets(tweets, int(options.count))
 
 if __name__ == "__main__":
-    print sys.argv
-    if len(sys.argv) > 2:
-	print "argument problem"
-    else:
-	if len(sys.argv) == 2:
-	    printUserTweets(sys.argv[1])
-	else:
-	    printPublicTweets()
+    _main()
 
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.