X-Git-Url: https://vcs.fsf.org/?p=rainbowstream.git;a=blobdiff_plain;f=rainbowstream%2Fdraw.py;h=f23e4cacd70d8ab9558573289590a924673e3a8e;hp=0abdedee7657245f2380c1f020de20a0a4f2cee8;hb=fb835f1e803418a4cdd9a4fe76c518eef28d64cf;hpb=fa6e062d577aaf246757ca266f241ce83db252ad diff --git a/rainbowstream/draw.py b/rainbowstream/draw.py index 0abdede..f23e4ca 100644 --- a/rainbowstream/draw.py +++ b/rainbowstream/draw.py @@ -3,6 +3,7 @@ import itertools import requests import datetime import time +import re from twitter.util import printNicely from functools import wraps @@ -19,6 +20,11 @@ db = RainbowDB() g = {} +def unescape(s): + p = HTMLParser() + return p.unescape(s) + + def init_cycle(): """ Init the cycle @@ -28,11 +34,9 @@ def init_cycle(): else term_color(int(i)) for i in c['CYCLE_COLOR']] return itertools.cycle(colors_shuffle) -g['cyc'] = init_cycle() -g['cache'] = {} -def reset_cycle(): +def start_cycle(): """ Notify from rainbow """ @@ -140,7 +144,7 @@ def color_func(func_name): return globals()[func_name] -def draw(t, iot=False, keyword=None, fil=[], ig=[]): +def draw(t, iot=False, keyword=None, check_semaphore=False, fil=[], ig=[]): """ Draw the rainbow """ @@ -157,6 +161,15 @@ def draw(t, iot=False, keyword=None, fil=[], ig=[]): date = date - datetime.timedelta(seconds=time.timezone) clock = date.strftime('%Y/%m/%d %H:%M:%S') + # Pull extended retweet text + try: + text = 'RT @{0}: {1}'.format(t['retweeted_status']['user']['screen_name'], + t['retweeted_status']['text']) + except: + pass + + text = unescape(text) + # Get expanded url try: expanded_url = [] @@ -219,16 +232,16 @@ def draw(t, iot=False, keyword=None, fil=[], ig=[]): c['TWEET']['link'])(x) if x[ 0:4] == 'http' else x, tweet) - # Highlight search keyword - if keyword: - tweet = lmap( - lambda x: color_func(c['TWEET']['keyword'])(x) if - ''.join(c for c in x if c.isalnum()).lower() == keyword.lower() - else x, - tweet - ) - # Recreate tweet + + # Highlight keyword tweet = ' '.join(tweet) + if keyword: + roj = re.search(keyword,tweet,re.IGNORECASE) + if roj: + occur = roj.group() + ary = tweet.split(occur) + delimeter = color_func(c['TWEET']['keyword'])(occur) + tweet = delimeter.join(ary) # Draw rainbow line1 = u"{u:>{uw}}:".format( @@ -241,6 +254,12 @@ def draw(t, iot=False, keyword=None, fil=[], ig=[]): ) line3 = ' ' + tweet + # Check the semaphore lock + if check_semaphore: + while db.semaphore_query(): + time.sleep(0.5) + + # Output printNicely('') printNicely(line1) printNicely(line2) @@ -262,7 +281,7 @@ def print_message(m): """ sender_screen_name = '@' + m['sender_screen_name'] sender_name = m['sender']['name'] - text = m['text'] + text = unescape(m['text']) recipient_screen_name = '@' + m['recipient_screen_name'] recipient_name = m['recipient']['name'] mid = m['id'] @@ -445,3 +464,7 @@ def print_list(group): printNicely(line4) printNicely('') + + +# Start the color cycle +start_cycle()