diff --git a/lib/facebook.py b/lib/facebook.py index 4e6edaa..84762dc 100644 --- a/lib/facebook.py +++ b/lib/facebook.py @@ -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('', '') - 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): """