作者 陈俊学

2.3.9

增加新版本 我的照片翻页接口
... ... @@ -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):
"""
... ...