Update README.md
[rainbowstream.git] / rainbowstream / rainbow.py
index 19a0bfc037b20e1e4700b78b3e6d412a3e7ba378..9461d22679a274e70a61a35e571d0f91ecd6ee11 100644 (file)
@@ -19,7 +19,7 @@ from .config import *
 
 g = {}
 
-def draw(t):
+def draw(t,keyword=None):
     """
     Draw the rainbow
     """
@@ -35,9 +35,15 @@ def draw(t):
     user = cycle_color(name) + grey(' ' + '@' + screen_name + ' ')
     clock = grey('[' + time + ']')
     tweet = text.split()
+    # Highlight RT
     tweet = map(lambda x: grey(x) if x == 'RT' else x, tweet)
+    # Highlight screen_name
     tweet = map(lambda x: cycle_color(x) if x[0] == '@' else x, tweet)
+    # Highlight link
     tweet = map(lambda x: cyan(x) if x[0:7] == 'http://' else x, tweet)
+    # Highlight search keyword
+    if keyword:
+        tweet = map(lambda x: on_yellow(x) if ''.join(c for c in x if c.isalnum()).lower() == keyword.lower() else x, tweet)
     tweet = ' '.join(tweet)
 
     # Draw rainbow
@@ -62,9 +68,7 @@ def parse_arguments():
     """
     Parse the arguments
     """
-
     parser = argparse.ArgumentParser(description=__doc__ or "")
-
     parser.add_argument(
         '-to',
         '--timeout',
@@ -135,10 +139,36 @@ def search():
     printNicely(grey('**************************************************************************************\n'))
     print('Newest',SEARCH_MAX_RECORD, 'tweet: \n')
     for i in xrange(5):
-        draw(t=rel[i])
+        draw(t=rel[i],keyword=g['stuff'].strip())
     printNicely(grey('**************************************************************************************\n'))
 
 
+def friend():
+    """
+    List of friend (following)
+    """
+    t = Twitter(auth=authen())
+    g['friends'] = t.friends.ids()['ids']
+    for i in g['friends']:
+        screen_name = t.users.lookup(user_id=i)[0]['screen_name']
+        user = cycle_color('@'+screen_name)
+        print(user, end=' ')
+    print('\n');
+
+
+def follower():
+    """
+    List of follower
+    """
+    t = Twitter(auth=authen())
+    g['followers'] = t.followers.ids()['ids']
+    for i in g['followers']:
+        screen_name = t.users.lookup(user_id=i)[0]['screen_name']
+        user = cycle_color('@'+screen_name)
+        print(user, end=' ')
+    print('\n');
+
+
 def help():
     """
     Print help
@@ -146,17 +176,27 @@ def help():
     usage = '''
     Hi boss! I'm ready to serve you right now!
     ----------------------------------------------------
-    "!" at the beginning will start to tweet immediately
-    "/" at the beginning will search for 5 lastest twwet
-    "?" will print this help once again
+    "tweet" at the beginning will tweet immediately
+    "s" and follow by any word will search and return 5 newest tweet
+    "fr" will list out your following people
+    "fl" will list out your followers
+    "h" will print this help once again
+    "c" will clear the terminal
     "q" will exit
     ----------------------------------------------------
-    Hvae fun and hang tight!
+    Have fun and hang tight!
     '''
     printNicely(usage)
     sys.stdout.write(g['decorated_name'])
 
 
+def clear():
+    """
+    Exit all
+    """
+    os.system('clear')
+
+
 def quit():
     """
     Exit all
@@ -165,16 +205,19 @@ def quit():
     sys.exit()
 
 
-def process(line):
+def process(cmd):
     """
     Process switch by start of line
     """
     return {
-        '!' : tweet,
-        '/' : search,
-        '?' : help,
-        'q' : quit,
-    }.get(line[0],lambda: sys.stdout.write(g['decorated_name']))
+        'tweet' : tweet,
+        's'     : search,
+        'fr'    : friend,
+        'fl'    : follower,
+        'h'     : help,
+        'c'     : clear,
+        'q'     : quit,
+    }.get(cmd,lambda: sys.stdout.write(g['decorated_name']))
 
 
 def listen(stdin):
@@ -182,9 +225,13 @@ def listen(stdin):
     Listen to user's input
     """
     for line in iter(stdin.readline, ''):
+        try:
+            cmd = line.split()[0]
+        except:
+            cmd = ''
         # Save cmd to global variable and call process
-        g['stuff'] = line[1:]
-        process(line)()
+        g['stuff'] = ' '.join(line.split()[1:])
+        process(cmd)()
     stdin.close()