import argparse
import time
import datetime
+import requests
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
+from StringIO import StringIO
from .colors import *
from .config import *
from .consumer import *
from .interactive import *
from .db import *
+from .c_image import *
g = {}
db = RainbowDB()
'del',
'ufav',
's',
- 'fr',
+ 'show',
'fl',
+ 'ufl',
'h',
'c',
'q'
]
-def draw(t, keyword=None, fil=[], ig=[]):
+def draw(t, iot=False, keyword=None, fil=[], ig=[]):
"""
Draw the rainbow
"""
date = date - datetime.timedelta(seconds=time.timezone)
clock = date.strftime('%Y/%m/%d %H:%M:%S')
+ # Get expanded url
+ try:
+ expanded_url = []
+ url = []
+ urls = t['entities']['urls']
+ for u in urls:
+ expanded_url.append(u['expanded_url'])
+ url.append(u['url'])
+ except:
+ expanded_url = None
+ url = None
+
+ # Get media
+ try:
+ media_url = []
+ media = t['entities']['media']
+ for m in media:
+ media_url.append(m['media_url'])
+ except:
+ media_url = None
+
# Filter and ignore
screen_name = '@' + screen_name
if fil and screen_name not in fil:
if favorited:
meta = meta + green(u'\u2605')
tweet = text.split()
+ # Replace url
+ if expanded_url:
+ for index in range(len(expanded_url)):
+ tweet = map(
+ lambda x: expanded_url[index] if x == url[index] else x,
+ tweet)
# Highlight RT
tweet = map(lambda x: grey(x) if x == 'RT' else x, tweet)
# Highlight screen_name
else x,
tweet
)
+ # Recreate tweet
tweet = ' '.join(tweet)
# Draw rainbow
printNicely(line2)
printNicely(line3)
+ # Display Image
+ if iot and media_url:
+ for mu in media_url:
+ response = requests.get(mu)
+ image_to_display(StringIO(response.content))
+
def parse_arguments():
"""
'-ig',
'--ignore',
help='Ignore specific screen_name.')
+ parser.add_argument(
+ '-iot',
+ '--image-on-term',
+ action='store_true',
+ help='Display all image on terminal.')
return parser.parse_args()
if g['stuff'].isdigit():
num = g['stuff']
for tweet in reversed(t.statuses.home_timeline(count=num)):
- draw(t=tweet)
+ draw(t=tweet, iot=g['iot'])
printNicely('')
except:
num = HOME_TWEET_NUM
for tweet in reversed(t.statuses.user_timeline(count=num, screen_name=user[1:])):
- draw(t=tweet)
+ draw(t=tweet, iot=g['iot'])
printNicely('')
else:
printNicely(red('A name should begin with a \'@\''))
tid = db.rainbow_query(id)[0].tweet_id
t.favorites.create(_id=tid, include_entities=False)
printNicely(green('Favorited.'))
- draw(t.statuses.show(id=tid))
+ draw(t.statuses.show(id=tid), iot=g['iot'])
except:
printNicely(red('Omg some syntax is wrong.'))
tid = db.rainbow_query(id)[0].tweet_id
t.favorites.destroy(_id=tid)
printNicely(green('Okay it\'s unfavorited.'))
- draw(t.statuses.show(id=tid))
+ draw(t.statuses.show(id=tid), iot=g['iot'])
except:
printNicely(red('Sorry I can\'t unfavorite this tweet for you.'))
if len(rel):
printNicely('Newest tweets:')
for i in reversed(xrange(SEARCH_MAX_RECORD)):
- draw(t=rel[i], keyword=g['stuff'].strip()[1:])
+ draw(t=rel[i],
+ iot=g['iot'],
+ keyword=g['stuff'].strip()[1:])
printNicely('')
else:
printNicely(magenta('I\'m afraid there is no result'))
printNicely(red('Sorry I can\'t understand.'))
-def friend():
+def show():
"""
- List of friend (following)
+ Show image
"""
t = Twitter(auth=authen())
- g['friends'] = t.friends.ids()['ids']
- for i in g['friends']:
- name = t.users.lookup(user_id=i)[0]['name']
- screen_name = '@' + t.users.lookup(user_id=i)[0]['screen_name']
- user = cycle_color(name) + grey(' ' + screen_name + ' ')
- print user
+ try:
+ target = g['stuff'].split()[0]
+ if target != 'image':
+ return
+ id = int(g['stuff'].split()[1])
+ tid = db.rainbow_query(id)[0].tweet_id
+ tweet = t.statuses.show(id=tid)
+ media = tweet['entities']['media']
+ for m in media:
+ res = requests.get(m['media_url'])
+ img = Image.open(StringIO(res.content))
+ img.show()
+ except:
+ printNicely(red('Sorry I can\'t show this image.'))
+
+
+def follow():
+ """
+ Follow a user
+ """
+ t = Twitter(auth=authen())
+ screen_name = g['stuff'].split()[0]
+ if screen_name[0] == '@':
+ try :
+ t.friendships.create(screen_name=screen_name[1:],follow=True)
+ printNicely(green('You are following ' + screen_name + ' now!'))
+ except:
+ printNicely(red('Sorry can not follow at this time.'))
+ else:
+ printNicely(red('Sorry I can\'t understand.'))
-def follower():
+def unfollow():
"""
- List of follower
+ Unfollow a user
"""
t = Twitter(auth=authen())
- g['followers'] = t.followers.ids()['ids']
- for i in g['followers']:
- name = t.users.lookup(user_id=i)[0]['name']
- screen_name = '@' + t.users.lookup(user_id=i)[0]['screen_name']
- user = cycle_color(name) + grey(' ' + screen_name + ' ')
- print user
+ screen_name = g['stuff'].split()[0]
+ if screen_name[0] == '@':
+ try :
+ t.friendships.destroy(screen_name=screen_name[1:],include_entities=False)
+ printNicely(green('Unfollow ' + screen_name + ' success!'))
+ except:
+ printNicely(red('Sorry can not unfollow at this time.'))
+ else:
+ printNicely(red('Sorry I can\'t understand.'))
def help():
yellow('[id=12]') + '.\n'
usage += s * 2 + green('s #AKB48') + ' will search for "' + \
yellow('AKB48') + '" and return 5 newest tweet.\n'
- usage += s * 2 + green('fr') + ' will list out your following people.\n'
- usage += s * 2 + green('fl') + ' will list out your follower.\n'
+ usage += s * 2 + green('show image 12') + ' will show image in tweet with ' + \
+ yellow('[id=12]') + ' in your OS\'s image viewer.\n'
+ usage += s * 2 + green('fl @dtvd88') + ' will follow ' + \
+ yellow('@dtvd88') + '.\n'
+ usage += s * 2 + green('ufl @dtvd88') + ' will unfollow ' + \
+ yellow('@dtvd88') + '.\n'
usage += s * 2 + green('h') + ' will show this help again.\n'
usage += s * 2 + green('c') + ' will clear the screen.\n'
usage += s * 2 + green('q') + ' will quit.\n'
"""
Exit all
"""
+ save_history()
os.system('rm -rf rainbow.db')
os.kill(g['stream_pid'], signal.SIGKILL)
sys.exit()
delete,
unfavorite,
search,
- friend,
- follower,
+ show,
+ follow,
+ unfollow,
help,
clear,
quit
['@'], # view
[], # tweet
[], # retweet
+ [], # favorite
[], # reply
[], # delete
+ [], # unfavorite
['#'], # search
- [], # friend
- [], # follower
+ ['image'], # show image
+ [], # follow
+ [], # unfollow
[], # help
[], # clear
[], # quit
]
))
init_interactive_shell(d)
+ read_history()
reset()
while True:
if g['prefix']:
elif tweet.get('text'):
draw(
t=tweet,
+ iot=args.image_on_term,
keyword=args.track_keywords,
fil=args.filter,
- ig=args.ignore)
+ ig=args.ignore,
+ )
def fly():
g['reset'] = True
g['prefix'] = True
g['stream_pid'] = p.pid
- listen()
+ g['iot'] = args.image_on_term
+ listen()
\ No newline at end of file