作者 lemon

增加注销命令

... ... @@ -84,9 +84,8 @@ class Monitor(callback.CallBack):
return False
self._remove_member(email)
if not client.listening:
return True
client.stopListening()
if client.listening:
client.stopListening()
self.onLogout(client)
return True
... ... @@ -176,6 +175,10 @@ class Monitor(callback.CallBack):
kwargs = parameter.join(self.login, payload)
client = Munch(email=kwargs.get('email'))
self.executor.submit(self.thread, client, taskid, kwargs)
elif type_ == 'logout':
kwargs = parameter.join(self.logout, payload)
client = self._get_member(target)
self.executor.submit(self.thread, client, taskid, kwargs)
else:
try:
client = self._get_member(target)
... ...
... ... @@ -5,6 +5,7 @@
# @File : facebook.py
# @Software: PyCharm
import base64
import itertools
import json
import os
import random
... ... @@ -12,6 +13,7 @@ import re
import time
from enum import Enum
import demjson
import furl
from fbchat import Client, ThreadType, Message, Sticker, FBchatUserError, _exception, log, _util
from fbchat._state import State, session_factory, is_home
... ... @@ -90,10 +92,22 @@ class PCState(State):
else:
id = name = url = image = None
fb_dtsg = None
fb_dtsg_ag = None
jazoest = None
try:
fb_dtsg = re.compile(r'name="fb_dtsg" value="(.*?)"').search(r.text).group(1)
rec = re.compile(r'\["DTSGInitData",\[\],(\{.*?\}),\d+\]')
initdata = rec.search(r.text).group(1)
initdata = json.loads(initdata)
fb_dtsg = initdata['token']
fb_dtsg_ag = initdata['async_get_token']
except:
fb_dtsg = None
pass
try:
jazoest = re.search(r'name="jazoest" value="(\d+)"', r.text).group(1)
except:
pass
revision = int(r.text.split('"client_revision":', 1)[1].split(",", 1)[0])
... ... @@ -105,7 +119,7 @@ class PCState(State):
revision=revision,
session=session,
logout_h=logout_h,
counter=0
counter=0,
)
self.id = id
... ... @@ -113,6 +127,8 @@ class PCState(State):
self.page_url = url
self.imageurl = image
self._online = is_online
self.fb_dtsg_ag = fb_dtsg_ag
self.jazoest = jazoest
return self
... ... @@ -718,17 +734,34 @@ class FacebookClient(Client):
def get_user_agent(self):
return self._state._session.headers.get('User-Agent', random.choice(_util.USER_AGENTS))
def searchForUserByFilter(self, name=None, city=None):
url = 'https://www.facebook.com/search/top/'
data = {'q': 'angel',
'ref': 'side_filter',
'epa': 'FILTERS',
'filters': 'eyJycF9sb2NhdGlvbiI6IntcIm5hbWVcIjpcImxvY2F0aW9uXCIsXCJhcmdzXCI6XCIxMDYyNjI4ODI3NDU2OThcIn0ifQ==',
'ajaxpipe': '1',
'ajaxpipe_token': 'AXjhI9q4VDQji6Ox',
'quickling[version]': '1001720869;0;'
}
# f = furl.furl(url).add(data)
# print(f.url)
res=self._state._get('https://www.facebook.com/search/people/?q=angel&epa=FILTERS&filters=eyJjaXR5Ijoie1wibmFtZVwiOlwidXNlcnNfbG9jYXRpb25cIixcImFyZ3NcIjpcIjEwNjI2Mjg4Mjc0NTY5OFwifSJ9&ref=side_filter',{})
print(res)
\ No newline at end of file
def searchForUserByFilter(self, ext_data=None):
if not ext_data:
r = self._state._session.get(
'https://www.facebook.com/search/people/?q=%E5%B1%B1%E4%B8%8B&epa=FILTERS&filters=eyJjaXR5Ijoie1wibmFtZVwiOlwidXNlcnNfbG9jYXRpb25cIixcImFyZ3NcIjpcIjEwNjUxNDAwNjA1MzI1MFwifSJ9')
fbid = parse_html.get_all_raw_id(r.text)
global_data = re.findall(r'globalData:(\{.*?display_params.*?\}),prefetchPixels', r.text)[0]
data = demjson.decode(global_data)
complete = re.findall('"pageletComplete",\[\],\[(.*?)\]', r.text)[0]
data.update(demjson.decode(complete))
return {'fbid_list': fbid, 'ext_data': data}
else:
data = {'data': demjson.encode(ext_data), 'fb_dtsg_ag': self._state.fb_dtsg_ag}
res = self._state._get('https://www.facebook.com/ajax/pagelet/generic.php/BrowseScrollingSetPagelet', data)
ext_data.pop('page_number')
try:
for x in res.get('jsmods').get('require'):
if len(x) == 4 and x[1] == 'pageletComplete':
ext_data.update(x[3][0])
break
except:
pass
fbid = parse_html.get_all_raw_id(res['payload'])
if fbid and 'page_number' not in ext_data:
ext_data = None
# 无更多了
return {
'fbid_list': fbid,
'ext_data': ext_data,
}
... ...
... ... @@ -6,4 +6,5 @@ pyyaml==5.3
munch==2.5.0
furl==2.1.0
sqlalchemy==1.3.12
psutil==5.6.7
\ No newline at end of file
psutil==5.6.7
demjson==2.2.4
\ No newline at end of file
... ...
... ... @@ -145,3 +145,20 @@ def get_user_info(b):
pass
return id, name, url, image
return None, None, None, None
def get_all_raw_id(text):
fbids = []
b = bs4.BeautifulSoup(text, 'html.parser')
if 'raw_id\\\\":' in text:
pattern = re.compile(r'raw_id\\\\":(\d+),')
elem = b.find_all('div', class_='hidden_elem', string=pattern)
for e in elem:
key = pattern.findall(e.string)
fbids.extend(key)
fbids = list(set(fbids))
else:
r = re.compile(r'\\"raw_id\\":(\d+),')
key=r.findall(text)
fbids.extend(key)
return fbids
... ...