From e5c31687ab4c4fe9a3c5c68615c65af101d7fa7e Mon Sep 17 00:00:00 2001 From: lemon <961222258@qq.com> Date: Thu, 20 Feb 2020 11:19:45 +0800 Subject: [PATCH] 修复心跳与转移逻辑为自动调度 --- core/core.py | 15 +++++++++++++-- lib/facebook.py | 36 ++++++++++++++++++++++++++++++++++-- lib/socket_.py | 36 ++++++++++++++++++++---------------- requirements.txt | 3 ++- 4 files changed, 69 insertions(+), 21 deletions(-) diff --git a/core/core.py b/core/core.py index 308ba68..1510764 100644 --- a/core/core.py +++ b/core/core.py @@ -7,6 +7,7 @@ import functools import json +from apscheduler.schedulers.tornado import TornadoScheduler from tornado import ioloop from conf import settings @@ -53,6 +54,7 @@ def host(): def connect_success(sock): + print(monitor._name, '连接成功->', sock.ws_url) if monitor._temp_socket == sock: sock.auto_reconnet = True # 新的连接成功后把断线重连开启 monitor._socket.quit() # 旧的断开 @@ -74,11 +76,20 @@ def set_new_server_func(sock): def run(): + # init socket start socket = MessageSocketClient(connect_success, message_receive) set_new_server_func(socket) - monitor.bind(socket) - conf = settings.get_server() conf.update({'url': monitor._host, 'name': monitor._name, 'uuid': monitor._imei}) socket.connect(**conf) + monitor.bind(socket) + # init socket end + + # init schedule start + sched = TornadoScheduler() + sched.add_job(monitor._socket.sendheartbeat, 'interval', seconds=25) + sched.add_job(monitor._socket.auto_move_server, 'interval', seconds=31) + sched.start() + # init schedule end + ioloop.IOLoop.instance().start() diff --git a/lib/facebook.py b/lib/facebook.py index 6562ca1..ccc4cd2 100644 --- a/lib/facebook.py +++ b/lib/facebook.py @@ -254,7 +254,7 @@ class FacebookClient(Client): "/settings/name_change_preview/", data) return res - def saveName(self, display_format, save_password, primary_first, primary_middle, primary_last): + def saveName(self, save_password, primary_first, primary_last, primary_middle=None, display_format='complete'): data = { 'display_format': display_format, 'save_password': save_password, @@ -265,7 +265,15 @@ class FacebookClient(Client): # 'alternate_name': 'lin wei quan', 'show_alternate': '1' res = self._post( "/ajax/settings/account/name.php", data) - return res + + status = res['jsmods']['require'][0][1] + if status == 'addError': + html = res['jsmods']['require'][0][3][0]['__html'] + return {'success': False, 'error': parse_html.get_div_text(html)} + elif status == 'setPreviewForCurrent': + html = res['jsmods']['require'][0][3][0]['__html'] + return {'success': True, 'msg': parse_html.get_div_text(html)} + raise BaseException('未知错误:' + json.dumps(res['jsmods']['require'])) def uploudAvatar(self, binary): files = { @@ -823,3 +831,27 @@ class FacebookClient(Client): if 'fbSettingsListItem' in res['domops'][0][1]: return {"success": True} return {"success": False} + + def setBirthday(self, year, month, day): + data = { + 'privacy[8787510733]': PostParam.EVERYONE.value, + 'privacy[8787805733]': PostParam.EVERYONE.value, + 'birthday_month': month, 'birthday_day': day, 'birthday_year': year, + 'birthday_confirmation': '1', + 'bd_surface': 'www_profile', 'edit_birthday_allowed': '0', + '__submit__': '1', 'nctr[_mod]': 'pagelet_basic' + } + res = self._post('/profile/edit/infotab/save/birthday/', data) + html = parse_html.get_domops_3(res) + if 'birthday' in html: + return {"success": True} + else: + raise BaseException("未知错误:", html) + + def setLanguage(self, language): + data = { + 'new_language': language, + 'new_fallback_language': '', + } + res = self._post('/ajax/settings/language/account.php', data) + return {"success": True} diff --git a/lib/socket_.py b/lib/socket_.py index ddb8f48..cc8eeac 100644 --- a/lib/socket_.py +++ b/lib/socket_.py @@ -8,8 +8,6 @@ import datetime import functools import json import random -import time -from threading import Timer from tornado import gen from tornado import httpclient @@ -135,8 +133,6 @@ class MessageSocketClient(WebSocketClient): self.connect_timeout, self.request_timeout) - self._later_handler['move_server'] = self._io_loop.call_later(random.randint(30, 60), self.auto_move_server) - def new_server_func(self): return self.ws_url, False @@ -146,8 +142,8 @@ class MessageSocketClient(WebSocketClient): def auto_move_server(self): ws_url, move = self.new_server_func() if move: + print('需要移动->', ws_url) self.server_replace(ws_url) - self._later_handler['move_server'] = self._io_loop.call_later(random.randint(30, 30), self.auto_move_server) def connect(self, url, name, uuid, reconnect=True, reconnect_interval=3): self.ws_url = url @@ -161,8 +157,6 @@ class MessageSocketClient(WebSocketClient): def on_connection_success(self): if self._connect_success: self._connect_success(self) - self._later_handler['heartbeat'] = self._io_loop.call_later(self.heartbeat_interval_in_secs, - functools.partial(self.sendheartbeat, self.ws_url)) def on_connection_close(self, reason): print('%s Connection closed reason=%s' % (self.ws_url, reason,)) @@ -179,16 +173,10 @@ class MessageSocketClient(WebSocketClient): def payload_data(self): return {"type": "ping"} - def sendheartbeat(self, _url): + def sendheartbeat(self): print(datetime.datetime.now(), "发送❤️") - if self.ws_url == _url: - msg = self.payload_data() - bool = self.send(msg) if msg else False - - if msg is None or bool: - self._later_handler['heartbeat'] = self._io_loop.call_later(self.heartbeat_interval_in_secs, - functools.partial(self.sendheartbeat, - self.ws_url)) + msg = self.payload_data() + self.send(msg) def on_message(self, msg): if not self._message_receive: @@ -201,3 +189,19 @@ class MessageSocketClient(WebSocketClient): self.close("quit") for k, handler in self._later_handler.items(): self._io_loop.remove_timeout(handler) + + +if __name__ == '__main__': + from apscheduler.schedulers.tornado import TornadoScheduler + + + def run(): + print(1) + + + sock = MessageSocketClient() + sched = TornadoScheduler() + sched.add_job(run, 'interval', seconds=3) + sched.start() + + sock._io_loop.instance().start() diff --git a/requirements.txt b/requirements.txt index 03eb9de..0b8280c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,4 +7,5 @@ munch==2.5.0 furl==2.1.0 sqlalchemy==1.3.12 psutil==5.6.7 -demjson==2.2.4 \ No newline at end of file +demjson==2.2.4 +apscheduler==3.6.3 \ No newline at end of file -- libgit2 0.24.0