Never been to DZone Snippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

About this user

Andrew Pennebaker http://mcandre.devjavu.com/wiki

« Newer Snippets
Older Snippets »
Showing 1-1 of 1 total  RSS 

tw.py

// Sets and views Twitter status

   1  
   2  #!/usr/bin/env python
   3  
   4  __author__="Andrew Pennebaker (andrew.pennebaker@gmail.com)"
   5  __date__="17 Jun 2007 - 28 Jun 2007"
   6  __copyright__="Copyright 2007 Andrew Pennebaker"
   7  __license__="GPL"
   8  __version__="0.0.1"
   9  __credits__="Based on tweetyPy (http://muffinresearch.co.uk/archives/2007/03/24/tweetypy-python-based-cli-client-for-twitter/)"
  10  __URL__="http://snippets.dzone.com/posts/show/4150"
  11  
  12  import sys, getopt, getpass, urllib, urllib2
  13  
  14  import configreader
  15  
  16  STATUS_MODE="STATUS"
  17  VIEW_MODE="VIEW"
  18  COMMAND_MODE="COMMAND"
  19  
  20  COMMANDS="""Command\t\tMeaning
  21  
  22  d username\tDirect Text
  23  @username\tReply
  24  follow username\tReceive updates via phone or IM
  25  leave username\tStop following username
  26  leave all\tStop following all friends
  27  remove username\tRemove username from friends list
  28  delete username\tDelete username from friends list
  29  get username\tGet the last update from username
  30  get\tGet the most recent updates from all friends
  31  nudge username\tTwitter aks what the person is currently up to
  32  whois username\tGet username's bio
  33  add phonenumber\tSend text invite. If already a member, invite will turn into a friend request.
  34  accept username\tAccept username as a friend
  35  deny username\tDeny username as friend"""
  36  
  37  def usage():
  38  	print "Usage: %s [options]" % (sys.argv[0])
  39  	print "\nWithout any options, uses status mode. Leftover args are concatenated to form message."
  40  	print "\n-u|--username <username> specified in tw.conf"
  41  	print "-s|--status mode"
  42  	print "-v|--view status"
  43  	print "-l|--list-commands List Twitter commands"
  44  	print "-c|--config <configfile>"
  45  	print "-h|--help"
  46  
  47  	sys.exit()
  48  
  49  def set_status(settings, status):
  50  	auth=urllib2.HTTPPasswordMgrWithDefaultRealm()
  51  	auth.add_password(None, settings["rootauthurl"], settings["username"], settings["password"])
  52  	authHandler=urllib2.HTTPBasicAuthHandler(auth)
  53  	opener=urllib2.build_opener(authHandler)
  54  
  55  	url="http://twitter.com/statuses/update.xml"
  56  	post=urllib.urlencode({"status":status})
  57  
  58  	request=urllib2.Request(url, post)
  59  	request.add_header("User-Agent", settings["useragent"])
  60  
  61  	try:
  62  		response=opener.open(request)
  63  	except IOError, e:
  64  		raise "Could not connect."
  65  
  66  def view_status(settings):
  67  	url="http://twitter.com/"+settings["username"]
  68  	message=""
  69  
  70  	statusdelimeter1=settings["statusdelimeter1"]
  71  	statusdelimeter2=settings["statusdelimeter2"]
  72  
  73  	try:
  74  		instream=urllib.urlopen(url)
  75  		for line in instream:
  76  			if statusdelimeter1 in line:
  77  				message=line[
  78  					line.index(statusdelimeter1)+len(statusdelimeter1):line.index(statusdelimeter2)
  79  				]
  80  				break
  81  		instream.close()
  82  
  83  		return message
  84  				
  85  	except IOError, e:
  86  		raise "Could not connect."
  87  
  88  def main():
  89  	global STATUS_MODE
  90  	global VIEW_MODE
  91  	global COMMAND_MODE
  92  	global COMMANDS
  93  
  94  	sysArgs=sys.argv[1:]
  95  
  96  	mode=STATUS_MODE
  97  
  98  	settings={
  99  		"config":"tw.conf",
 100  		"username":"mcandre",
 101  		"rootauthurl":"http://twitter.com/statuses/",
 102  		"useragent":sys.argv[0]+" "+__version__,
 103  		"statusdelimeter1":"<p class=\"entry-title entry-content\">",
 104  		"statusdelimeter2":"</p>"
 105  	}
 106  
 107  	optlist, args=[], []
 108  	try:
 109  		optlist, args=getopt.getopt(sysArgs, "u:svlc:h", ["username=", "status", "view", "list-commands", "config=", "help"])
 110  	except:
 111  		usage()
 112  
 113  	for option, value in optlist:
 114  		if option=="-c" or option=="--config":
 115  			settings["config"]=value
 116  
 117  	try:
 118  		configreader.load(open(settings["config"], "r"), settings)
 119  	except IOError, e:
 120  		pass
 121  
 122  	for option, value in optlist:
 123  		if option=="-h" or option=="--help":
 124  			usage()
 125  
 126  		elif option=="-u" or option=="--username":
 127  			settings["username"]=value
 128  		elif option=="-s" or option=="--status":
 129  			mode=STATUS_MODE
 130  		elif option=="-v" or option=="--view":
 131  			mode=VIEW_MODE
 132  		elif option=="-l" or option=="--list=commands":
 133  			mode=COMMAND_MODE
 134  
 135  	if mode==STATUS_MODE:
 136  		if len(args)<1:
 137  			usage()
 138  
 139  		message=" ".join(args)
 140  
 141  		settings["password"]=getpass.getpass()
 142  
 143  		set_status(settings, message)
 144  	elif mode==VIEW_MODE:
 145  		print view_status(settings)
 146  	elif mode==COMMAND_MODE:
 147  		print COMMANDS
 148  
 149  if __name__=="__main__":
 150  	try:
 151  		main()
 152  	except KeyboardInterrupt, e:
 153  		pass
« Newer Snippets
Older Snippets »
Showing 1-1 of 1 total  RSS