X-Git-Url: https://vcs.fsf.org/?p=rainbowstream.git;a=blobdiff_plain;f=rainbowstream%2Frainbow.py;h=2a070e35814a8d517e943e058e6c463868958737;hp=43fa026999848d1e98c720d5babc2922d6c51644;hb=fe515e80929f50a50934a2645b6eb97a25ea6df2;hpb=06773ffe10d269c9a6d3763faa77a1a10063e0b6 diff --git a/rainbowstream/rainbow.py b/rainbowstream/rainbow.py index 43fa026..2a070e3 100644 --- a/rainbowstream/rainbow.py +++ b/rainbowstream/rainbow.py @@ -4,27 +4,18 @@ Colorful user's timeline stream from __future__ import print_function -import os, os.path, argparse, random +import os +import os.path +import argparse from twitter.stream import TwitterStream, Timeout, HeartbeatTimeout, Hangup from twitter.oauth import OAuth, read_token_file +from twitter.oauth_dance import oauth_dance from twitter.util import printNicely from dateutil import parser -from pyfiglet import figlet_format -from colors import * -from config import * - -def asciiart(): - """ - Draw the Ascii Art - """ - d = [red, green, yellow, blue, magenta, cyan, white] - fi = figlet_format('Rainbow Stream', font='doom') - print('\n'.join( - [random.choice(d)(i) for i in fi.split('\n')] - ) - ) +from .colors import * +from .config import * def draw(t): @@ -40,19 +31,22 @@ def draw(t): time = date.strftime('%Y/%m/%d %H:%M:%S') # Format info - user = green(name) + ' ' + yellow('@' + screen_name) + ' ' - clock = magenta('['+ time + ']') - tweet = white(text) + user = cycle_color(name + ' ' + '@' + screen_name + ' ') + clock = grey('[' + time + ']') + tweet = text.split() + tweet = map(lambda x: grey(x) if x == 'RT' else x, tweet) + tweet = map(lambda x: cycle_color(x) if x[0] == '@' else x, tweet) + tweet = map(lambda x: cyan(x) if x[0:7] == 'http://' else x, tweet) + tweet = ' '.join(tweet) # Draw rainbow - terminalrows, terminalcolumns = os.popen('stty size', 'r').read().split() line1 = u"{u:>{uw}}:".format( - u = user, - uw = len(user) + 2, + u=user, + uw=len(user) + 2, ) line2 = u"{c:>{cw}}".format( - c = clock, - cw = len(clock) + 2, + c=clock, + cw=len(clock) + 2, ) line3 = ' ' + tweet line4 = '\n' @@ -67,23 +61,50 @@ def parse_arguments(): parser = argparse.ArgumentParser(description=__doc__ or "") - parser.add_argument('-to', '--timeout', help='Timeout for the stream (seconds).') - parser.add_argument('-ht', '--heartbeat-timeout', help='Set heartbeat timeout.', default=90) - parser.add_argument('-nb', '--no-block', action='store_true', help='Set stream to non-blocking.') - parser.add_argument('-tt', '--track-keywords', help='Search the stream for specific text.') + parser.add_argument( + '-to', + '--timeout', + help='Timeout for the stream (seconds).') + parser.add_argument( + '-ht', + '--heartbeat-timeout', + help='Set heartbeat timeout.', + default=90) + parser.add_argument( + '-nb', + '--no-block', + action='store_true', + help='Set stream to non-blocking.') + parser.add_argument( + '-tt', + '--track-keywords', + help='Search the stream for specific text.') return parser.parse_args() -def main(): +def stream(): args = parse_arguments() # The Logo - asciiart() - - # When using twitter stream you must authorize. - oauth_filename = os.environ.get('HOME', os.environ.get('USERPROFILE', '')) + os.sep + '.twitter_oauth' - oauth_token, oauth_token_secret = read_token_file(oauth_filename) - auth = OAuth(oauth_token, oauth_token_secret, CONSUMER_KEY, CONSUMER_SECRET) + ascii_art() + + # When using rainbow stream you must authorize. + twitter_credential = os.environ.get( + 'HOME', + os.environ.get( + 'USERPROFILE', + '')) + os.sep + '.rainbow_oauth' + if not os.path.exists(twitter_credential): + oauth_dance("Rainbow Stream", + CONSUMER_KEY, + CONSUMER_SECRET, + twitter_credential) + oauth_token, oauth_token_secret = read_token_file(twitter_credential) + auth = OAuth( + oauth_token, + oauth_token_secret, + CONSUMER_KEY, + CONSUMER_SECRET) # These arguments are optional: stream_args = dict( @@ -97,7 +118,10 @@ def main(): query_args['track'] = args.track_keywords # Get stream - stream = TwitterStream(auth=auth, domain='userstream.twitter.com', **stream_args) + stream = TwitterStream( + auth=auth, + domain='userstream.twitter.com', + **stream_args) tweet_iter = stream.user(**query_args) # Iterate over the sample stream. @@ -111,11 +135,8 @@ def main(): elif tweet is Hangup: printNicely("-- Hangup --") elif tweet.get('text'): - line1, line2, line3, line4 = draw(t = tweet) + line1, line2, line3, line4 = draw(t=tweet) printNicely(line1) printNicely(line2) printNicely(line3) printNicely(line4) - -if __name__ == '__main__': - main()