作者 陈俊学

2.3.9

增加新版本 我的照片翻页接口
@@ -2027,102 +2027,25 @@ class FacebookClient(Client): @@ -2027,102 +2027,25 @@ class FacebookClient(Client):
2027 res = self.graphql_api('ProfileOverviewContainerQuery', '3218725658179182', data) 2027 res = self.graphql_api('ProfileOverviewContainerQuery', '3218725658179182', data)
2028 return res['data']['user']['timeline_feed_units'] 2028 return res['data']['user']['timeline_feed_units']
2029 2029
2030 - def AllPhotosAppCollectionPagelet(self, cursor=None): 2030 + def TimelineAppCollection(self, cursor=None):
2031 """ 2031 """
2032 你的照片 2032 你的照片
2033 """ 2033 """
2034 # 如果cursor为None,则请求 https://www.facebook.com/ana.sofia.583671/photos_all 获取到 2034 # 如果cursor为None,则请求 https://www.facebook.com/ana.sofia.583671/photos_all 获取到
2035 - if cursor is None or cursor == '':  
2036 - url = 'https://www.facebook.com/ana.sofia.583671/photos_all'  
2037 - try:  
2038 - session = self._state.session_factory(self.user_obj.user_agent)  
2039 - res = session.get(url, cookies=self._state.get_cookies())  
2040 - html_text = res.text  
2041 - html_text2 = html_text.replace('<!-- ', '').replace(' -->', '')  
2042 - soup = BeautifulSoup(html_text, 'lxml')  
2043 - script = soup.find_all('script')  
2044 - for key in script:  
2045 - cursor = re.findall(r'{__m:"__elem_559218ec_0_0"},"(.*?)"\]\],\["StarGrid"', key.prettify())  
2046 - if len(cursor):  
2047 - break  
2048 - cursor = cursor[0]  
2049 - for key in script:  
2050 - num_list = re.findall(r'pagelet_timeline_app_collection_(.*?):(.*?):(.*?)"', key.prettify())  
2051 - if len(num_list):  
2052 - break  
2053 - num_list = num_list[0]  
2054 - for key in script:  
2055 - pagelet_token = re.findall(r'pagelet_token:"(.*?)"', key.prettify())  
2056 - if len(pagelet_token):  
2057 - break  
2058 - pagelet_token = pagelet_token[0]  
2059 - print(cursor, num_list)  
2060 - cache.set(f'{self.email}:AllPhotosAppCollectionPagelet', num_list)  
2061 - cache.set(f'{self.email}:AllPhotosAppCollectionPagelet:pagelet_token', pagelet_token)  
2062 - except Exception as err:  
2063 - raise BaseException(f'获取必要参数错误{err}')  
2064 - soup = BeautifulSoup(html_text2, 'lxml')  
2065 - lis = soup.find_all("li", {"class": "fbPhotoStarGridElement"})  
2066 - data_list = list()  
2067 - for li in lis:  
2068 - pic_id = li.attrs.get('data-fbid', None)  
2069 - url = li.attrs.get('data-starred-src', None)  
2070 - label = li.a.attrs.get('aria-label', None)  
2071 - set_id = furl.furl(li.a.attrs['href']).args.get('set', None)  
2072 - data = {  
2073 - 'pic_id': pic_id,  
2074 - 'set_id': set_id,  
2075 - 'url': url,  
2076 - 'label': label  
2077 - }  
2078 - data_list.append(data)  
2079 - res = {  
2080 - 'data_list': data_list,  
2081 - 'cursor': cursor  
2082 - }  
2083 - return res  
2084 - else:  
2085 - num_list = cache.get(f'{self.email}:AllPhotosAppCollectionPagelet')  
2086 - pagelet_token = cache.get(f'{self.email}:AllPhotosAppCollectionPagelet:pagelet_token')  
2087 - assert num_list is not None, 'cursor失效。'  
2088 - get_data = {"collection_token": f"{num_list[0]}:{num_list[1]}:{num_list[2]}", 2035 + if not cursor:
  2036 + cursor = None
  2037 + variables = {"count": 8,
2089 "cursor": cursor, 2038 "cursor": cursor,
2090 - "disablepager": False, "overview": False, "profile_id": num_list[0],  
2091 - "pagelet_token": pagelet_token,  
2092 - "tab_key": "photos", "lst": f"{num_list[0]}:{num_list[0]}:{str(int(time.time()))}",  
2093 - "order": None,  
2094 - "sk": "photos", "importer_state": None}  
2095 - data = {'data': json.dumps(get_data),  
2096 - 'fb_dtsg_ag': self._state.fb_dtsg_ag,  
2097 - 'dpr': 2,  
2098 - 'jazoest': self._state.jazoest  
2099 - } 2039 + "scale": 2, "id": "YXBwX2NvbGxlY3Rpb246MTAwMDAzMTQ5NTE2NDk5OjIzMDUyNzI3MzI6NQ=="}
2100 try: 2040 try:
2101 - url = furl.furl("https://www.facebook.com/ajax/pagelet/generic.php/AllPhotosAppCollectionPagelet").add(  
2102 - data).url  
2103 - f = self._state._get(url, {})  
2104 - except Exception as err:  
2105 - print(err)  
2106 - soup = BeautifulSoup(f['payload'], 'lxml')  
2107 - lis = soup.find_all("li", {"class": "fbPhotoStarGridElement"})  
2108 - data_list = list()  
2109 - for li in lis:  
2110 - pic_id = li.attrs.get('data-fbid', None)  
2111 - url = li.attrs.get('data-starred-src', None)  
2112 - label = li.a.attrs.get('aria-label', None)  
2113 - set_id = furl.furl(li.a.attrs['href']).args.get('set', None)  
2114 - data = {  
2115 - 'pic_id': pic_id,  
2116 - 'set_id': set_id,  
2117 - 'url': url,  
2118 - 'label': label  
2119 - }  
2120 - data_list.append(data)  
2121 - res = {  
2122 - 'data_list': data_list,  
2123 - 'cursor': cursor  
2124 - }  
2125 - return res 2041 + res = self.graphql_api('ProfileCometAppCollectionPhotosRendererPaginationQuery', '3217177821672058',
  2042 + variables)
  2043 + if 'errors' in res:
  2044 + return {'success': False, 'errors': res['errors']}
  2045 + else:
  2046 + return {'success': True, 'data': res['data']}
  2047 + except Exception as e:
  2048 + return {'success': False, 'errors': str(e)}
2126 2049
2127 def delete_dialog(self, pic_id, set_id): 2050 def delete_dialog(self, pic_id, set_id):
2128 """ 2051 """