作者 lemon

新增UA缓存持久化

... ... @@ -26,19 +26,24 @@ class CallBack():
def _task_(self, type_, client, taskid: int, code: int, msg: dict = None):
print('【%s】' % type_, code, msg)
def onLoggingIn(self, email, password, cookie):
def onLoggingIn(self, email, password, cookie, user_agent=None):
user_obj = UserList.get(email=email)
if not user_obj:
user_obj = UserList.insert(email=email, password=password, status=Status.LOGGINE, cookie=cookie)
user_obj = UserList.insert(email=email, password=password, status=Status.LOGGINE, cookie=cookie,
user_agent=user_agent)
else:
user_obj.set(status=Status.LOGGINE)
return user_obj
def onLoggedIn(self, client: FacebookClient):
client.user_obj.set(fbid=client.uid,
status=Status.ONLINE,
cookie=client.get_cookie())
client.user_obj.set(
fbid=client.uid,
status=Status.ONLINE,
cookie=client.get_cookie(),
user_agent=client.get_user_agent()
)
self._notify_(
type_="account",
client=client,
... ...
... ... @@ -58,13 +58,13 @@ class Monitor(callback.CallBack):
cfunc = functools.partial(mfunc, client)
setattr(client, fname, cfunc)
def login(self, email, password, cookie=None):
def login(self, email, password, cookie=None, user_agent=None):
client = self._get_member(email)
if client:
self.onLoggedIn(client) # 已登录就直接触发登录成功
return client.info()
else:
obj = self.onLoggingIn(email, password, cookie) # 返回db中的user对象
obj = self.onLoggingIn(email, password, cookie, user_agent) # 返回db中的user对象
try:
client = FacebookClient(obj)
client.user_obj = obj
... ... @@ -168,7 +168,7 @@ class Monitor(callback.CallBack):
type_ = cmd.get('type')
taskid = int(cmd.get('taskId'))
target = cmd.get('object')
payload = cmd.get('data', '{}') # str or jsonstr
payload = cmd.get('data', '{}') # str or jsonstr or dict
if type_ == 'login':
kwargs = parameter.join(self.login, payload)
... ...
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020-02-15 17:30
# @Author : Lemon
# @File : control_server.py
# @Software: PyCharm
import requests
... ...
... ... @@ -147,13 +147,13 @@ class RequestSource():
class FacebookClient(Client):
def __init__(self,
user_obj,
user_agent=None,
max_tries=1):
self.email = user_obj.email
self.user_obj = user_obj
self.extend = None
super().__init__(user_obj.email, user_obj.password, user_agent, max_tries, user_obj.format_cookie())
super().__init__(user_obj.email, user_obj.password, user_obj.user_agent, max_tries, user_obj.format_cookie())
def __repr__(self):
return "client:%s" % self.email
... ... @@ -710,3 +710,6 @@ class FacebookClient(Client):
if 'Arbiter.inform' in onloads:
return {"success": True}
raise BaseException("未知错误:" + onloads)
def get_user_agent(self):
return self._state._session.headers.get('User-Agent', random.choice(_util.USER_AGENTS))
... ...
... ... @@ -69,6 +69,7 @@ class UserList(Base):
email = Column(String(50), index=True, nullable=False, unique=True)
password = Column(String(50), nullable=False)
cookie = Column(String(512))
user_agent = Column(String(256))
fbid = Column(String(20), index=True)
status = Column(Integer, default=0, nullable=False, index=True)
... ... @@ -149,9 +150,11 @@ class UserList(Base):
return users
# Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)
if __name__ == '__main__':
print(UserList.all())
# def tes(email):
# u = UserList.get(email=email)
# u.set(status=3)
... ...