|
...
|
...
|
@@ -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,
|
|
|
|
} |
...
|
...
|
|