1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
#!/usr/bin/python
'''Post a message to twitter'''
__author__ = 'dewitt@google.com'
import ConfigParser
import getopt
import os
import sys
import twitter
USAGE = '''Usage: tweet [options] message
This script posts a message to Twitter.
Options:
-h --help : print this help
--username : the twitter username [optional]
--password : the twitter password [optional]
Documentation:
If the --username or --password command line arguments are present they
will be used to authenticate to Twitter.
If either of the command line flags are not present, the environment
variables TWEETUSERNAME and TWEETPASSWORD will then be checked for your
username or password, respectively.
If neither the command line flags nor the enviroment variables are
present, the .tweetrc file, if it exists, can be used to set the
default username and password. The file should contain the
following three lines, replacing *username* with your username, and
*possword* with your password:
A skeletal .tweetrc file:
[Tweet]
username: *username*
password: *password*
'''
def PrintUsageAndExit():
print USAGE
sys.exit(2)
def GetUsernameEnv():
return os.environ.get("TWEETUSERNAME", None)
def GetPasswordEnv():
return os.environ.get("TWEETPASSWORD", None)
class TweetRc(object):
def __init__(self):
self._config = None
def GetUsername(self):
return self._GetOption('username')
def GetPassword(self):
return self._GetOption('password')
def _GetOption(self, option):
try:
return self._GetConfig().get('Tweet', option)
except:
return None
def _GetConfig(self):
if not self._config:
self._config = ConfigParser.ConfigParser()
self._config.read(os.path.expanduser('~/.tweetrc'))
return self._config
def main():
try:
shortflags = 'h'
longflags = ['help', 'username=', 'password=', 'encoding=']
opts, args = getopt.gnu_getopt(sys.argv[1:], shortflags, longflags)
except getopt.GetoptError:
PrintUsageAndExit()
usernameflag = None
passwordflag = None
encoding = None
for o, a in opts:
if o in ("-h", "--help"):
PrintUsageAndExit()
if o in ("--username"):
usernameflag = a
if o in ("--password"):
passwordflag = a
if o in ("--encoding"):
encoding = a
message = ' '.join(args)
if not message:
PrintUsageAndExit()
rc = TweetRc()
username = usernameflag or GetUsernameEnv() or rc.GetUsername()
password = passwordflag or GetPasswordEnv() or rc.GetPassword()
if not username or not password:
PrintUsageAndExit()
api = twitter.Api(username=username, password=password, input_encoding=encoding)
try:
status = api.PostUpdate(message)
except UnicodeDecodeError:
print "Your message could not be encoded. Perhaps it contains non-ASCII characters? "
print "Try explicitly specifying the encoding with the it with the --encoding flag"
sys.exit(2)
print "%s just posted: %s" % (status.user.name, status.text)
if __name__ == "__main__":
main()
|