twblue/src/twitter/starting.py

259 lines
8.9 KiB
Python
Raw Normal View History

# -*- 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