X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;ds=sidebyside;f=rainbowstream%2Frainbow.py;h=2b8a456571c676bbd477b1dee2d4a16ddf41171f;hb=5531923ea428470228d145d3c89fee0aecbe6e78;hp=c05183e74c6af1ee2529514bae48e27f85b9571d;hpb=c426a344303087c8c13391752473c6a22fda8e14;p=rainbowstream.git diff --git a/rainbowstream/rainbow.py b/rainbowstream/rainbow.py index c05183e..2b8a456 100644 --- a/rainbowstream/rainbow.py +++ b/rainbowstream/rainbow.py @@ -12,14 +12,13 @@ import pkg_resources import socks import socket +from io import BytesIO 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 urllib import error - from .draw import * from .colors import * from .config import * @@ -74,11 +73,36 @@ def parse_arguments(): parser.add_argument( '-pt', '--proxy-type', - default='SOCKS4', + default='SOCKS5', help='Proxy type (HTTP, SOCKS4, SOCKS5; Default: SOCKS5).') return parser.parse_args() +def proxy_connect(args): + """ + Connect to specified proxy + """ + if args.proxy_host: + # Setup proxy by monkeypatching the standard lib + if args.proxy_type.lower() == "socks5" or not args.proxy_type: + socks.set_default_proxy( + socks.SOCKS5, args.proxy_host, + int(args.proxy_port)) + elif args.proxy_type.lower() == "http": + socks.set_default_proxy( + socks.HTTP, args.proxy_host, + int(args.proxy_port)) + elif args.proxy_type.lower() == "socks4": + socks.set_default_proxy( + socks.SOCKS4, args.proxy_host, + int(args.proxy_port)) + else: + printNicely( + magenta("Sorry, wrong proxy type specified! Aborting...")) + sys.exit() + socket.socket = socks.socksocket + + def authen(): """ Authenticate with Twitter OAuth @@ -1973,6 +1997,7 @@ def stream(domain, args, name='Rainbow Stream'): # Block new stream until other one exits StreamLock.acquire() g['stream_stop'] = False + last_tweet_time = time.time() for tweet in tweet_iter: if tweet is None: printNicely("-- None --") @@ -1993,6 +2018,10 @@ def stream(domain, args, name='Rainbow Stream'): StreamLock.release() break elif tweet.get('text'): + # Slow down the stream by STREAM_DELAY config key + if time.time() - last_tweet_time < c['STREAM_DELAY']: + continue + last_tweet_time = time.time() # Check the semaphore pause and lock (stream process only) if g['pause']: continue @@ -2042,21 +2071,9 @@ def fly(): # Initial args = parse_arguments() try: - if args.proxy_host: - # Setup proxy by monkeypatching the standard lib - # You might want to check https://github.com/Anorov/PySocks for further - # further info. - if args.proxy_type.lower() == "socks5" or not args.proxy_type: - socks.set_default_proxy(socks.SOCKS5, args.proxy_host, int(args.proxy_port)) - elif args.proxy_type.lower() == "http": - socks.set_default_proxy(socks.HTTP, args.proxy_host, int(args.proxy_port)) - elif args.proxy_type.lower() == "socks4": - socks.set_default_proxy(socks.SOCKS4, args.proxy_host, int(args.proxy_port)) - else: - printNicely(magenta("Sorry, wrong proxy type specified! Aborting...")) - sys.exit() - socket.socket = socks.socksocket + proxy_connect(args) init(args) + # Twitter API connection problem except TwitterHTTPError: printNicely('') printNicely( @@ -2064,7 +2081,8 @@ def fly(): printNicely(magenta("Let's try again later.")) save_history() sys.exit() - except (ConnectionRefusedError, socks.ProxyConnectionError, error.URLError): + # Proxy connection problem + except (socks.ProxyConnectionError, URLError): printNicely( magenta("There seems to be a connection problem.")) printNicely(