import argparse
import time
import requests
+import webbrowser
from twitter.stream import TwitterStream, Timeout, HeartbeatTimeout, Hangup
from twitter.api import *
'mentions',
't',
'rt',
+ 'quote',
'allrt',
'fav',
'rep',
's',
'mes',
'show',
+ 'open',
'ls',
'inbox',
'sent',
g['decorated_name'] = color_func(c['DECORATED_NAME'])('[' + name + ']: ')
g['ascii_art'] = True
- files = os.listdir('rainbowstream/colorset')
+ files = os.listdir(os.path.dirname(__file__)+'/colorset')
themes = [f.split('.')[0] for f in files if f.split('.')[-1] == 'json']
themes += ['custom']
g['themes'] = themes
t.statuses.retweet(id=tid, include_entities=False, trim_user=True)
+def quote():
+ """
+ Quote a tweet
+ """
+ t = Twitter(auth=authen())
+ try:
+ id = int(g['stuff'].split()[0])
+ except:
+ printNicely(red('Sorry I can\'t understand.'))
+ return
+ tid = db.rainbow_to_tweet_query(id)[0].tweet_id
+ tweet = t.statuses.show(id=tid)
+ screen_name = tweet['user']['screen_name']
+ text = tweet['text']
+ quote = '\"@' + screen_name + ': ' + text + '\"'
+ quote = quote.encode('utf8')
+ notice = light_magenta('Compose mode ')
+ notice += light_yellow('(Enter nothing will cancel the quote)')
+ notice += light_magenta(':')
+ printNicely(notice)
+ extra = raw_input(quote)
+ if extra:
+ t.statuses.update(status=quote+extra)
+ else:
+ printNicely(light_magenta('No text added.'))
+
+
def allretweet():
"""
List all retweet
printNicely(red('Sorry I can\'t show this image.'))
+def urlopen():
+ """
+ Open url
+ """
+ t = Twitter(auth=authen())
+ try:
+ if not g['stuff'].isdigit():
+ return
+ tid = db.rainbow_to_tweet_query(g['stuff'])[0].tweet_id
+ tweet = t.statuses.show(id=tid)
+ link_ary = [u for u in tweet['text'].split() if u.startswith('http://')]
+ if not link_ary:
+ printNicely(light_magenta('No url here @.@!'))
+ return
+ for link in link_ary:
+ webbrowser.open(link)
+ except:
+ printNicely(red('Sorry I can\'t open url in this tweet.'))
+
+
def list():
"""
List friends for followers
# Format
rel = os.popen('cal').read().split('\n')
month = rel.pop(0)
- month = random_rainbow(month)
date = rel.pop(0)
- date = ' '.join([cycle_color(i) for i in date.split(' ')])
- today = str(int(os.popen('date +\'%d\'').read().strip()))
- # Display
- printNicely(month)
- printNicely(date)
- for line in rel:
- ary = line.split(' ')
- ary = map(lambda x: on_grey(x) if x == today else grey(x), ary)
- printNicely(' '.join(ary))
+ show_calendar(month, date, rel)
def theme():
else:
line = ' '*4 + line
printNicely(line)
+ elif g['stuff'] == 'current_as_default':
+ # Set default
+ path = os.path.dirname(__file__) + '/colorset/init'
+ f = open(path,'w')
+ f.write(c['theme'])
+ f.close()
+ os.system('chmod 777 ' + path)
+ printNicely(light_green('Okay it will be applied from next time :)'))
else:
# Change theme
try:
# Load new config
- c['theme'] = g['stuff']
if g['stuff'] != 'custom':
- new_config = 'rainbowstream/colorset/' + g['stuff'] + '.json'
+ new_config = os.path.dirname(__file__) + '/colorset/' + g['stuff'] + '.json'
else:
new_config = os.environ.get(
'HOME',os.environ.get(
c[nc] = new_config[nc]
# Update db and reset colors
db.theme_update(g['stuff'])
+ c['theme'] = g['stuff']
+ reset_cycle()
g['decorated_name'] = color_func(
c['DECORATED_NAME'])(
'[@' + g['original_name'] + ']: ')
printNicely(green('Theme changed.'))
except:
if g['stuff'] == 'custom':
- printNicely(light_magenta('~/.rainbow_config.json is not exists!'))
+ printNicely(red('~/.rainbow_config.json is not exists!'))
else:
printNicely(red('No such theme exists.'))
usage += s * 2 + \
light_green('rt 12 ') + ' will retweet to tweet with ' + \
light_yellow('[id=12]') + '.\n'
+ usage += s * 2 + \
+ light_green('quote 12 ') + ' will quote the tweet with ' + \
+ light_yellow('[id=12]') + '. If no extra text is added, ' + \
+ 'the quote will be canceled.\n'
usage += s * 2 + \
light_green('allrt 12 20 ') + ' will list 20 newest retweet of the tweet with ' + \
light_yellow('[id=12]') + '.\n'
light_yellow('[id=12]') + '.\n'
usage += s * 2 + light_green('show image 12') + ' will show image in tweet with ' + \
light_yellow('[id=12]') + ' in your OS\'s image viewer.\n'
+ usage += s * 2 + light_green('open 12') + ' will open url in tweet with ' + \
+ light_yellow('[id=12]') + ' in your OS\'s default browser.\n'
# Direct message
usage += '\n'
# Follower and following
usage += '\n'
- usage += s + grey(u'\u266A' + ' Fiends and followers \n')
+ usage += s + grey(u'\u266A' + ' Friends and followers \n')
usage += s * 2 + \
light_green('ls fl') + \
' will list all followers (people who are following you).\n'
printNicely(magenta('Need tips ? Type "h" and hit Enter key!'))
g['reset'] = False
try:
- printNicely(eval(g['cmd']))
- except:
+ printNicely(str(eval(g['cmd'])))
+ except Exception:
pass
mentions,
tweet,
retweet,
+ quote,
allretweet,
favorite,
reply,
search,
message,
show,
+ urlopen,
list,
inbox,
sent,
[], # mentions
[], # tweet
[], # retweet
+ [], # quote
[], # allretweet
[], # favorite
[], # reply
['#'], # search
['@'], # message
['image'], # show image
+ [''], # open url
['fl', 'fr'], # list
[], # inbox
[], # sent
['@'], # unblock
['@'], # report
[], # cal
- g['themes'], # theme
+ g['themes'] + ['current_as_default'], # theme
[], # help
[], # clear
[], # quit
try:
g['stuff'] = ' '.join(line.split()[1:])
process(cmd)()
- except Exception as e:
+ except Exception,e :
print e
printNicely(red('OMG something is wrong with Twitter right now.'))
# Not redisplay prefix
domain=domain,
**stream_args)
- if domain == c['USER_DOMAIN']:
- tweet_iter = stream.user(**query_args)
- elif domain == c['SITE_DOMAIN']:
- tweet_iter = stream.site(**query_args)
- else:
- if args.track_keywords:
- tweet_iter = stream.statuses.filter(**query_args)
+ try:
+ if domain == c['USER_DOMAIN']:
+ tweet_iter = stream.user(**query_args)
+ elif domain == c['SITE_DOMAIN']:
+ tweet_iter = stream.site(**query_args)
else:
- tweet_iter = stream.statuses.sample()
+ if args.track_keywords:
+ tweet_iter = stream.statuses.filter(**query_args)
+ else:
+ tweet_iter = stream.statuses.sample()
- # Iterate over the stream.
- try:
+ # Iterate over the stream.
for tweet in tweet_iter:
if tweet is None:
printNicely("-- None --")
fil=args.filter,
ig=args.ignore,
)
- except:
+ except TwitterHTTPError:
+ printNicely('')
printNicely(
- magenta("I'm afraid we have problem with twitter'S maximum connection."))
- printNicely(magenta("Let's try again later."))
+ magenta("We have maximum connection problem with twitter'stream API right now :("))
def fly():
"""
# Spawn stream process
args = parse_arguments()
- get_decorated_name()
+ try:
+ get_decorated_name()
+
+ except TwitterHTTPError:
+ printNicely('')
+ printNicely(
+ magenta("I'm afraid we have maximum connection problem with twitter right now :("))
+ printNicely(magenta("Let's try again later."))
+ save_history()
+ os.system('rm -rf rainbow.db')
+ sys.exit()
+
p = Process(
target=stream,
args=(
- c['USER_DOMAIN'],
+ c['USER_DOMAIN'],
args,
g['original_name']))
p.start()