|
...
|
...
|
@@ -2027,102 +2027,25 @@ class FacebookClient(Client): |
|
|
|
res = self.graphql_api('ProfileOverviewContainerQuery', '3218725658179182', data)
|
|
|
|
return res['data']['user']['timeline_feed_units']
|
|
|
|
|
|
|
|
def AllPhotosAppCollectionPagelet(self, cursor=None):
|
|
|
|
def TimelineAppCollection(self, cursor=None):
|
|
|
|
"""
|
|
|
|
你的照片
|
|
|
|
"""
|
|
|
|
# 如果cursor为None,则请求 https://www.facebook.com/ana.sofia.583671/photos_all 获取到
|
|
|
|
if cursor is None or cursor == '':
|
|
|
|
url = 'https://www.facebook.com/ana.sofia.583671/photos_all'
|
|
|
|
try:
|
|
|
|
session = self._state.session_factory(self.user_obj.user_agent)
|
|
|
|
res = session.get(url, cookies=self._state.get_cookies())
|
|
|
|
html_text = res.text
|
|
|
|
html_text2 = html_text.replace('<!-- ', '').replace(' -->', '')
|
|
|
|
soup = BeautifulSoup(html_text, 'lxml')
|
|
|
|
script = soup.find_all('script')
|
|
|
|
for key in script:
|
|
|
|
cursor = re.findall(r'{__m:"__elem_559218ec_0_0"},"(.*?)"\]\],\["StarGrid"', key.prettify())
|
|
|
|
if len(cursor):
|
|
|
|
break
|
|
|
|
cursor = cursor[0]
|
|
|
|
for key in script:
|
|
|
|
num_list = re.findall(r'pagelet_timeline_app_collection_(.*?):(.*?):(.*?)"', key.prettify())
|
|
|
|
if len(num_list):
|
|
|
|
break
|
|
|
|
num_list = num_list[0]
|
|
|
|
for key in script:
|
|
|
|
pagelet_token = re.findall(r'pagelet_token:"(.*?)"', key.prettify())
|
|
|
|
if len(pagelet_token):
|
|
|
|
break
|
|
|
|
pagelet_token = pagelet_token[0]
|
|
|
|
print(cursor, num_list)
|
|
|
|
cache.set(f'{self.email}:AllPhotosAppCollectionPagelet', num_list)
|
|
|
|
cache.set(f'{self.email}:AllPhotosAppCollectionPagelet:pagelet_token', pagelet_token)
|
|
|
|
except Exception as err:
|
|
|
|
raise BaseException(f'获取必要参数错误{err}')
|
|
|
|
soup = BeautifulSoup(html_text2, 'lxml')
|
|
|
|
lis = soup.find_all("li", {"class": "fbPhotoStarGridElement"})
|
|
|
|
data_list = list()
|
|
|
|
for li in lis:
|
|
|
|
pic_id = li.attrs.get('data-fbid', None)
|
|
|
|
url = li.attrs.get('data-starred-src', None)
|
|
|
|
label = li.a.attrs.get('aria-label', None)
|
|
|
|
set_id = furl.furl(li.a.attrs['href']).args.get('set', None)
|
|
|
|
data = {
|
|
|
|
'pic_id': pic_id,
|
|
|
|
'set_id': set_id,
|
|
|
|
'url': url,
|
|
|
|
'label': label
|
|
|
|
}
|
|
|
|
data_list.append(data)
|
|
|
|
res = {
|
|
|
|
'data_list': data_list,
|
|
|
|
'cursor': cursor
|
|
|
|
}
|
|
|
|
return res
|
|
|
|
else:
|
|
|
|
num_list = cache.get(f'{self.email}:AllPhotosAppCollectionPagelet')
|
|
|
|
pagelet_token = cache.get(f'{self.email}:AllPhotosAppCollectionPagelet:pagelet_token')
|
|
|
|
assert num_list is not None, 'cursor失效。'
|
|
|
|
get_data = {"collection_token": f"{num_list[0]}:{num_list[1]}:{num_list[2]}",
|
|
|
|
"cursor": cursor,
|
|
|
|
"disablepager": False, "overview": False, "profile_id": num_list[0],
|
|
|
|
"pagelet_token": pagelet_token,
|
|
|
|
"tab_key": "photos", "lst": f"{num_list[0]}:{num_list[0]}:{str(int(time.time()))}",
|
|
|
|
"order": None,
|
|
|
|
"sk": "photos", "importer_state": None}
|
|
|
|
data = {'data': json.dumps(get_data),
|
|
|
|
'fb_dtsg_ag': self._state.fb_dtsg_ag,
|
|
|
|
'dpr': 2,
|
|
|
|
'jazoest': self._state.jazoest
|
|
|
|
}
|
|
|
|
try:
|
|
|
|
url = furl.furl("https://www.facebook.com/ajax/pagelet/generic.php/AllPhotosAppCollectionPagelet").add(
|
|
|
|
data).url
|
|
|
|
f = self._state._get(url, {})
|
|
|
|
except Exception as err:
|
|
|
|
print(err)
|
|
|
|
soup = BeautifulSoup(f['payload'], 'lxml')
|
|
|
|
lis = soup.find_all("li", {"class": "fbPhotoStarGridElement"})
|
|
|
|
data_list = list()
|
|
|
|
for li in lis:
|
|
|
|
pic_id = li.attrs.get('data-fbid', None)
|
|
|
|
url = li.attrs.get('data-starred-src', None)
|
|
|
|
label = li.a.attrs.get('aria-label', None)
|
|
|
|
set_id = furl.furl(li.a.attrs['href']).args.get('set', None)
|
|
|
|
data = {
|
|
|
|
'pic_id': pic_id,
|
|
|
|
'set_id': set_id,
|
|
|
|
'url': url,
|
|
|
|
'label': label
|
|
|
|
}
|
|
|
|
data_list.append(data)
|
|
|
|
res = {
|
|
|
|
'data_list': data_list,
|
|
|
|
'cursor': cursor
|
|
|
|
}
|
|
|
|
return res
|
|
|
|
if not cursor:
|
|
|
|
cursor = None
|
|
|
|
variables = {"count": 8,
|
|
|
|
"cursor": cursor,
|
|
|
|
"scale": 2, "id": "YXBwX2NvbGxlY3Rpb246MTAwMDAzMTQ5NTE2NDk5OjIzMDUyNzI3MzI6NQ=="}
|
|
|
|
try:
|
|
|
|
res = self.graphql_api('ProfileCometAppCollectionPhotosRendererPaginationQuery', '3217177821672058',
|
|
|
|
variables)
|
|
|
|
if 'errors' in res:
|
|
|
|
return {'success': False, 'errors': res['errors']}
|
|
|
|
else:
|
|
|
|
return {'success': True, 'data': res['data']}
|
|
|
|
except Exception as e:
|
|
|
|
return {'success': False, 'errors': str(e)}
|
|
|
|
|
|
|
|
def delete_dialog(self, pic_id, set_id):
|
|
|
|
"""
|
...
|
...
|
|