mirror of
https://github.com/MCV-Software/TWBlue.git
synced 2025-07-18 14:06:07 -04:00
The next generation branch has been added
This commit is contained in:
@@ -1,2 +1,2 @@
|
||||
import buffers, utils, compose, starting, twitter
|
||||
import buffers, utils, compose, twitter
|
||||
from compose import prettydate
|
20
src/twitter/authorisationHandler.py
Normal file
20
src/twitter/authorisationHandler.py
Normal 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.")
|
@@ -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
|
@@ -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
|
||||
|
@@ -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")))
|
||||
|
@@ -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
|
@@ -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()
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user