2 Colorful user's timeline stream
5 from __future__
import print_function
7 import os
, os
.path
, argparse
, random
9 from twitter
.stream
import TwitterStream
, Timeout
, HeartbeatTimeout
, Hangup
10 from twitter
.oauth
import OAuth
, read_token_file
11 from twitter
.util
import printNicely
12 from dateutil
import parser
13 from pyfiglet
import figlet_format
22 d
= [red
, green
, yellow
, blue
, magenta
, cyan
, white
]
23 fi
= figlet_format('Rainbow Stream', font
='doom')
25 [random
.choice(d
)(i
) for i
in fi
.split('\n')]
36 screen_name
= t
['user']['screen_name']
37 name
= t
['user']['name']
38 created_at
= t
['created_at']
39 date
= parser
.parse(created_at
)
40 time
= date
.strftime('%Y/%m/%d %H:%M:%S')
43 user
= green(name
) + ' ' + yellow('@' + screen_name
) + ' '
44 clock
= magenta('['+ time
+ ']')
46 userlen
= len(name
+ screen_name
) + 3
47 clocklen
= len(time
) + 2
50 terminalrows
, terminalcolumns
= os
.popen('stty size', 'r').read().split()
51 line1
= u
"{u:>{uw}} {t:>{tw}}".format(
55 tw
= len(clock
) + int(terminalcolumns
) - userlen
- 4 - clocklen
61 return line1
, line2
, line3
64 def parse_arguments():
69 parser
= argparse
.ArgumentParser(description
=__doc__
or "")
71 parser
.add_argument('-to', '--timeout', help='Timeout for the stream (seconds).')
72 parser
.add_argument('-ht', '--heartbeat-timeout', help='Set heartbeat timeout.', default
=90)
73 parser
.add_argument('-nb', '--no-block', action
='store_true', help='Set stream to non-blocking.')
74 parser
.add_argument('-tt', '--track-keywords', help='Search the stream for specific text.')
75 return parser
.parse_args()
79 args
= parse_arguments()
84 # When using twitter stream you must authorize.
85 oauth_filename
= os
.environ
.get('HOME', os
.environ
.get('USERPROFILE', '')) + os
.sep
+ '.twitter_oauth'
86 oauth_token
, oauth_token_secret
= read_token_file(oauth_filename
)
87 auth
= OAuth(oauth_token
, oauth_token_secret
, CONSUMER_KEY
, CONSUMER_SECRET
)
89 # These arguments are optional:
92 block
=not args
.no_block
,
93 heartbeat_timeout
=args
.heartbeat_timeout
)
97 if args
.track_keywords
:
98 query_args
['track'] = args
.track_keywords
101 stream
= TwitterStream(auth
=auth
, domain
='userstream.twitter.com', **stream_args
)
102 tweet_iter
= stream
.user(**query_args
)
104 # Iterate over the sample stream.
105 for tweet
in tweet_iter
:
107 printNicely("-- None --")
108 elif tweet
is Timeout
:
109 printNicely("-- Timeout --")
110 elif tweet
is HeartbeatTimeout
:
111 printNicely("-- Heartbeat Timeout --")
112 elif tweet
is Hangup
:
113 printNicely("-- Hangup --")
114 elif tweet
.get('text'):
115 line1
, line2
, line3
= draw(t
= tweet
)
120 if __name__
== '__main__':