From: Orakaro Date: Sat, 24 May 2014 19:51:36 +0000 (+0900) Subject: add tweet function X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=5427711498b4600d809c7bcb0e45fe07eee68adc;p=rainbowstream.git add tweet function --- diff --git a/rainbowstream/rainbow.py b/rainbowstream/rainbow.py index 2a070e3..632048f 100644 --- a/rainbowstream/rainbow.py +++ b/rainbowstream/rainbow.py @@ -3,12 +3,12 @@ Colorful user's timeline stream """ from __future__ import print_function +from multiprocessing import Process -import os -import os.path -import argparse +import os, os.path, argparse, sys, time from twitter.stream import TwitterStream, Timeout, HeartbeatTimeout, Hangup +from twitter.api import * from twitter.oauth import OAuth, read_token_file from twitter.oauth_dance import oauth_dance from twitter.util import printNicely @@ -17,6 +17,7 @@ from dateutil import parser from .colors import * from .config import * +auth_obj = {} def draw(t): """ @@ -31,7 +32,7 @@ def draw(t): time = date.strftime('%Y/%m/%d %H:%M:%S') # Format info - user = cycle_color(name + ' ' + '@' + screen_name + ' ') + user = cycle_color(name) + grey(' ' + '@' + screen_name + ' ') clock = grey('[' + time + ']') tweet = text.split() tweet = map(lambda x: grey(x) if x == 'RT' else x, tweet) @@ -82,12 +83,10 @@ def parse_arguments(): return parser.parse_args() -def stream(): - args = parse_arguments() - - # The Logo - ascii_art() - +def authen(): + """ + authenticate with Twitter OAuth + """ # When using rainbow stream you must authorize. twitter_credential = os.environ.get( 'HOME', @@ -100,12 +99,52 @@ def stream(): CONSUMER_SECRET, twitter_credential) oauth_token, oauth_token_secret = read_token_file(twitter_credential) - auth = OAuth( + return OAuth( oauth_token, oauth_token_secret, CONSUMER_KEY, CONSUMER_SECRET) + +def get_decorated_name(): + """ + Beginning of every line + """ + t = Twitter(auth=authen()) + name = '@' + t.statuses.user_timeline()[-1]['user']['screen_name'] + auth_obj['decorated_name'] = grey('[') + grey(name) + grey(']: ') + +def tweet(stuff): + """ + Authen and tweet + """ + t = Twitter(auth=authen()) + t.statuses.update(status=stuff) + + +def listen(stdin): + """ + Listen to user's input + """ + for line in iter(stdin.readline, ''): + # Public tweet + if line.startswith('!'): + tweet(line[1:]) + else: + sys.stdout.write(auth_obj['decorated_name']) + stdin.close() + + +def stream(): + """ + Ouput the stream + """ + args = parse_arguments() + + # The Logo + ascii_art() + print("Tip: Press ENTER and put a '!' in the beginning to start composing a new tweet") + print('\n') # These arguments are optional: stream_args = dict( timeout=args.timeout, @@ -119,8 +158,8 @@ def stream(): # Get stream stream = TwitterStream( - auth=auth, - domain='userstream.twitter.com', + auth = authen(), + domain = 'userstream.twitter.com', **stream_args) tweet_iter = stream.user(**query_args) @@ -140,3 +179,14 @@ def stream(): printNicely(line2) printNicely(line3) printNicely(line4) + + +def fly(): + """ + Main function + """ + get_decorated_name() + p = Process(target = stream) + p.start() + listen(sys.stdin) + diff --git a/setup.py b/setup.py index f30c5f6..28ebdf3 100644 --- a/setup.py +++ b/setup.py @@ -42,6 +42,6 @@ setup(name='rainbowstream', entry_points=""" # -*- Entry points: -*- [console_scripts] - rainbowstream=rainbowstream.rainbow:stream + rainbowstream=rainbowstream.rainbow:fly """, )