Skip to content

Commit

Permalink
1st commit
Browse files Browse the repository at this point in the history
  • Loading branch information
orakaro committed May 5, 2014
0 parents commit 91476ec
Show file tree
Hide file tree
Showing 7 changed files with 216 additions and 0 deletions.
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
## Rainbow Stream

A rainbow stream console for Twitter.
Base on Python Twitter Tool

## Install
With python 2.7+ You can:
```bash
git clone
pip install requirements.txt
pip install -e .
```

## Usage
```bash
rainbowstream
```

## Screenshot


## License

Rainbow Stream are released under an MIT License.
Empty file added rainbowstream/__init__.py
Empty file.
16 changes: 16 additions & 0 deletions rainbowstream/colors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
def _wrap_with(code):

def inner(text, bold=False):
c = code
if bold:
c = "1;%s" % c
return "\033[%sm%s\033[0m" % (c, text)
return inner

red = _wrap_with('31')
green = _wrap_with('32')
yellow = _wrap_with('33')
blue = _wrap_with('34')
magenta = _wrap_with('35')
cyan = _wrap_with('36')
white = _wrap_with('37')
2 changes: 2 additions & 0 deletions rainbowstream/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
CONSUMER_KEY = 'uS6hO2sV6tDKIOeVjhnFnQ'
CONSUMER_SECRET = 'MEYTOS97VvlHX7K1rwHPEqVpTSqZ71HtvoK4sVuYk'
121 changes: 121 additions & 0 deletions rainbowstream/rainbow.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
"""
Colorful user's timeline stream
"""

from __future__ import print_function

import os, os.path, argparse, random

from twitter.stream import TwitterStream, Timeout, HeartbeatTimeout, Hangup
from twitter.oauth import OAuth, read_token_file
from twitter.util import printNicely
from dateutil import parser
from pyfiglet import figlet_format

from colors import *
from config import *

def asciiart():
"""
Draw the Ascii Art
"""
d = [red, green, yellow, blue, magenta, cyan, white]
fi = figlet_format('Rainbow Stream', font='doom')
print('\n'.join(
[random.choice(d)(i) for i in fi.split('\n')]
)
)


def draw(t):
"""
Draw the rainbow
"""
# Retrieve tweet
text = t['text']
screen_name = t['user']['screen_name']
name = t['user']['name']
created_at = t['created_at']
date = parser.parse(created_at)
time = date.strftime('%Y/%m/%d %H:%M:%S')

# Format info
user = green(name) + ' ' + yellow('@' + screen_name) + ' '
clock = magenta('['+ time + ']')
tweet = white(text)
userlen = len(name + screen_name) + 3
clocklen = len(time) + 2

# Draw rainbow
terminalrows, terminalcolumns = os.popen('stty size', 'r').read().split()
line1 = u"{u:>{uw}} {t:>{tw}}".format(
u = user,
uw = len(user) + 2,
t = clock,
tw = len(clock) + int(terminalcolumns) - userlen - 4 - clocklen
)

line2 = ' ' + tweet
line3 = '\n'

return line1, line2, line3


def parse_arguments():
"""
Parse the arguments
"""

parser = argparse.ArgumentParser(description=__doc__ or "")

parser.add_argument('-to', '--timeout', help='Timeout for the stream (seconds).')
parser.add_argument('-ht', '--heartbeat-timeout', help='Set heartbeat timeout.', default=90)
parser.add_argument('-nb', '--no-block', action='store_true', help='Set stream to non-blocking.')
parser.add_argument('-tt', '--track-keywords', help='Search the stream for specific text.')
return parser.parse_args()


def main():
args = parse_arguments()

# The Logo
asciiart()

# When using twitter stream you must authorize.
oauth_filename = os.environ.get('HOME', os.environ.get('USERPROFILE', '')) + os.sep + '.twitter_oauth'
oauth_token, oauth_token_secret = read_token_file(oauth_filename)
auth = OAuth(oauth_token, oauth_token_secret, CONSUMER_KEY, CONSUMER_SECRET)

# These arguments are optional:
stream_args = dict(
timeout=args.timeout,
block=not args.no_block,
heartbeat_timeout=args.heartbeat_timeout)

# Track keyword
query_args = dict()
if args.track_keywords:
query_args['track'] = args.track_keywords

# Get stream
stream = TwitterStream(auth=auth, domain='userstream.twitter.com', **stream_args)
tweet_iter = stream.user(**query_args)

# Iterate over the sample stream.
for tweet in tweet_iter:
if tweet is None:
printNicely("-- None --")
elif tweet is Timeout:
printNicely("-- Timeout --")
elif tweet is HeartbeatTimeout:
printNicely("-- Heartbeat Timeout --")
elif tweet is Hangup:
printNicely("-- Hangup --")
elif tweet.get('text'):
line1, line2, line3 = draw(t = tweet)
printNicely(line1)
printNicely(line2)
printNicely(line3)

if __name__ == '__main__':
main()
9 changes: 9 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
colorama==0.3.1
pyfiglet==0.6.1
pyglet==1.1.4
python-dateutil==2.2
rainbowstream==0.0.1
six==1.6.1
termcolor==1.1.0
twitter==1.14.3
wsgiref==0.1.2
44 changes: 44 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
from setuptools import setup, find_packages
import sys, os

version = '0.0.1'

install_requires = [
# -*- Extra requirements: -*-
]

setup(name='rainbowstream',
version=version,
description="A rainbow streaming console for Twitter (twitter.com)",
long_description=open("./README.md", "r").read(),
# Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
classifiers=[
"Development Status :: 5 - Production/Stable",
"Environment :: Console",
"Intended Audience :: End Users/Desktop",
"Natural Language :: English",
"Operating System :: OS Independent",
"Programming Language :: Python :: 2.6",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3.2",
"Programming Language :: Python :: 3.3",
"Programming Language :: Python :: 3.4",
"Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries",
"Topic :: Utilities",
"License :: OSI Approved :: MIT License",
],
keywords='twitter, command-line tools, web 2.0, stream API',
author='Vu Nhat Minh',
author_email='nhatminh_179@hotmail.com',
url='http://vunhatminh.com',
license='MIT License',
packages=find_packages(exclude=['ez_setup', 'examples', 'tests']),
include_package_data=True,
zip_safe=True,
install_requires=install_requires,
entry_points="""
# -*- Entry points: -*-
[console_scripts]
rainbowstream=rainbowstream.rainbow:main
""",
)

0 comments on commit 91476ec

Please sign in to comment.