The next generation branch has been added

This commit is contained in:
2014-11-12 20:41:29 -06:00
parent 75f494fc5a
commit f54d9394b7
96 changed files with 2629 additions and 4517 deletions

View File

@@ -1,2 +1,2 @@
import buffers, utils, compose, starting, twitter
import buffers, utils, compose, twitter
from compose import prettydate

View File

@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
import BaseHTTPServer
from urlparse import urlparse, parse_qs
logged = False
verifier = None
class handler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
global logged
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
logged = True
params = parse_qs(urlparse(self.path).query)
global verifier
verifier = params.get('oauth_verifier', [None])[0]
self.wfile.write("You have successfully logged in to Twitter with TW Blue. "
"You can close this window now.")

View File

@@ -1,46 +1,35 @@
# -*- coding: utf-8 -*-
from twitter import compose
from twython import TwythonStreamer
import sound
from mysc import event
import wx
import config
import output
from pubsub import pub
import logging as original_logger
log = original_logger.getLogger("MainStream")
class streamer(TwythonStreamer):
def __init__(self, app_key, app_secret, oauth_token, oauth_token_secret, timeout=300, retry_count=None, retry_in=10, client_args=None, handlers=None, chunk_size=1, parent=None):
self.db = parent.db
self.parent = parent
TwythonStreamer.__init__(self, app_key, app_secret, oauth_token, oauth_token_secret, timeout=60, retry_count=None, retry_in=180, client_args=None, handlers=None, chunk_size=1)
class timelinesStreamer(TwythonStreamer):
def __init__(self, app_key, app_secret, oauth_token, oauth_token_secret, timeout=300, retry_count=None, retry_in=10, client_args=None, handlers=None, chunk_size=1, session=None):
self.session = session
super(timelinesStreamer, self).__init__(app_key, app_secret, oauth_token, oauth_token_secret, timeout=60, retry_count=None, retry_in=180, client_args=None, handlers=None, chunk_size=1)
def on_error(self, status_code, data):
log.debug("%s: %s" % (status_code, data))
def check_tls(self, data):
for i in config.main["other_buffers"]["timelines"]:
for i in self.session.settings["other_buffers"]["timelines"]:
if data["user"]["screen_name"] == i:
tweet_event = event.event(event.EVT_OBJECT, 1)
tweet_event.SetItem(data)
announce = _(u"One tweet from %s") % (data["user"]["name"])
tweet_event.SetAnnounce(announce)
wx.PostEvent(self.parent.search_buffer(buffer_type="timeline", name_buffer=data["user"]["screen_name"]), tweet_event)
for i in range(0, self.parent.nb.GetPageCount()):
if self.parent.nb.GetPage(i).type == "list":
try:
self.parent.nb.GetPage(i).users.index(data["user"]["id"])
tweet_event = event.event(event.EVT_OBJECT, 1)
tweet_event.SetItem(data)
announce = _(u"One tweet from %s in the list %s") % (data["user"]["name"], self.parent.nb.GetPage(i).name_buffer[:-5])
tweet_event.SetAnnounce(announce)
wx.PostEvent(self.parent.nb.GetPage(i), tweet_event)
except ValueError:
pass
pub.sendMessage("item-in-timeline", data= data, user= self.session.db["user_name"], who= i)
def on_success(self, data):
# try:
if "text" in data:
self.check_tls(data)
# except:
# pass
class listsStreamer(timelinesStreamer):
def on_success(self, data):
try:
if data.has_key("text"):
self.check_tls(data)
if "text" in data:
pub.sendMessage("item-in-list", **{"data": data, "user": self.session.db["user_name"]})
except:
pass

View File

@@ -1,104 +1,89 @@
# -*- coding: utf-8 -*-
from twitter import compose, utils
from twitter import utils
from twython import TwythonStreamer
import sound
from mysc import event
import wx
import config
from pubsub import pub
import logging as original_logger
log = original_logger.getLogger("MainStream")
import output
class streamer(TwythonStreamer):
def __init__(self, app_key, app_secret, oauth_token, oauth_token_secret, timeout=300, retry_count=None, retry_in=10, client_args=None, handlers=None, chunk_size=1, parent=None):
self.db = parent.db
self.parent = parent
TwythonStreamer.__init__(self, app_key, app_secret, oauth_token, oauth_token_secret, timeout=480, retry_count=0, retry_in=60, client_args=None, handlers=None, chunk_size=1)
self.muted_users = self.db.settings["muted_users"]
def __init__(self, app_key, app_secret, oauth_token, oauth_token_secret, sessionObject, *args, **kwargs):
super(streamer, self).__init__(app_key, app_secret, oauth_token, oauth_token_secret, *args, **kwargs)
self.session = sessionObject
self.muted_users = self.session.db["muted_users"]
# self.blocked_users = []
def on_error(self, status_code, data):
log.debug("Error %s: %s" % (status_code, data))
def get_user(self):
return self.session.db["user_name"]
def put_data(self, place, data):
if self.session.db.has_key(place):
if self.session.settings["general"]["reverse_timelines"] == False:
self.session.db[place].append(data)
else:
self.session.db[place].insert(0, data)
def block_user(self, data):
id = data["target"]["id"]
if id in self.friends:
self.friends.remove(id)
if config.main["other_buffers"]["show_blocks"] == True:
tweet_event = event.event(event.EVT_OBJECT, 1)
tweet_event.SetItem(data["target"])
wx.PostEvent(self.parent.search_buffer("people", "blocks"), tweet_event)
if self.session.settings["other_buffers"]["show_blocks"] == True:
self.session.db["blocked"]["items"].append(data["target"])
pub.sendMessage("blocked-user", data=data["target"], user=self.get_user())
def unblock(self, data):
if config.main["other_buffers"]["show_blocks"] == True:
item = utils.find_item(data["target"]["id"], self.db.settings["blocks"])
self.db.settings["blocks"].pop(item)
deleted_event = event.event(event.EVT_DELETED, 1)
deleted_event.SetItem(item)
wx.PostEvent(self.parent.search_buffer("people", "blocks"), deleted_event)
wx.PostEvent(self.parent, event.ResultEvent())
if self.session.settings["other_buffers"]["show_blocks"] == True:
item = utils.find_item(data["target"]["id"], self.session.db["blocked"]["items"])
self.session.db["blocked"]["items"].pop(item)
pub.sendMessage("unblocked-user", item=item, user=self.get_user())
def check_send(self, data):
if self.db.settings["user_name"] == data["user"]["screen_name"]:
tweet_event = event.event(event.EVT_OBJECT, 1)
tweet_event.SetItem(data)
wx.PostEvent(self.parent.search_buffer("buffer", "sent"), tweet_event)
if self.session.db["user_name"] == data["user"]["screen_name"]:
self.put_data("sent_tweets", data)
pub.sendMessage("sent-tweet", data=data, user=self.get_user())
def check_favs(self, data):
if data["source"]["screen_name"] == self.db.settings["user_name"]:
tweet_event = event.event(event.EVT_OBJECT, 1)
tweet_event.SetItem(data["target_object"])
wx.PostEvent(self.parent.search_buffer("buffer", "favs"), tweet_event)
if data["source"]["screen_name"] == self.session.db["user_name"]:
self.put_data("favourites", data["target_object"])
pub.sendMessage("favourite", data=data["target_object"], user=self.get_user())
def check_mentions(self, data):
if "@%s" % (self.db.settings["user_name"]) in data["text"]:
tweet_event = event.event(event.EVT_OBJECT, 1)
tweet_event.SetItem(data)
text = _(u"One mention from %s ") % (data["user"]["name"])
tweet_event.SetAnnounce(text)
wx.PostEvent(self.parent.search_buffer("buffer", "mentions"), tweet_event)
if "@%s" % (self.session.db["user_name"]) in data["text"]:
self.put_data("mentions", data)
pub.sendMessage("mention", data=data, user=self.get_user())
def process_dm(self, data):
if self.db.settings["user_name"] == data["direct_message"]["sender"]["screen_name"]:
tweet_event = event.event(event.EVT_OBJECT, 1)
tweet_event.SetItem(data["direct_message"])
wx.PostEvent(self.parent.search_buffer("buffer", "sent"), tweet_event)
if self.db.settings["user_name"] != data["direct_message"]["sender"]["screen_name"]:
tweet_event = event.event(event.EVT_OBJECT, 1)
tweet_event.SetItem(data["direct_message"])
text = _(u"One direct message")
tweet_event.SetAnnounce(text)
wx.PostEvent(self.parent.search_buffer("buffer", "direct_messages"), tweet_event)
if self.session.db["user_name"] == data["direct_message"]["sender"]["screen_name"]:
self.put_data("sent_direct_messages", data["direct_message"])
pub.sendMessage("sent-dm", data=data["direct_message"], user=self.get_user())
else:
self.put_data("direct_messages", data["direct_message"])
pub.sendMessage("direct-message", data=data["direct_message"], user=self.get_user())
def check_follower(self, data):
if data["target"]["screen_name"] == self.db.settings["user_name"]:
if config.main["other_buffers"]["show_followers"] == True:
tweet_event = event.event(event.EVT_OBJECT, 1)
tweet_event.SetItem(data["source"])
wx.PostEvent(self.parent.search_buffer("people", "followers"), tweet_event)
elif data["source"]["screen_name"] == self.db.settings["user_name"] and config.main["other_buffers"]["show_friends"] == True:
tweet_event = event.event(event.EVT_OBJECT, 1)
tweet_event.SetItem(data["target"])
wx.PostEvent(self.parent.search_buffer("people", "friends"), tweet_event)
if data["target"]["screen_name"] == self.session.db["user_name"]:
self.session.db["followers"]["items"].append(data["source"])
pub.sendMessage("follower", data=data["source"], user = self.get_user())
else:
self.session.db["friends"]["items"].append(data["target"])
pub.sendMessage("friend", data=data["target"], user=self.get_user())
###
def remove_fav(self, data):
if self.db.settings["user_name"] == data["source"]["screen_name"]:
self.db.settings.update()
item = utils.find_item(data["target_object"]["id"], self.db.settings["favs"])
self.db.settings["favs"].pop(item)
deleted_event = event.event(event.EVT_DELETED, 1)
deleted_event.SetItem(item)
wx.PostEvent(self.parent.search_buffer("buffer", "favs"), deleted_event)
if self.session.db["user_name"] == data["source"]["screen_name"]:
item = utils.find_item(data["target_object"]["id"], self.session.db["favourites"])
print item
self.session.db["favourites"].pop(item)
pub.sendMessage("unfavourite", item=item, user=self.get_user())
def remove_friend(self, data):
if config.main["other_buffers"]["show_friends"] == True:
item = utils.find_item(data["target"]["id"], self.db.settings["friends"])
if self.session.settings["other_buffers"]["show_friends"] == True:
item = utils.find_item(data["target"]["id"], self.session.db["friends"]["items"])
if item > 0:
deleted_event = event.event(event.EVT_DELETED, 1)
deleted_event.SetItem(item)
self.friends.pop(item)
self.db.settings["friends"].pop(item)
wx.PostEvent(self.parent.search_buffer("people", "friends"), deleted_event)
self.friends["items"].pop(item)
pub.sendMessage("unfollowing", item=item, user=self.get_user())
def on_success(self, data):
try:
@@ -106,64 +91,46 @@ class streamer(TwythonStreamer):
self.process_dm(data)
elif "friends" in data:
self.friends = data["friends"]
elif "text" in data and utils.is_allowed(data) == True:
elif "text" in data:
if data["user"]["id"] in self.muted_users: return
self.check_mentions(data)
self.check_send(data)
if data["user"]["id"] in self.friends or data["user"]["screen_name"] == self.db.settings["user_name"]:
tweet_event = event.event(event.EVT_OBJECT, 1)
tweet_event.SetItem(data)
wx.PostEvent(self.parent.search_buffer("buffer", "home_timeline"), tweet_event)
if data["user"]["id"] in self.friends or data["user"]["screen_name"] == self.session.db["user_name"]:
self.put_data("home_timeline", data)
pub.sendMessage("item-in-home", data=data, user=self.get_user())
elif data.has_key("event"):
if "favorite" == data["event"] and config.main["other_buffers"]["show_favourites"] == True:
if "favorite" == data["event"] and self.session.settings["other_buffers"]["show_favourites"] == True:
self.check_favs(data)
elif "unfavorite" == data["event"] and config.main["other_buffers"]["show_favourites"] == True:
elif "unfavorite" == data["event"] and self.session.settings["other_buffers"]["show_favourites"] == True:
self.remove_fav(data)
elif "follow" == data["event"] and config.main["other_buffers"]["show_followers"] == True:
elif "follow" == data["event"] and self.session.settings["other_buffers"]["show_followers"] == True:
self.check_follower(data)
elif "unfollow" == data["event"] and config.main["other_buffers"]["show_followers"] == True:
elif "unfollow" == data["event"] and self.session.settings["other_buffers"]["show_followers"] == True:
self.remove_friend(data)
elif "block" == data["event"]:
self.block_user(data)
elif "unblock" in data["event"]:
elif "unblock" == data["event"]:
self.unblock(data)
elif "list_created" == data["event"]:
item = utils.find_item(data["target_object"]["id"], self.db.settings["lists"])
if item != None: self.db.settings["lists"].append(data["target_object"])
item = utils.find_item(data["target_object"]["id"], self.session.db["lists"])
if item != None: self.session.db["lists"].append(data["target_object"])
elif "list_destroyed" == data["event"]:
item = utils.find_item(data["target_object"]["id"], self.db.settings["lists"])
if item != None: self.db.settings["lists"].pop(item)
item = utils.find_item(data["target_object"]["id"], self.session.db["lists"])
if item != None: self.session.db["lists"].pop(item)
self.parent.remove_list(data["target_object"]["id"])
elif "list_member_added" == data["event"] and data["source"]["screen_name"] == self.db.settings["user_name"]:
if len(config.main["other_buffers"]["lists"]) > 0:
for i in range(0, self.parent.nb.GetPageCount()):
if self.parent.nb.GetPage(i).type == "list":
if str(data["target_object"]["id"]) == str(self.parent.nb.GetPage(i).argumento):
self.parent.nb.GetPage(i).users.append(data["target"]["id"])
wx.PostEvent(self.parent, event.ResultEvent())
elif "list_member_added" == data["event"] and data["target"]["screen_name"] == self.db.settings["user_name"]:
self.db.settings["lists"].append(data["target_object"])
elif "list_member_removed" == data["event"] and data["source"]["screen_name"] == self.db.settings["user_name"]:
if len(config.main["other_buffers"]["lists"]) > 0:
for i in range(0, self.parent.nb.GetPageCount()):
if self.parent.nb.GetPage(i).type == "list":
if str(data["target_object"]["id"]) == str(self.parent.nb.GetPage(i).argumento):
self.parent.nb.GetPage(i).users.remove(data["target"]["id"])
wx.PostEvent(self.parent, event.ResultEvent())
elif "list_member_removed" == data["event"] and data["target"] == self.db.settings["user_name"]:
elif "list_member_added" == data["event"] and data["source"]["screen_name"] == self.get_user():
pub.sendMessage("new-list-member-added", **{"id":str(data["target"]["id"]), "list":data["target_object"], "user":self.get_user()})
elif "list_member_added" == data["event"] and data["target"]["screen_name"] == self.get_user():
self.session.db["lists"].append(data["target_object"])
elif "list_member_removed" == data["event"] and data["source"]["screen_name"] == self.get_user():
pub.sendMessage("list-member-deleted", **{"id":str(data["target"]["id"]), "list":data["target_object"], "user":self.get_user()})
elif "list_member_removed" == data["event"] and data["target"] == self.get_user():
id = data["target_object"]["id"]
list = utils.find_item(id, self.db.settings["lists"])
if list != None: self.db.settings["lists"].pop(list)
self.parent.remove_list(data["target_object"]["id"])
if config.main["other_buffers"]["show_events"] == True:
evento = compose.compose_event(data, self.db.settings["user_name"])
tweet_event = event.event(event.EVT_OBJECT, 1)
tweet_event.SetItem(evento)
text = evento[1]
tweet_event.SetAnnounce(text)
# deleted_event = event.event(event.EVT_DELETED, 1)
# deleted_event.SetItem(evento)
wx.PostEvent(self.parent.search_buffer("event", "events"), tweet_event)
list = utils.find_item(id, self.session.db["lists"])
if list != None: self.session.db["lists"].pop(list)
pub.sendMessage("list-deleted", **{"item":list, "user":self.get_user()})
if self.session.settings["other_buffers"]["show_events"] == True:
pub.sendMessage("event", data= data, user= self.get_user())
# self.sound.play("new_event.ogg")
except:
except KeyboardInterrupt:
pass

View File

@@ -6,11 +6,6 @@ import datetime
import time
import output
import gettext, paths, locale, gettext_windows
import config, languageHandler
if config.main != None:
languageHandler.setLanguage(config.main["general"]["language"])
else:
languageHandler.setLanguage("system")
import platform
system = platform.system()
@@ -133,14 +128,14 @@ def translate_short(string):
chars = "abcdefghijklmnopqrstuvwxyz"
def compose_tweet(tweet, db):
def compose_tweet(tweet, db, relative_times):
""" It receives a tweet and returns a list with the user, text for the tweet or message, date and the client where user is."""
# original_date = datetime.datetime.strptime(translate_short(tweet["created_at"]).encode("utf-8"), "%a %b %d %H:%M:%S +0000 %Y")
original_date = datetime.datetime.strptime(tweet["created_at"], "%a %b %d %H:%M:%S +0000 %Y")
# else:
# original_date = datetime.datetime.strptime(tweet["created_at"], '%a %b %d %H:%M:%S +0000 %Y')
date = original_date-datetime.timedelta(seconds=-db.settings["utc_offset"])
if config.main["general"]["relative_times"] == True:
date = original_date-datetime.timedelta(seconds=-db["utc_offset"])
if relative_times == True:
ts = prettydate(original_date)
else:
# ts = translate(datetime.datetime.strftime(date, _("%A, %B %d, %Y at %I:%M:%S %p".encode("utf-8"))).decode("utf-8"))
@@ -149,7 +144,7 @@ def compose_tweet(tweet, db):
text = StripChars(tweet["text"])
if tweet.has_key("sender"):
source = "DM"
if db.settings["user_name"] == tweet["sender"]["screen_name"]: user = _(u"Dm to %s ") % (tweet["recipient"]["name"],)
if db["user_name"] == tweet["sender"]["screen_name"]: user = _(u"Dm to %s ") % (tweet["recipient"]["name"],)
else: user = tweet["sender"]["name"]
elif tweet.has_key("user"):
user = tweet["user"]["name"]
@@ -162,13 +157,13 @@ def compose_tweet(tweet, db):
try: text = text.replace(urls[url], tweet["entities"]["urls"][url]["expanded_url"])
except IndexError: pass
tweet["text"] = text
return [user+", ", tweet["text"], ts+", ", source]
return [user+", ", text, ts+", ", source]
def compose_followers_list(tweet, db):
def compose_followers_list(tweet, db, relative_time=True):
# original_date = datetime.datetime.strptime(translate_short(tweet["created_at"]).encode("utf-8"), '%a %b %d %H:%M:%S +0000 %Y')
original_date = datetime.datetime.strptime(tweet["created_at"], '%a %b %d %H:%M:%S +0000 %Y')
date = original_date-datetime.timedelta(seconds=-db.settings["utc_offset"])
if config.main["general"]["relative_times"] == True:
date = original_date-datetime.timedelta(seconds=-db["utc_offset"])
if relative_time == True:
ts = prettydate(original_date)
else:
ts = translate(datetime.datetime.strftime(date, _(u"%A, %B %d, %Y at %I:%M:%S %p")))
@@ -177,8 +172,8 @@ def compose_followers_list(tweet, db):
if len(tweet["status"]) > 4:
# original_date2 = datetime.datetime.strptime(translate_short(tweet["status"]["created_at"]).encode("utf-8"), '%a %b %d %H:%M:%S +0000 %Y')
original_date2 = datetime.datetime.strptime(tweet["status"]["created_at"], '%a %b %d %H:%M:%S +0000 %Y')
date2 = original_date2-datetime.timedelta(seconds=-db.settings["utc_offset"])
if config.main["general"]["relative_times"]:
date2 = original_date2-datetime.timedelta(seconds=-db["utc_offset"])
if relative_time == True:
ts2 = prettydate(original_date2)
else:
ts2 = translate(datetime.datetime.strftime(date2, _(u"%A, %B %d, %Y at %I:%M:%S %p")))

View File

@@ -1,259 +0,0 @@
# -*- config: utf-8 -*-
from twython import Twython, TwythonError
import config
#import sound
import time
import utils
friends_cursor = followers_cursor = None
def get_more_items(update_function, twitter_object, users=False, name=None, *args, **kwargs):
results = []
data = update_function(*args, **kwargs)
if users == True:
global friends_cursor, followers_cursor
if name == "friends":
friends_cursor = data["next_cursor"]
elif name == "followers":
followers_cursor = data["next_cursor"]
for i in data["users"]: results.append(i)
else:
results.extend(data[1:])
return results
def call_paged(update_function, twitter_object, *args, **kwargs):
max = int(config.main["general"]["max_api_calls"])-1
results = []
data = update_function(*args, **kwargs)
results.extend(data)
for i in range(0, max):
if i == 0: max_id = results[-1]["id"]
else: max_id = results[0]["id"]
data = update_function(max_id=max_id, *args, **kwargs)
results.extend(data)
results.reverse()
return results
def start_user_info(config, twitter):
f = twitter.twitter.get_account_settings()
sn = f["screen_name"]
config.settings["user_name"] = sn
config.settings["user_id"] = twitter.twitter.show_user(screen_name=sn)["id_str"]
try:
config.settings["utc_offset"] = f["time_zone"]["utc_offset"]
except KeyError:
config.settings["utc_offset"] = -time.timezone
get_lists(config, twitter)
get_muted_users(config, twitter)
def get_lists(config, twitter):
config.settings["lists"] = twitter.twitter.show_lists(reverse=True)
def get_muted_users(config, twitter):
config.settings["muted_users"] = twitter.twitter.get_muted_users_ids()["ids"]
def start_stream(db, twitter, name, function, param=None):
num = 0
if db.settings.has_key(name):
try:
if db.settings[name][0]["id"] > db.settings[name][-1]["id"]:
last_id = db.settings[name][0]["id"]
else:
last_id = db.settings[name][-1]["id"]
except IndexError:
pass
if param != None:
tl = call_paged(function, twitter, sinze_id=last_id, screen_name=param, count=config.main["general"]["max_tweets_per_call"])
else:
tl = call_paged(function, twitter, sinze_id=last_id, count=config.main["general"]["max_tweets_per_call"])
else:
if param != None:
tl = call_paged(function, twitter, screen_name=param, count=config.main["general"]["max_tweets_per_call"])
else:
tl = call_paged(function, twitter, count=config.main["general"]["max_tweets_per_call"])
db.settings[name] = []
last_id = 0
if len(db.settings[name]) > 0:
for i in tl:
if int(i["id"]) > int(last_id):
if config.main["general"]["reverse_timelines"] == False: db.settings[name].append(i)
else: db.settings[name].insert(0, i)
num = num+1
elif len(db.settings[name]) == 0:
for i in tl:
if config.main["general"]["reverse_timelines"] == False: db.settings[name].append(i)
else: db.settings[name].insert(0, i)
num = num+1
# db.settings.update()
return num
def start_followers(db, twitter, name, function, param=None):
global friends_cursor, followers_cursor
num = 0
db.settings[name] = []
# next_cursor = -1
# while(next_cursor):
tl = function(screen_name=param, count=config.main["general"]["max_tweets_per_call"])
for i in tl['users']:
if config.main["general"]["reverse_timelines"] == False: db.settings[name].append(i)
else: db.settings[name].insert(0, i)
num = num+1
# next_cursor = tl["next_cursor"]
db.settings[name].reverse()
# if config.main["streams"]["reverse_timelines"] == True: db.settings[name].reverse()
if name == "followers": followers_cursor = tl["next_cursor"]
elif name == "friends": friends_cursor = tl["next_cursor"]
return num
def get_users_list(twitter, list_id):
answers = []
next_cursor = -1
while(next_cursor):
users = twitter.twitter.get_list_members(list_id=list_id, cursor=next_cursor, include_entities=False, skip_status=True)
for i in users['users']:
answers.append(i["id"])
next_cursor = users["next_cursor"]
return answers
def update_stream(config, twitter, name, function, param=None, sndFile=""):
num = 0
sounded = False
tl = function(sinze_id=config.settings[name][-1]["id"], screen_name=param, count=config.main["general"]["max_tweets_per_call"])
tl.reverse()
for i in tl:
if i["id"] > config.settings[name][-1]["id"]:
config.settings[name].append(i)
sounded = True
num = num+1
if sounded == True:
sound.play(sndFile)
return num
def start_sent(db, twitter, name, function, param=None):
num = 0
if db.settings.has_key(name):
try:
if db.settings[name][0]["id"] > db.settings[name][-1]["id"]:
last_id = db.settings[name][0]["id"]
else:
last_id = db.settings[name][-1]["id"]
except IndexError:
return 0
if param != None:
tl = function(sinze_id=last_id, screen_name=param, count=config.main["general"]["max_tweets_per_call"])
tl2 = twitter.twitter.get_sent_messages(sinze_id=last_id, count=config.main["general"]["max_tweets_per_call"])
else:
tl = function(sinze_id=last_id, count=config.main["general"]["max_tweets_per_call"])
tl2 = twitter.twitter.get_sent_messages(sinze_id=last_id, count=config.main["general"]["max_tweets_per_call"])
else:
if param != None:
tl = function(screen_name=param, count=config.main["general"]["max_tweets_per_call"])
tl2 = twitter.twitter.get_sent_messages(count=config.main["general"]["max_tweets_per_call"])
else:
tl = function(count=config.main["general"]["max_tweets_per_call"])
tl2 = twitter.twitter.get_sent_messages(sinze_id=last_id, count=config.main["general"]["max_tweets_per_call"])
db.settings[name] = []
last_id = 0
tl.extend(tl2)
# tl.reverse()
tl.sort(key=lambda tup: tup["id"])
if len(db.settings[name]) > 0:
for i in tl:
# print last_id, i["id"]
if int(i["id"]) > int(last_id):
if config.main["general"]["reverse_timelines"] == False: db.settings[name].append(i)
else: db.settings[name].insert(0, i)
num = num+1
elif len(db.settings[name]) == 0:
for i in tl:
if config.main["general"]["reverse_timelines"] == False: db.settings[name].append(i)
else: db.settings[name].insert(0, i)
num = num+1
return num
def start_list(db, twitter, name, list_id):
num = 0
if db.settings.has_key(name):
try:
if db.settings[name][0]["id"] > db.settings[name][-1]["id"]:
last_id = db.settings[name][0]["id"]
else:
last_id = db.settings[name][-1]["id"]
except IndexError:
pass
tl = twitter.twitter.get_list_statuses(list_id=list_id, count=200)
else:
tl = twitter.twitter.get_list_statuses(list_id=list_id, count=200)
tl.reverse()
db.settings[name] = []
last_id = 0
if len(db.settings[name]) > 0:
for i in tl:
if int(i["id"]) > int(last_id):
if config.main["general"]["reverse_timelines"] == False: db.settings[name].append(i)
else: db.settings[name].insert(0, i)
num = num+1
elif len(db.settings[name]) == 0:
for i in tl:
if config.main["general"]["reverse_timelines"] == False: db.settings[name].append(i)
else: db.settings[name].insert(0, i)
num = num+1
db.settings.update()
return num
def search(db, twitter, name, *args, **kwargs):
num = 0
if db.settings.has_key(name) == False:
db.settings[name] = []
tl = twitter.twitter.search(*args, **kwargs)
tl["statuses"].reverse()
if len(db.settings[name]) > 0:
for i in tl["statuses"]:
if utils.find_item(i["id"], db.settings[name]) == None:
if config.main["general"]["reverse_timelines"] == False: db.settings[name].append(i)
else: db.settings[name].insert(0, i)
num = num+1
elif len(db.settings[name]) == 0:
for i in tl["statuses"]:
if config.main["general"]["reverse_timelines"] == False: db.settings[name].append(i)
else: db.settings[name].insert(0, i)
num = num+1
return num
def search_users(db, twitter, name, *args, **kwargs):
num = 0
if db.settings.has_key(name) == False:
db.settings[name] = []
tl = twitter.twitter.search_users(*args, **kwargs)
tl.reverse()
if len(db.settings[name]) > 0:
for i in tl:
if utils.find_item(i["id"], db.settings[name]) == None:
if config.main["general"]["reverse_timelines"] == False: db.settings[name].append(i)
else: db.settings[name].insert(0, i)
num = num+1
elif len(db.settings[name]) == 0:
for i in tl:
if config.main["general"]["reverse_timelines"] == False: db.settings[name].append(i)
else: db.settings[name].insert(0, i)
num = num+1
return num
def get_favourites_timeline(db, twitter, name, param, *args, **kwargs):
num = 0
if db.settings.has_key(name) == False:
db.settings[name] = []
tl = twitter.twitter.get_favorites(screen_name=param, *args, **kwargs)
tl.reverse()
if len(db.settings[name]) > 0:
for i in tl:
if utils.find_item(i["id"], db.settings[name]) == None:
if config.main["general"]["reverse_timelines"] == False: db.settings[name].append(i)
else: db.settings[name].insert(0, i)
num = num+1
elif len(db.settings[name]) == 0:
for i in tl:
if config.main["general"]["reverse_timelines"] == False: db.settings[name].append(i)
else: db.settings[name].insert(0, i)
num = num+1
return num

View File

@@ -1,83 +1,29 @@
# -*- coding: utf-8 -*-
import BaseHTTPServer
import webbrowser
from urlparse import urlparse, parse_qs
from twython import Twython, TwythonError
import config
import application
import output
import sound
import time
logged = False
verifier = None
class handler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
global logged
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
logged = True
params = parse_qs(urlparse(self.path).query)
global verifier
verifier = params.get('oauth_verifier', [None])[0]
self.wfile.write("You have successfully logged in to Twitter with TW Blue. "
"You can close this window now.")
import authorisationHandler
class twitter(object):
def login(self, user_key=None, user_secret=None):
if user_key != None and user_secret != None:
self.twitter = Twython(application.app_key, application.app_secret, user_key, user_secret)
elif config.main != None:
self.twitter = Twython(application.app_key, application.app_secret, config.main["twitter"]["user_key"], config.main["twitter"]["user_secret"])
else:
self.twitter = Twython(application.app_key, application.app_secret, self.final_step['oauth_token'], self.final_step['oauth_token_secret'])
def login(self, user_key, user_secret):
self.twitter = Twython(application.app_key, application.app_secret, user_key, user_secret)
self.credentials = self.twitter.verify_credentials()
def authorise(self):
httpd = BaseHTTPServer.HTTPServer(('127.0.0.1', 8080), handler)
def authorise(self, settings):
httpd = BaseHTTPServer.HTTPServer(('127.0.0.1', 8080), authorisationHandler.handler)
twitter = Twython(application.app_key, application.app_secret)
auth = twitter.get_authentication_tokens("http://127.0.0.1:8080")
webbrowser.open_new_tab(auth['auth_url'])
global logged, verifier
while logged == False:
# global logged, verifier
while authorisationHandler.logged == False:
httpd.handle_request()
self.twitter = Twython(application.app_key, application.app_secret, auth['oauth_token'], auth['oauth_token_secret'])
final = self.twitter.get_authorized_tokens(verifier)
self.save_configuration(final["oauth_token"], final["oauth_token_secret"])
final = self.twitter.get_authorized_tokens(authorisationHandler.verifier)
self.save_configuration(settings, final["oauth_token"], final["oauth_token_secret"])
def save_configuration(self, user_key=None, user_secret=None):
if user_key != None and user_secret != None:
config.main["twitter"]["user_key"] = user_key
config.main["twitter"]["user_secret"] = user_secret
else:
config.main['twitter']['user_key'] = self.final_step['oauth_token']
config.main['twitter']['user_secret'] = self.final_step['oauth_token_secret']
config.main.write()
def api_call(self, call_name, action="", _sound=None, report_success=False, report_failure=True, preexec_message="", *args, **kwargs):
finished = False
tries = 0
if preexec_message:
output.speak(preexec_message, True)
while finished==False and tries < 25:
try:
val = getattr(self.twitter, call_name)(*args, **kwargs)
finished = True
except TwythonError as e:
# if hasattr(e, 'reason') and e.reason.startswith("Failed to send request"):
output.speak(e.message)
if report_failure and hasattr(e, 'message'):
output.speak(_("%s failed. Reason: %s") % (action, e.message))
finished = True
except:
tries = tries + 1
time.sleep(5)
# raise e
if report_success:
output.speak(_("%s succeeded.") % action)
if _sound != None: sound.player.play(_sound)
# return val
def save_configuration(self, settings, user_key, user_secret):
settings["twitter"]["user_key"] = user_key
settings["twitter"]["user_secret"] = user_secret
settings.write()

View File

@@ -9,8 +9,6 @@ __version__ = 0.1
__doc__ = "Find urls in tweets and #audio hashtag."
url_re = re.compile(r"(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))")
#"(?:\w+://|www\.)[^ ,.?!#%=+][^ ]*")
#bad_chars = '\'\\.,[](){}:;"'
url_re2 = re.compile("(?:\w+://|www\.)[^ ,.?!#%=+][^ ]*")
bad_chars = '\'\\.,[](){}:;"'
@@ -20,13 +18,6 @@ def find_urls_in_text(text):
def find_urls (tweet):
urls = []
# for i in tweet["entities"]["urls"]:
# unshortened = url_shortener.unshorten(i["expanded_url"])
# if unshortened == None:
# urls.append(i["expanded_url"])
# else:
# urls.append(unshortened)
# return urls
return [s[0] for s in url_re.findall(tweet["text"])]
def find_item(id, listItem):
@@ -44,9 +35,6 @@ def find_previous_reply(id, listItem):
return None
def find_next_reply(id, listItem):
# r = range(0, len(listItem))
# r.reverse()
# for i in r:
for i in range(0, len(listItem)):
if listItem[i]["in_reply_to_status_id_str"] == str(id): return i
return None