add tweet function
[rainbowstream.git] / rainbowstream / rainbow.py
index 2a070e3..632048f 100644 (file)
@@ -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)
+