From a4ef621f9332868cc67dfe1616017c9787b72d02 Mon Sep 17 00:00:00 2001 From: SwZ Date: Tue, 8 Apr 2025 16:10:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0cookies=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spider/task.py | 1745 +++++++++++++++++++++++++----------------------- 1 file changed, 893 insertions(+), 852 deletions(-) diff --git a/spider/task.py b/spider/task.py index f400d55..8e8edd4 100644 --- a/spider/task.py +++ b/spider/task.py @@ -1,707 +1,704 @@ import io import time import uuid -import hashlib +import json import random import requests -import json -import re import threading import sys import os from const import MIMETYPE, BUCKET, PIC_TYPE, BASE_PATH from miniofile import client, put_object -from urllib.parse import quote from exceptions import AuthException, OperationFailed -from playwright.sync_api import sync_playwright +from playwright.sync_api import sync_playwright, Error, TimeoutError from PIL import ImageGrab -def get_dtsg_token(cookies): - headers = { - 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', - 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', - 'cache-control': 'max-age=0', - 'dpr': '2', - 'priority': 'u=0, i', - 'referer': 'https://www.facebook.com/?stype=lo&flo=1&deoia=1&jlou=AfchVgl8eRm2v_gCaPU1qqUi53hsIzJeyLP44jmPwCBLa7tUz9PYG-i0xhSc1SsyoN0UM8OfM2n4oImZKLL1OlDYm_2UMbJ2mRP3XWSR1jaRHg&smuh=27937&lh=Ac-9GdZW-IjAq1cdtk8', - 'sec-ch-prefers-color-scheme': 'light', - 'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"', - 'sec-ch-ua-full-version-list': '"Chromium";v="134.0.6998.89", "Not:A-Brand";v="24.0.0.0", "Google Chrome";v="134.0.6998.89"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-model': '""', - 'sec-ch-ua-platform': '"macOS"', - 'sec-ch-ua-platform-version': '"15.3.2"', - 'sec-fetch-dest': 'document', - 'sec-fetch-mode': 'navigate', - 'sec-fetch-site': 'same-origin', - 'sec-fetch-user': '?1', - 'upgrade-insecure-requests': '1', - 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', - 'viewport-width': '743', - } - - params = { - 'sk': 'welcome', - 'lsrc': 'lb', - } - response = requests.get('https://www.facebook.com/', params=params, cookies=cookies, headers=headers) - pattern = '"dtsg":{"token":"(.*?)"' - obj = re.search(pattern, response.text) - return str(obj.group(1)) - - -def _gen_waterfall_id(user_id): - a = 2147483647 - result = random.random() * a - s = f'{user_id}{int(time.time())}{result}' - md5 = hashlib.md5(s.encode('utf-8')) - return md5.hexdigest() - - -def _get_boundary(): - s = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM' - return ''.join(random.choices(s, k=16)) - - -def _upload_photo(cookies, filename, file, token): - user_id = cookies['c_user'] - boundary = _get_boundary() - headers = { - 'accept': '*/*', - 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', - 'content-type': f'multipart/form-data; boundary=----WebKitFormBoundary{boundary}', - 'origin': 'https://www.facebook.com', - 'priority': 'u=1, i', - 'referer': 'https://www.facebook.com/', - 'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-platform': '"macOS"', - 'sec-fetch-dest': 'empty', - 'sec-fetch-mode': 'cors', - 'sec-fetch-site': 'same-site', - 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', - } - - params = { - 'av': user_id, - '__aaid': '0', - '__user': user_id, - '__a': '1', - '__req': '24', - '__hs': '20160.HYP:comet_pkg.2.1...1', - 'dpr': '2', - '__ccg': 'EXCELLENT', - '__rev': '1020837445', - '__s': 'pywjy0:q8hbxy:j4h991', - '__hsi': '7481088902259545192', - '__dyn': '7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE3Qwb-q7oc81EEbbwto88422y11wBz83WwgEcEhwGxu782lwv89kbxS1Fwc61awkovwRwlE-U2exi4UaEW2au1jwUBwJK14xm3y11xfxmu3W3y261eBx_wHwdG7EbUG2-azqwaW223908O3216xi4UK2K2WEjxK2B08-269wkopg6C13xe3a3Gfw-KufxamEbbxG1fBG2-2K0E846fwk8eo', - '__csr': 'g5rddNQ9n4MIyONklsARH4iiHazhb4ijqQKDWZvW8RKrndrShiSiA9h9adctAAOf99HSBFfVDFlJ9Frkwy8AWQleqVV95QXHh8GATKmh4QVEGjh49x7zdbBi-FEyiQnJXpp6KBhXyaVkhZoLVOaijxmmfxxaibyKmmtabHXyqAAx2GhonK9AV9KdAzbxai4Z7gHAizVoOEgy98KHDBAKq2TJ2EW8DG8yaFaV8C2DDxbiyrBWAzi4GcKuGG4UK8CCizRWCyeRx6iidyVA2am9CGdzqDAKuU8rxuu4WK7UXwAK9yqzo9axefxy9opwGxSfxeE8pqzHy8tKuazpFoO2qUG5UKi3C1ex-uEowce2Om4Ua8dUy0j-0Fo5K3K0C61hxfw9S2CE4MM2pg6q2uFGBiHg-7EcUG2W18w4BwwwbC4V8aEG3-4FA0EoaEO0GayGBwqF8rz88Ai0CEvwh85m48B0lmeAwgUfoaUpxmm3yawiWxei9wOU2uHwPxCehlwcC02jC02NK04fqRwj_wfHw0Cew8txugw02Ocw6Ry82Tw4Vwmotg3awrE7G2m08fwk86204M81KU0uWP07sCw5kg0Em08lg3Hwww8K0ka086g65w37U1poy1owjU1g8a84G4Q0lG08Py8Glw13i4U0v6Dw2Jo565m4r8U1uioK2ulZ1RagOgGu0lWrpE31yU-3q0Z81m81p8Iw0tywjpo6q0ssw', - '__hsdp': '', - '__hblp': '', - '__comet_req': '15', - 'fb_dtsg': token, - 'jazoest': '25581', - 'lsd': 'EuheViRhRnOVOfgS9HBpbx', - '__spin_r': '1020837445', - '__spin_b': 'trunk', - '__spin_t': '1741826744', - } - content_type = MIMETYPE.get(filename.split('.')[-1]) - data = { - 'source': '8', - 'profile_id': user_id, - 'waterfallxapp': 'comet', - 'upload_id': 'jsc_c_5', - } - - form_data = b'' - for k, v in data.items(): - form_data += b'------WebKitFormBoundary%s\r\nContent-Disposition: form-data; name="%s"\r\n\r\n%s\r\n' % ( - boundary.encode('utf-8'), k.encode('utf-8'), v.encode('utf-8') - ) - form_data += b'------WebKitFormBoundary%s\r\nContent-Disposition: form-data; name="file"; filename="%s"\r\n' \ - b'Content-Type: %s\r\n\r\n%s\r\n------WebKitFormBoundary%s--\r\n' % \ - (boundary.encode('utf-8'), filename.encode('utf-8'), content_type.encode('utf-8'), - file.getvalue(), boundary.encode('utf-8')) - - response = requests.post( - 'https://upload.facebook.com/ajax/react_composer/attachments/photo/upload', - params=params, - cookies=cookies, - headers=headers, - data=form_data, - ) - result = response.text[9:] - photo_id = json.loads(result)['payload']['photoID'] - return photo_id - - -def _upload_video(cookies, filename, file, token): - user_id = cookies['c_user'] - content_type = MIMETYPE.get(filename.split('.')[-1]) - content = file.getvalue() - file_size = str(len(content)) - uri = f'1741828726893-{filename}-{content_type}-{file_size}-' \ - f'498AEJ73tToOXuUki2xK88hus3f+nSxTuf4/921pFh4=' - uri = f"{hashlib.md5(uri.encode('utf-8'))}-0-{file_size}" - start_headers = { - 'accept': '*/*', - 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', - 'content-type': 'application/x-www-form-urlencoded', - 'origin': 'https://www.facebook.com', - 'priority': 'u=1, i', - 'referer': 'https://www.facebook.com', - 'sec-ch-prefers-color-scheme': 'light', - 'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"', - 'sec-ch-ua-full-version-list': '"Chromium";v="134.0.6998.46", "Not:A-Brand";v="24.0.0.0", "Google Chrome";v="134.0.6998.46"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-model': '""', - 'sec-ch-ua-platform': '"macOS"', - 'sec-ch-ua-platform-version': '"15.3.2"', - 'sec-fetch-dest': 'empty', - 'sec-fetch-mode': 'cors', - 'sec-fetch-site': 'same-origin', - 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', - 'x-asbd-id': file_size, - 'x-fb-lsd': 'EuheViRhRnOVOfgS9HBpbx', - 'x_fb_video_waterfall_id': '1162dcb62930e0a2f88aec53e2359276', - } - - params = { - '__a': '1', - } - file_extension = content_type.split('/')[-1] - data = f'waterfall_id=1162dcb62930e0a2f88aec53e2359276&target_id={user_id}&source=composer&composer_entry_point_ref' \ - f'=timeline&supports_chunking=true&supports_file_api=true&file_size={file_size}&' \ - f'file_extension={file_extension}&partition_start_offset=0&partition_end_offset={file_size}&' \ - f'composer_dialog_version=V2&video_publisher_action_source&__aaid=0&__user={user_id}&__a=1&__req=51' \ - f'&__hs=20160.HYP%3Acomet_pkg.2.1...1&dpr=2&__ccg=EXCELLENT&__rev=1020837445&__s=r0kci7%3Aq8hbxy%3Aj4h991&' \ - f'__hsi=7481088902259545192&__dyn=7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyU8EW1twYwJyE24wJwkEkwUx60GE5O0BU2_CxS320qafxOU7m2210wEwgo9oO0-E4a3a4oaEnxO0Bo7O2l2Utwqob82kwiE567Udo5qfK0zEkxe2GewyDwkUe9obrwh8lwUwgojUlDw-wUwxwjFovUaU3qxW2-awLyESE2KwwwOg2cwMwhEkxebwHwKG4UrwFg2fwxyo566k1FwgUjwOwWzUfHDzUiBG2OUqwjVqwLwHwa211zU523C&__csr=g5r6Yt2lNcbjiNklsARR4iiHazhb4ih2R8DWtvW8RKrndrOdiShk9jhcYNSijbkACIGmA_JnTnQCBJi28yjHhkVHDAAkzKJ4yGjuVp4jqCyFdbh98hUPiVkLGqFpapuTJBAqWl7KiWVkhZpFfD8F9e5po-bz4Fay8HBBDiyW-VGGii4aF5x6mUCjACUCV8Na4F94dQterAiAyFoOEgy98KHDBAKq2TJ2ECi8DG8yaFaV8C2DDxbiBKVuF8MFazbDGGxeby9FAEZuFEzJogh98SbCg8FoCqESaGFVbDK26UkGu4WK7UXwAK9yqzo9axefxy9opwGxSfxeE8pqzHy8tKuazpFoO2qUG5VF98dGwjEvDG6833wIBxe2y3u8w4_wam1rwXw9xwkojU2twFG1cc0Ck1CwDGqFkGQfxW3eawKwi819o882Vxei2G9gfUiCg2xwGzawanoCFo6Gi6UO294w9G7U4i1lx29g5lzF84e3S2K6olBwUyE4KEjAyocK0DGUcUpzAlo39w0AVw0Irw13SJo4_U3WU0A3w1QK0xS5V200b8O0rm8wt84a0jC1pxR0cG1KwuE9o0w-1gwo80j0w6Xw1XHc0tOq0lh02xo0xl0eK220yU4i0_o0wp0om0vC0im0mm8wm84-0k22y1axd05qw2cUyaBo0gQxe0s204wEyaw5KDw4aw6GwkolohIzwf20y2oK2ulZ1RagOgGu0lWrpE31yU-3q0JEfo1m81p8Iw0tywjpo6q0ssw&__hsdp=&__hblp=&__comet_req=15&fb_dtsg={quote(token)}&jazoest=25581&lsd=EuheViRhRnOVOfgS9HBpbx&__spin_r=1020837445&__spin_b=trunk&__spin_t=1741826744' - - response = requests.post( - 'https://www.facebook.com/ajax/video/upload/requests/start/', - params=params, - cookies=cookies, - headers=start_headers, - data=data, - ) - result = response.text[9:] - - video_id = json.loads(result)['payload']['video_id'] - headers = { - 'accept': '*/*', - 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', - 'composer_session_id': '1162dcb62930e0a2f88aec53e2359276', - 'end_offset': file_size, - 'id': 'undefined', - 'offset': '0', - 'origin': 'https://www.facebook.com', - 'priority': 'u=1, i', - 'product_media_id': video_id, - 'referer': 'https://www.facebook.com/', - 'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-platform': '"macOS"', - 'sec-fetch-dest': 'empty', - 'sec-fetch-mode': 'cors', - 'sec-fetch-site': 'same-site', - 'start_offset': '0', - 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', - 'x-entity-length': file_size, - 'x-entity-name': filename, - 'x-entity-type': content_type, - 'x-total-asset-size': file_size, - 'content-type': 'application/x-www-form-urlencoded', - } - - params = { - '__aaid': '0', - '__user': user_id, - '__a': '1', - '__req': '1a', - '__hs': '20160.HYP:comet_pkg.2.1...1', - 'dpr': '2', - '__ccg': 'EXCELLENT', - '__rev': '1020850159', - '__s': 'nc8uuq:q8hbxy:f9euk7', - '__hsi': '7481168370954579081', - '__dyn': '7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE3Qwb-q7oc81EEbbwto88422y11wBz83WwgEcEhwGxu782lwv89kbxS1Fwc61awkovwRwlE-U2exi4UaEW2au1jwUBwJK14xm3y11xfxmu3W3y261eBx_wHwdG7EbUG2-azqwaW223908O3216xi4UK2K2WEjxK2B08-269wkopg6C13xe3a3Gfw-KufxamEbbxG1fBG2-2K0E846fwk8eo', - '__csr': 'gf5M84IBlR5Et22d5N7aT69shdb8BN-zbq49b8naVaQWhcJrb8Bj-O_RjipZSD8iZcXiHTyXmJqli6DlbJ4AgSRAQAWhrJ9erWgHKt4V8KFqCmRLyRQ8jChWXhkVkqvWKUTRBVamVDCDBV9V4UKumrKpBByWK5KeHDx2iuAuKVEZGnGF44VWz8xe4VFBJ4zUy5pUhy98Cpu8xiaVUycyK49oS9WUOfyFo-VvQUOppVQcgyHzKFEjAwFqGE-qquimeGiWxOrGQ9ADz6ql3Uycz9A9xqEmyJ1y6F-E-m6oSi7-ahk2O5U-5Gx2dgoDxy68pxyu6oWbJyU-9yUS2OFF9-icwww-wVKi3u48sK2iq9wTomwhUO0QEGpwea1-Dg-4Cm4o4yHUbP0v40iN2bUhh8721JwbO3m0tKEc82WCyZ7Wz86i1hwxx13Wwu8eo2xwa3wiS0RU4m0mq44u8gKq6A4EO6Q2J7Fd0a68wiA1iwm8BwDw7BxTw9CBy80mLg0dDU0aCo022-w0U-waq0d1z8b8vw6Me1jw5Uo3Yg1Vod86G3q17w2yoeo17U2dwoUco1docoao2dxm06kU4t02fyxmp02480PO0-o4W09sw3r80DCpm0gh09q0gm19z-588o0qVg09dU24w2Moao4yQ1Tyy01p8w0n0mfwCgkx91jw5HK0TUS1OO2o7UhbK2p0FVVCbCg', - '__hsdp': '', - '__hblp': '', - '__comet_req': '15', - 'fb_dtsg': token, - 'jazoest': '25320', - 'lsd': 'kr_xMDgwgZMvLcmrnMrL6A', - '__spin_r': '1020850159', - '__spin_b': 'trunk', - '__spin_t': '1741845247', - } - - response = requests.post( - f'https://rupload-sin6-3.up.facebook.com/fb_video/{uri}', - params=params, - cookies=cookies, - headers=headers, - data=content, - ) - - video_file_chunk = response.json()['h'] - params = { - '__a': '1', - } - - data = { - 'waterfall_id': '1162dcb62930e0a2f88aec53e2359276', - 'target_id': user_id, - 'video_id': video_id, - 'source': 'composer', - 'composer_entry_point_ref': 'timeline', - 'supports_chunking': 'true', - 'supports_upload_service': 'true', - 'partition_start_offset': '0', - 'partition_end_offset': file_size, - 'start_offset': '0', - 'end_offset': file_size, - 'upload_speed': '0', - 'fbuploader_video_file_chunk': video_file_chunk, - 'composer_dialog_version': 'V2', - '__aaid': '0', - '__user': user_id, - '__a': '1', - '__req': '2w', - '__hs': '20160.HYP:comet_pkg.2.1...1', - 'dpr': '2', - '__ccg': 'EXCELLENT', - '__rev': '1020855273', - '__s': 'wgfbjc:q8hbxy:0fgg9t', - '__hsi': '7481172705613662617', - '__dyn': '7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE3Qwb-q7oc81EEbbwto88422y11wBz83WwgEcEhwGxu782lwv89kbxS1Fwc61awkovwRwlE-U2exi4UaEW2au1jwUBwJK14xm3y11xfxmu3W3y261eBx_wHwdG7EbUG2-azqwaW223908O3216xi4UK2K2WEjxK2B08-269wkopg6C13xe3a3Gfw-KufxamEbbxG1fBG2-2K0E846fwk8eo', - '__csr': 'g5fd4ONcuznkn5hsyqfONYhRYIB9R7jPTbnFuILa_SiT8HqZ99GAoyaOqnmGiEzGTkxQGKlfaBlaihkhbuh8HKaGAKHh5VfUOvkEyCV5KdQByUx9aSVAVWybhJCVpBK_UKjQm8rlenBFAgKAnCGHxmWBhUyXG8KiqRQqXo-VESWJ4BhEGQ6WiXylXLjDUGqFWyFEyQcgWJeumucK8BK8hEKuEKWgqDjVokjhpp9u8gkyWgiGbxmQdKmBxaq9z9p8GGADAUyUKi9DBBV9fzKAQubAyXy8S49pUgybgKezVEVedCDV898nCAgC2i4UkwCwxKVpFUrhpryogyElxW4UCi6lz88poB5x29DVo8EnK7EiK2OewkUvxebAwvFoy5E425-0Io57wRx-12xgF84m2u14w44ixm3C44aAxibgK3Sq18w9ady9k2q16wio4rx93URG6qwabwgQ2u5oWi37w4kxe0q6ay8xDU9UaybwbK8G0UUgAgaE2Gw40xO2OEggi-483rwp87S1x-7oF04dw6rhE1vU2Kh8C06XU1h83qG023e02Gi00wE80eiU2Lw3fQ1aw6_812wCw56glDU3QDw7tgy0DE7-0a8wj83hw4IwNw4oxO362C0zolw1Be17g0zykFA08Cw13q0J40uq0dXw2w30fOu0BU3Xwj9k3Gdw1HB00AUwrU0Ji2G3i5Q1_Ew0mcBo0m-bwsIw1r8aE7O18wrqZo22NfcE9A2NAy4', - '__hsdp': '', - '__hblp': '', - '__comet_req': '15', - 'fb_dtsg': token, - 'jazoest': '25687', - 'lsd': 'W2jWYsm50EoSzDoSO5Ue9n', - '__spin_r': '1020855273', - '__spin_b': 'trunk', - '__spin_t': '1741846256', - } - - requests.post( - 'https://www.facebook.com/ajax/video/upload/requests/receive/', - params=params, - cookies=cookies, - headers=start_headers, - data=data, - ) - return video_id - - -def _upload_comment_video(cookies, filename, file, token): - user_id = cookies['c_user'] - waterfall_id = _gen_waterfall_id(user_id) - composer_session_id = _gen_waterfall_id(user_id) - content_type = MIMETYPE.get(filename.split('.')[-1]) - content = file.getvalue() - file_size = str(len(content)) - uri = f'1741828726893-{filename}-{content_type}-{file_size}-' \ - f'498AEJ73tToOXuUki2xK88hus3f+nSxTuf4/921pFh4=' - uri = f"{hashlib.md5(uri.encode('utf-8'))}-0-{file_size}" - file_extension = content_type.split('/')[-1] - headers = { - 'accept': '*/*', - 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', - 'content-type': 'application/x-www-form-urlencoded', - 'origin': 'https://www.facebook.com', - 'priority': 'u=1, i', - 'referer': 'https://www.facebook.com/', - 'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-platform': '"macOS"', - 'sec-fetch-dest': 'empty', - 'sec-fetch-mode': 'cors', - 'sec-fetch-site': 'same-site', - 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', - 'x_fb_video_waterfall_id': waterfall_id, - } - - params = { - '__a': '1', - } - data = f'file_size={file_size}&file_extension={file_extension}&target_id={user_id}&source=comment&composer_dialog_version&waterfall_id={waterfall_id}&composer_session_id={composer_session_id}&composer_entry_point_ref=feed_story&composer_work_shared_draft_mode&has_file_been_replaced=false&supports_chunking=true&supports_file_api=true&partition_start_offset=0&partition_end_offset={file_size}&creator_product=2&spherical=false&video_publisher_action_source&__aaid=0&__user={user_id}&__a=1&__req=2s&__hs=20161.HYP%3Acomet_pkg.2.1...1&dpr=2&__ccg=EXCELLENT&__rev=1020896933&__s=a6lpwr%3Av72pg5%3Alvg2er&__hsi=7481534814351260330&__dyn=7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE5O0BU2_CxS320qa2OU7m2210wEwgo9oO0-E4a3a4oaEnxO0Bo7O2l2Utwqo31wiE567Udo5qfK0zEkxe2GewyDwkUe9obrwh8lwUwgojUlDw-wUwxwjFovUaU3qxW2-awLyESE2KwwwOg2cwMwhEkxebwHwKG4UrwFg2fwxyo566k1FwgUjwOwWzUfHDzUiBG2OUqwjVqwLwHwa211zU523C&__csr=geI2ex4D7NYfTfshvbN7i94jjWq6l9OqZ4EzVsQx2dqGAACCPZiqinWORrt9ajKnl5IGSiGZbJ4F4CoyWRhd5iZ95CAOtLy4jBhkjt29F8KiABJyqQ9yFIDjiZ7Lhi5HhCZrXDUCAum598gzEWuUR7ADHDqK-tUTymayF9ECjCBXG8h8iQmaQ4LzVECh1Omh1u4USjy8CmuiSFbhbCy8gyGVoSuWy94Wig-4EKmcG8yqBVoXGWZ2ECXAxmb-mFoLgGUvz9u8z9eqm7Hy9bCiHKU-3mUsyoKcxaGKaBLyqGm7-8xy2KcDAh8hxK4EiAx7xq8wGBxycxy2S79pZ29EPxy5FUd8y5E9EB1a3m8xe482qwzxC4o3ux11e1wKaJkWuqF898RwAwaxwaO3C8yEOum1LWghxy4o8m0z3o0wqU7C3DxO2R4xeShrBCUO740zoLCy4by8ct0Lwyxe0D8y68bWyE8o6608Dw9m3G2C0Fk0F8nwCx-0D8-7FUnG8wro10o0ey80zO0p3wdrl0Lye00JSE0fvE-0bWCw960k66p81X60it0oOKu0kN282wwv80D21FwbG0iC0iO1bwSwAw9i582sw1ta1izU0yOkFQ0ne04Z82Pg1Y80mSBt044g7W0hW1bgeES06Kk02dm0he08Cwm88o5h0TwiE0mry8Gu05JUhwCghG4C4aw5Kxq0Ao4y1MDDyVE6EAyy89A2CcdyHu&__hsdp=&__hblp=&__comet_req=15&fb_dtsg={quote(token)}&jazoest=25421&lsd=sBdlvZ7xyxJeCPFduGOZlc&__spin_r=1020896933&__spin_b=trunk&__spin_t=1741930566' - print(data) - response = requests.post( - 'https://vupload-edge.facebook.com/ajax/video/upload/requests/start/', - params=params, - cookies=cookies, - headers=headers, - data=data, - ) - result = response.text[9:] - video_id = json.loads(result)['payload']['video_id'] - - headers = { - 'accept': '*/*', - 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', - 'composer_session_id': waterfall_id, - 'end_offset': file_size, - 'id': 'undefined', - 'offset': '0', - 'origin': 'https://www.facebook.com', - 'priority': 'u=1, i', - 'product_media_id': video_id, - 'referer': 'https://www.facebook.com/', - 'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-platform': '"macOS"', - 'sec-fetch-dest': 'empty', - 'sec-fetch-mode': 'cors', - 'sec-fetch-site': 'same-site', - 'start_offset': '0', - 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', - 'x-entity-length': file_size, - 'x-entity-name': 'undefined', - 'x-entity-type': 'application/octet-stream', - 'x-total-asset-size': file_size, - 'content-type': 'application/x-www-form-urlencoded', - } - - params = { - '__aaid': '0', - '__user': user_id, - '__a': '1', - '__req': '2v', - '__hs': '20161.HYP:comet_pkg.2.1...1', - 'dpr': '2', - '__ccg': 'EXCELLENT', - '__rev': '1020896933', - '__s': 'a6lpwr:v72pg5:lvg2er', - '__hsi': '7481534814351260330', - '__dyn': '7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE5O0BU2_CxS320qa2OU7m2210wEwgo9oO0-E4a3a4oaEnxO0Bo7O2l2Utwqo31wiE567Udo5qfK0zEkxe2GewyDwkUe9obrwh8lwUwgojUlDw-wUwxwjFovUaU3qxW2-awLyESE2KwwwOg2cwMwhEkxebwHwKG4UrwFg2fwxyo566k1FwgUjwOwWzUfHDzUiBG2OUqwjVqwLwHwa211zU523C', - '__csr': 'geI2ex4D7NYfTfshvbN7i94jjWq6l9OqZ4EzVsQx2dqGAACCPZiqinWORrt9ajKnl5IGSiGZbJ4F4CoyWRhd5iZ95CAOtLy4jBhkjt29F8KiABJyqQ9yFIDjiZ7Lhi5HhCZrXDUCAum598gzEWuUR7ADHDqK-tUTymayF9ECjCBXG8h8iQmaQ4LzVECh1Omh1u4USjy8CmuiSFbhbCy8gyGVoSuWy94Wig-4EKmcG8yqBVoXGWZ2ECXAxmb-mFoLgGUvz9u8z9eqm7Hy9bCiHKU-3mUsyoKcxaGKaBLyqGm7-8xy2KcDAh8hxK4EiAx7xq8wGBxycxy2S79pZ29EPxy5FUd8y5E9EB1a3m8xe482qwzxC4o3ux11e1wKaJkWuqF898RwAwaxwaO3C8yEOum1LWghxy4o8m0z3o0wqU7C3DxO2R4xeShrBCUO740zoLCy4by8ct0Lwyxe0D8y68bWyE8o6608Dw9m3G2C0Fk0F8nwCx-0D8-7FUnG8wro10o0ey80zO0p3wdrl0Lye00JSE0fvE-0bWCw960k66p81X60it0oOKu0kN282wwv80D21FwbG0iC0iO1bwSwAw9i582sw1ta1izU0yOkFQ0ne04Z82Pg1Y80mSBt044g7W0hW1bgeES06Kk02dm0he08Cwm88o5h0TwiE0mry8Gu05JUhwCghG4C4aw5Kxq0Ao4y1MDDyVE6EAyy89A2CcdyHu', - '__hsdp': '', - '__hblp': '', - '__comet_req': '15', - 'fb_dtsg': token, - 'jazoest': '25421', - 'lsd': 'sBdlvZ7xyxJeCPFduGOZlc', - '__spin_r': '1020896933', - '__spin_b': 'trunk', - '__spin_t': '1741930566', - } - response = requests.post( - f'https://rupload-sin6-3.up.facebook.com/fb_video/{uri}', - params=params, - cookies=cookies, - headers=headers, - data=content, - ) - video_file_chunk = response.json()['h'] - - boundary = _get_boundary() - headers = { - 'accept': '*/*', - 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', - 'content-type': f'multipart/form-data; boundary=----WebKitFormBoundary{boundary}', - 'origin': 'https://www.facebook.com', - 'priority': 'u=1, i', - 'referer': 'https://www.facebook.com/', - 'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-platform': '"macOS"', - 'sec-fetch-dest': 'empty', - 'sec-fetch-mode': 'cors', - 'sec-fetch-site': 'same-site', - 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', - 'x_fb_video_waterfall_id': waterfall_id, - } - params = { - "composer_session_id": composer_session_id, - "video_id": video_id, - "start_offset": "0", - "end_offset": file_size, - "source": "comment", - "target_id": user_id, - "waterfall_id": waterfall_id, - "composer_entry_point_ref": "feed_story", - "has_file_been_replaced": "false", - "supports_chunking": "true", - "partition_start_offset": "0", - "partition_end_offset": file_size, - "__aaid": "0", - "__user": user_id, - "__a": "1", - "__req": "2w", - "__hs": "20161.HYP:comet_pkg.2.1...1", - "dpr": "2", - "__ccg": "EXCELLENT", - "__rev": "1020896933", - "__s": "a6lpwr:v72pg5:lvg2er", - "__hsi": "7481534814351260330", - "__dyn": "7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE5O0BU2_CxS320qa2OU7m2210wEwgo9oO0-E4a3a4oaEnxO0Bo7O2l2Utwqo31wiE567Udo5qfK0zEkxe2GewyDwkUe9obrwh8lwUwgojUlDw-wUwxwjFovUaU3qxW2-awLyESE2KwwwOg2cwMwhEkxebwHwKG4UrwFg2fwxyo566k1FwgUjwOwWzUfHDzUiBG2OUqwjVqwLwHwa211zU523C", - "__csr": "geI2ex4D7NYfTfshvbN7i94jjWq6l9OqZ4EzVsQx2dqGAACCPZiqinWORrt9ajKnl5IGSiGZbJ4F4CoyWRhd5iZ95CAOtLy4jBhkjt29F8KiABJyqQ9yFIDjiZ7Lhi5HhCZrXDUCAum598gzEWuUR7ADHDqK-tUTymayF9ECjCBXG8h8iQmaQ4LzVECh1Omh1u4USjy8CmuiSFbhbCy8gyGVoSuWy94Wig-4EKmcG8yqBVoXGWZ2ECXAxmb-mFoLgGUvz9u8z9eqm7Hy9bCiHKU-3mUsyoKcxaGKaBLyqGm7-8xy2KcDAh8hxK4EiAx7xq8wGBxycxy2S79pZ29EPxy5FUd8y5E9EB1a3m8xe482qwzxC4o3ux11e1wKaJkWuqF898RwAwaxwaO3C8yEOum1LWghxy4o8m0z3o0wqU7C3DxO2R4xeShrBCUO740zoLCy4by8ct0Lwyxe0D8y68bWyE8o6608Dw9m3G2C0Fk0F8nwCx-0D8-7FUnG8wro10o0ey80zO0p3wdrl0Lye00JSE0fvE-0bWCw960k66p81X60it0oOKu0kN282wwv80D21FwbG0iC0iO1bwSwAw9i582sw1ta1izU0yOkFQ0ne04Z82Pg1Y80mSBt044g7W0hW1bgeES06Kk02dm0he08Cwm88o5h0TwiE0mry8Gu05JUhwCghG4C4aw5Kxq0Ao4y1MDDyVE6EAyy89A2CcdyHu", - "__comet_req": "15", - "fb_dtsg": token, - "jazoest": "25421", - "lsd": "sBdlvZ7xyxJeCPFduGOZlc", - "__spin_r": "1020896933", - "__spin_b": "trunk", - "__spin_t": "1741930566" - } - form_data = b'------WebKitFormBoundary%s\r\nContent-Disposition: form-data; ' \ - b'name="fbuploader_video_file_chunk"\r\n\r\n%s\r\n' % ( - boundary.encode('utf-8'), video_file_chunk.encode('utf-8') - ) - requests.post( - 'https://vupload-edge.facebook.com/ajax/video/upload/requests/receive/', - cookies=cookies, - headers=headers, - params=params, - data=form_data, - ) - return video_id - - -def post(cookies, message, image_key=None): - user_id = cookies['c_user'] - dtsg_token = get_dtsg_token(cookies) - headers = { - 'accept': '*/*', - 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', - 'content-type': 'application/x-www-form-urlencoded', - 'origin': 'https://www.facebook.com', - 'priority': 'u=1, i', - 'referer': f'https://www.facebook.com/', - 'sec-ch-prefers-color-scheme': 'light', - 'sec-ch-ua': '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"', - 'sec-ch-ua-full-version-list': '"Not(A:Brand";v="99.0.0.0", "Google Chrome";v="133.0.6943.127", "Chromium";v="133.0.6943.127"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-model': '""', - 'sec-ch-ua-platform': '"macOS"', - 'sec-ch-ua-platform-version': '"15.3.2"', - 'sec-fetch-dest': 'empty', - 'sec-fetch-mode': 'cors', - 'sec-fetch-site': 'same-origin', - 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36', - 'x-asbd-id': '359341', - 'x-fb-friendly-name': 'ComposerStoryCreateMutation', - 'x-fb-lsd': 'aQBZ0Gh5mfQSPgCywj081r', - } - uuid4_token = str(uuid.uuid4()) - - # 处理图片或视频上传 - attachments = [] - if image_key: - # bio = client.download_bytes_file(BUCKET, image_key) - with open('../files/xmbl.mp4', 'rb') as f: - bio = io.BytesIO(f.read()) - filename = image_key.split('/')[-1] - content_type = MIMETYPE.get(filename.split('.')[-1]) - if not content_type: - raise OperationFailed('文件类型暂不支持') - if content_type in PIC_TYPE: - # 上传图片 - photo_id = _upload_photo(cookies, filename, bio, dtsg_token) - attachments = [{'photo': {'id': photo_id}}] - else: - # 上传视频 - video_id = _upload_video(cookies, filename, bio, dtsg_token) - attachments = [{'video': {'id': video_id, 'notify_when_processed': True}}] - - data = { - 'av': user_id, - '__aaid': '0', - '__user': user_id, - '__a': '1', - '__req': '42', - '__hs': '20159.HYP:comet_pkg.2.1...1', - 'dpr': '2', - '__ccg': 'EXCELLENT', - '__rev': '1020809040', - '__s': 'itr9j4:q8hbxy:4gveux', - '__hsi': '7480795543745950771', - '__dyn': '7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE5O0BU2_CxS320qa2OU7m221Fwgo9oO0-E4a3a4oaEnxO0Bo7O2l2Utwqo31wiE567Udo5qfK0zEkxe2GewyDwkUe9obrwh8lwUwgojUlDw-wSU8o4Wm7-2K1ywtUuwLyEbUGdG0HE88cA0z8c84q58jyUaUbGxe6Uak0zU8oC1hxB0qo4e4UcEeE-3WVU-4FqwIK6E4-mEbUaU2wwgo623C', - '__csr': 'g4r1p3O7ZNk4kn4gxn2lkIIp7iLlsZSQyO8yaXOEy9H8qAOsqXkGi8yGmzSXldtnhqh2nO4FkIFttVVQKmLnhZ9Jq8GJ6iybBt6QiF95iunUBF4gCqhSGrhWSuDCildrLCpVBC-VlDy-jK8n_DmlCBhJQUym-i6pahFVkVV9aCyGpKnXmfDiBBBgRaqXCAh8hnAypS4UKGKQvQWBzqAx3HVSjKip2qUi-mEgDAVkVaxai4WCCF5ypKqdKi9ypHCAGrBV_jAAxuHLV98hxCnAWV6GADy8Ci8hkFXiJ7K6omzrLh8x1a2qUjiJ38Na8znwzzXU-UkzXGdyrx50Ixei58OQ9ybxau2i4qDyku4U8ax516eLy8KcwAxi9xiufxiU8Q7EK2i14G5ocS2yHDwDwMwmEcE2LwLz9o15EN122i2GAp6hQGwIHyUZw867k18EE6Wao2_woo2lwEx61lye0x86Wi2u3ZCy9Q1tQ0F8lny8iye1kwOGcECUlwcu0Ko5m9J1by5GlU62ewYwXw9m0G846i0zEeUcVu2twuuE0n_w0wdw2cU1QEd8721iocE0OG2Dm5E081Enw08xG03HK1fw8a0nq0oeu1dw72a16wyw55wBo3jg1X48wa21-w2w85e0PoKu0hy0iy18wgEfE7uhxa5o8y3U9EK04SK9w4zDg0zygEyaw7Xw3mE3Vwbx07yw3IU1N306Ew9G0WVFmm1eBg0n9wcp0fafw17i0s60s60ju0rypo4O15w8e2a5o987S05wpQaw1eK0EkK464WzQ2C09tDxGE3qOuiA5f472dKLm', - '__hsdp': '', - '__hblp': '', - '__comet_req': '15', - 'fb_dtsg': dtsg_token, - 'jazoest': '25494', - 'lsd': 'WgZt97AQ_LCDMTfuw-sO6Y', - '__spin_r': '1020809040', - '__spin_b': 'trunk', - '__spin_t': '1741758441', - 'fb_api_caller_class': 'RelayModern', - 'fb_api_req_friendly_name': 'ComposerStoryCreateMutation', - 'variables': '{"input":{"composer_entry_point":"inline_composer","composer_source_surface":"timeline","idempotence_token":"%s_FEED","source":"WWW","attachments":%s,"audience":{"privacy":{"allow":[],"base_state":"EVERYONE","deny":[],"tag_expansion_state":"UNSPECIFIED"}},"message":{"ranges":[],"text":"%s"},"with_tags_ids":null,"inline_activities":[],"text_format_preset_id":"0","publishing_flow":{"supported_flows":["ASYNC_SILENT","ASYNC_NOTIF","FALLBACK"]},"logging":{"composer_session_id":"%s"},"navigation_data":{"attribution_id_v2":"ProfileCometTimelineListViewRoot.react,comet.profile.timeline.list,tap_bookmark,1741758458056,864702,61573941575877,,"},"tracking":[null],"event_share_metadata":{"surface":"timeline"},"actor_id":"%s","client_mutation_id":"9"},"feedLocation":"TIMELINE","feedbackSource":0,"focusCommentID":null,"gridMediaWidth":230,"groupID":null,"scale":2,"privacySelectorRenderLocation":"COMET_STREAM","checkPhotosToReelsUpsellEligibility":true,"renderLocation":"timeline","useDefaultActor":false,"inviteShortLinkKey":null,"isFeed":false,"isFundraiser":false,"isFunFactPost":false,"isGroup":false,"isEvent":false,"isTimeline":true,"isSocialLearning":false,"isPageNewsFeed":false,"isProfileReviews":false,"isWorkSharedDraft":false,"hashtag":null,"canUserManageOffers":false,"__relay_internal__pv__CometUFIShareActionMigrationrelayprovider":true,"__relay_internal__pv__GHLShouldChangeSponsoredDataFieldNamerelayprovider":false,"__relay_internal__pv__GHLShouldChangeAdIdFieldNamerelayprovider":false,"__relay_internal__pv__IsWorkUserrelayprovider":false,"__relay_internal__pv__CometUFIReactionsEnableShortNamerelayprovider":false,"__relay_internal__pv__CometFeedStoryDynamicResolutionPhotoAttachmentRenderer_experimentWidthrelayprovider":500,"__relay_internal__pv__CometImmersivePhotoCanUserDisable3DMotionrelayprovider":false,"__relay_internal__pv__WorkCometIsEmployeeGKProviderrelayprovider":false,"__relay_internal__pv__IsMergQAPollsrelayprovider":false,"__relay_internal__pv__FBReels_deprecate_short_form_video_context_gkrelayprovider":false,"__relay_internal__pv__FBReelsMediaFooter_comet_enable_reels_ads_gkrelayprovider":false,"__relay_internal__pv__StoriesArmadilloReplyEnabledrelayprovider":false,"__relay_internal__pv__FBReelsIFUTileContent_reelsIFUPlayOnHoverrelayprovider":false,"__relay_internal__pv__EventCometCardImage_prefetchEventImagerelayprovider":false,"__relay_internal__pv__GHLShouldChangeSponsoredAuctionDistanceFieldNamerelayprovider":false}' % ( - uuid4_token, json.dumps(attachments), message, uuid4_token, user_id - ), - 'server_timestamps': 'true', - 'doc_id': '9835564903120639', - } - response = requests.post('https://www.facebook.com/api/graphql/', cookies=cookies, headers=headers, data=data) - if response.status_code != 200: - raise OperationFailed(f'发帖异常 response: {response.text}') - - if response.json() and response.json().get('data'): - if not response.json()['data']['story_create'].get('timeline_feed_units_edge'): - return - post_id = response.json()['data']['story_create']['timeline_feed_units_edge']['node']['feedback']['id'] - return {'reso_id': post_id} - else: - raise OperationFailed(f'参数错误, response: {response.text}') - - -def like(cookies, post_id): - user_id = cookies['c_user'] - dtsg_token = get_dtsg_token(cookies) - headers = { - 'accept': '*/*', - 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', - 'content-type': 'application/x-www-form-urlencoded', - 'origin': 'https://www.facebook.com', - 'priority': 'u=1, i', - 'referer': 'https://www.facebook.com/', - 'sec-ch-prefers-color-scheme': 'light', - 'sec-ch-ua': '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"', - 'sec-ch-ua-full-version-list': '"Not(A:Brand";v="99.0.0.0", "Google Chrome";v="133.0.6943.127", "Chromium";v="133.0.6943.127"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-model': '""', - 'sec-ch-ua-platform': '"macOS"', - 'sec-ch-ua-platform-version': '"15.3.1"', - 'sec-fetch-dest': 'empty', - 'sec-fetch-mode': 'cors', - 'sec-fetch-site': 'same-origin', - 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36', - 'x-asbd-id': '359341', - 'x-fb-friendly-name': 'CometUFIFeedbackReactMutation', - 'x-fb-lsd': 'pSe8b3OaUeIWyqreatk6Bt', - } - - data = { - 'av': user_id, - '__aaid': '0', - '__user': user_id, - '__a': '1', - '__req': '73', - '__hs': '20159.HYP:comet_pkg.2.1...1', - 'dpr': '2', - '__ccg': 'EXCELLENT', - '__rev': '1020805083', - '__s': 'rkcs6h:q8hbxy:ud5a0g', - '__hsi': '7480739570773453695', - '__dyn': '7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE3Qwb-q7oc81EEbbwto886C11wBz83WwgEcEhwGxu782lwv89kbxS1Fwc61awkovwRwlE-U2exi4UaEW2au1jwUBwJK14xm3y11xfxmu3W3iU8o4Wm7-2K1ywtUuwLyEbUGdG0HE88cA0z8c84q58jyUaUbGxe6Uak0zU8oC1hxB0qo4e4UcEeE-3WVU-4FqwIK6E4-mEbUaU2wwgomwioeo', - '__csr': 'g4v2Qp2I8MB2sBiMP6hWT94Pi8BOh4JEAjOIAYkOkCOl8TFfXAlOEhi4QySYQQJ99Qyjh3uRIBtEDDqkREOQBWFa-leLCnfKGHflRKZpkAJQAnllFkQhrEDZ5h2pV7AFd6BA9LBFTG-nyJKAeh8yCgPKC8iBLAHKKmAayUGCQKjSF4ibCz6qhkX-V6pWBWCWLSHHmmJi2qKKQbXyp8-FqKclAgzylmiimHCdyQFQhCXWGq8jQpABnWGGGcDxbBJ6VpXFx69gygxAqmt2eiKjK-jQppoWu9JapzZknWiFf-h4y9VXBBDp5LKp3rFXimaBKihGijBLyAqAfBCxVUCuXx6EVScAx22Oezebx2UyWV9bCGrx279EqyGG5bF3e2uuFFEPDAK4UB3oHxp5UOvDAUG4ElymESeCCxLzVFAawNolgpw8i4o1hEd87u48swt81mS2C3pa1FAwcG2GeBl11240xo-2e11wzwXm598jx61xwTo9qwygBQ0Ho8EO5E36yt2Ah5UrBwJBAhe6VXjXwsy0aS7UZ1GeJ5Owxxa6U4x0OF2A4o4O8Ujg4G2K291i9Z08a4EnOel1-19wGCK7FEKK4VpU7W9y8RwDwCw0Bbw3s81DU0qfw3388Elwk_m1mo0Gm3W069UeU10ooAo7yU4K7802Nkw4YxS1fp86e0ZEaocE5iawDwuo2kwo8jwXwoo27wdu1aw9a0E8Dh411w3k8gwh8CA9w3pE7a08Swho9E1x83ww51waegB019W0G9U1hFE4e1byE6W0N87a08c4kq0F8hg3-Dw_Dw5rwroqw6wxXg6G11wgU3LmifwIwSgK0pu1jCw6yxkE1PXhE0AR0da48iw9i10wVw1wTw2FUGl0HxkwgBto3Qw80LOAwDWqQi5eAPJ4BBo2Qwax6Qu0FU4O540GUeUK2u0mK0jUw0tzwKx20EU1BO0', - '__hsdp': '', - '__hblp': '', - '__comet_req': '15', - 'fb_dtsg': dtsg_token, - 'jazoest': '25686', - 'lsd': 'pSe8b3OaUeIWyqreatk6Bt', - '__spin_r': '1020805083', - '__spin_b': 'trunk', - '__spin_t': '1741745409', - 'fb_api_caller_class': 'RelayModern', - 'fb_api_req_friendly_name': 'CometUFIFeedbackReactMutation', - 'variables': '{"input":{"attribution_id_v2":"ProfileCometTimelineListViewRoot.react,comet.profile.timeline.list,via_cold_start,1741762579222,259553,190055527696468,,","feedback_id":"%s","feedback_reaction_id":"1635855486666999","feedback_source":"NEWS_FEED","feedback_referrer":"/","is_tracking_encrypted":true,"tracking":["AZU7Uu1mm-QEQWdf13bCqxa9BLW6XkzoVE0sGm0QPL4CVtIl4WisVkoklN9Br-D0Au3gMFW4r6MvQ0nT00cAJa6iF6KyFW3HCZaxjanGT-stTURNU_RPjcB29mJ-hLkoviYK03qDPP41KJKtNwLxhWyj6z_wd3i__pyfdS8FecVlOj8qHhr2s6LJq32sUIqQ8omYEHGRnDN99kb9BW8HS_x4C8ZY8-fDY5abf-cXMixnohPQBtAqhQhwB2DxkFwqYxPHy6psbCYTCVyjbhPsFyvEfSO7bVN4_foTsx9dzcyhY820L0NB847Fzu77vWNC0wHffoD_SCOnJQTU8m-TcjVTbZu0vwoam47IPOi0DK3xSSxG_8bDXdbv86prssWEsvi7vkbERsPACyi9JcuGCiO0cIpOnJSsJkbuOU_BqYq7SrR9h254Px8T85lj5F_OmWCvOuKYJ8IAUS6cyc56dw-cGPBkQ2R5ewEDCl5uwfB0rg"],"session_id":"121da0a0-58ab-4ab0-93dd-6a7e3c42625e","actor_id":"%s","client_mutation_id":"1"},"useDefaultActor":false,"__relay_internal__pv__CometUFIReactionsEnableShortNamerelayprovider":false}' % ( - post_id, user_id - ), - 'server_timestamps': 'true', - 'doc_id': '9232085126871383', - } - - response = requests.post('https://www.facebook.com/api/graphql/', cookies=cookies, headers=headers, data=data) - if response.status_code != 200: - raise OperationFailed(f'点赞异常 response: {response.text}') - - -def comment(cookies, post_id, message, image_key=None): - user_id = cookies['c_user'] - uuid4_token = str(uuid.uuid4()) - dtsg_token = get_dtsg_token(cookies) - headers = { - 'accept': '*/*', - 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', - 'content-type': 'application/x-www-form-urlencoded', - 'origin': 'https://www.facebook.com', - 'priority': 'u=1, i', - 'referer': 'https://www.facebook.com/', - 'sec-ch-prefers-color-scheme': 'light', - 'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"', - 'sec-ch-ua-full-version-list': '"Chromium";v="134.0.6998.89", "Not:A-Brand";v="24.0.0.0", "Google Chrome";v="134.0.6998.89"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-model': '""', - 'sec-ch-ua-platform': '"macOS"', - 'sec-ch-ua-platform-version': '"15.3.2"', - 'sec-fetch-dest': 'empty', - 'sec-fetch-mode': 'cors', - 'sec-fetch-site': 'same-origin', - 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', - 'x-asbd-id': '359341', - 'x-fb-friendly-name': 'useCometUFICreateCommentMutation', - 'x-fb-lsd': 'sBdlvZ7xyxJeCPFduGOZlc', - } - - # 处理图片或视频上传 - attachments = 'null' - if image_key: - # bio = client.download_bytes_file(BUCKET, image_key) - with open('../xzpq.mp4', 'rb') as f: - bio = io.BytesIO(f.read()) - filename = image_key.split('/')[-1] - content_type = MIMETYPE.get(filename.split('.')[-1]) - if not content_type: - raise OperationFailed('文件类型暂不支持') - if content_type in PIC_TYPE: - # 上传图片 - photo_id = _upload_photo(cookies, filename, bio, dtsg_token) - attachments = json.dumps([{'media': {'id': photo_id}}]) - else: - # 上传视频 - video_id = _upload_comment_video(cookies, filename, bio, dtsg_token) - attachments = json.dumps([{'media': {'id': video_id}}]) - data = { - 'av': user_id, - '__aaid': '0', - '__user': user_id, - '__a': '1', - '__req': '2z', - '__hs': '20161.HYP:comet_pkg.2.1...1', - 'dpr': '2', - '__ccg': 'EXCELLENT', - '__rev': '1020896933', - '__s': 'a6lpwr:v72pg5:lvg2er', - '__hsi': '7481534814351260330', - '__dyn': '7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE5O0BU2_CxS320qa2OU7m2210wEwgo9oO0-E4a3a4oaEnxO0Bo7O2l2Utwqo31wiE567Udo5qfK0zEkxe2GewyDwkUe9obrwh8lwUwgojUlDw-wUwxwjFovUaU3qxW2-awLyESE2KwwwOg2cwMwhEkxebwHwKG4UrwFg2fwxyo566k1FwgUjwOwWzUfHDzUiBG2OUqwjVqwLwHwa211zU523C', - '__csr': 'geI2ex4D7NYfTfshvbN7i94jjWq6l9OqZ4EzVsQx2dqGAACCPZiqinWORrt9ajKnl5IGSiGZbJ4F4CoyWRhd5iZ95CAOtLy4jBhkjt29F8KiABJyqQ9yFIDjiZ7Lhi5HhCZrXDUCAum598gzEWuUR7ADHDqK-tUTymayF9ECjCBXG8h8iQmaQ4LzVECh1Omh1u4USjy8CmuiSFbhbCy8gyGVoSuWy94Wig-4EKmcG8yqBVoXGWZ2ECXAxmb-mFoLgGUvz9u8z9eqm7Hy9bCiHKU-3mUsyoKcxaGKaBLyqGm7-8xy2KcDAh8hxK4EiAx7xq8wGBxycxy2S79pZ29EPxy5FUd8y5E9EB1a3m8xe482qwzxC4o3ux11e1wKaJkWuqF898RwAwaxwaO3C8yEOum1LWghxy4o8m0z3o0wqU7C3DxO2R4xeShrBCUO740zoLCy4by8ct0Lwyxe0D8y68bWyE8o6608Dw9m3G2C0Fk0F8nwCx-0D8-7FUnG8wro10o0ey80zO0p3wdrl0Lye00JSE0fvE-0bWCw960k66p81X60it0oOKu0kN282wwv80D21FwbG0iC0iO1bwSwAw9i582sw1ta1izU0yOkFQ0ne04Z82Pg1Y80mSBt044g7W0hW1bgeES06Kk02dm0he08Cwm88o5h0TwiE0mry8Gu05JUhwCghG4C4aw5Kxq0Ao4y1MDDyVE6EAyy89A2CcdyHu', - '__hsdp': '', - '__hblp': '', - '__comet_req': '15', - 'fb_dtsg': dtsg_token, - 'jazoest': '25421', - 'lsd': 'sBdlvZ7xyxJeCPFduGOZlc', - '__spin_r': '1020896933', - '__spin_b': 'trunk', - '__spin_t': '1741930566', - 'fb_api_caller_class': 'RelayModern', - 'fb_api_req_friendly_name': 'useCometUFICreateCommentMutation', - 'variables': '{"feedLocation":"DEDICATED_COMMENTING_SURFACE","feedbackSource":110,"groupID":null,"input":{"client_mutation_id":"9","actor_id":"%s","attachments":%s,"feedback_id":"%s","formatting_style":null,"message":{"ranges":[],"text":"%s"},"reply_target_clicked":false,"attribution_id_v2":"ProfileCometTimelineListViewRoot.react,comet.profile.timeline.list,via_cold_start,1741930566987,158144,190055527696468,,","vod_video_timestamp":null,"is_tracking_encrypted":true,"tracking":["AZUnHF90UjvMroqev0xy6W_qNXEYnMdkDf2rOE-nm5QixlfrYaVfAvJUqno_2QpxLLNNH4DHVW3nOxZV7bQ8g-mFD5gsNi8pyl3TCLHIoaVbwibiTs-HdYDZiIkx1x3XW0xFcl8qgJvOjvbxKJfELSMgvIzV41LuBiCsetCc90f-Ix5k-9BspWI2AMnOMvYsWfxZ59yHxUtvL_D9lAdfopanDANfA5LeeDThbw5uaixa8GwokZpZGlwj0prU9qeQ9JWrOy6praN_WrvO2bZhFu3rhSBG_oKZ_bYZITmkN6uKs4eN4EVFhPfeVzGafPB5LoKIsY0Qs5zYTQdn8-KLvdYLHHhzcSxArKjActiRETyNQ8ZdZGThr0yyLy1weKmbRSKSoHSXC9eMJYF6ApK_zA2KFapQv_w2j9bIdnML9A9SbHYajroIofnXJ5eAHWv83TVbotU0gw-kl5zRzV25Am0tZ8-p7K8Two2ai0HxkF0MMTi60mI96lTmzLviyj8om76TLDB7-u-X5MLukgzHfqmTSnhd5KyVIrx77kLaXr4E-5mDMjPvAF5jcunXAJBjDl5rRmFze0rO1PgWwFEAvCvnjC8ftDH4VdRbW0wUMmQAMA","{\\"assistant_caller\\":\\"comet_above_composer\\",\\"conversation_guide_session_id\\":\\"d75579ed-48e4-4aac-8975-84cf698151f4\\",\\"conversation_guide_shown\\":null}"],"feedback_source":"DEDICATED_COMMENTING_SURFACE","idempotence_token":"client:%s","session_id":"cce85c8c-eb4e-4304-9e86-ac7d27d7f642"},"inviteShortLinkKey":null,"renderLocation":null,"scale":2,"useDefaultActor":false,"focusCommentID":null,"__relay_internal__pv__IsWorkUserrelayprovider":false}' % ( - user_id, attachments, post_id, message, uuid4_token - ), - 'server_timestamps': 'true', - 'doc_id': '9389802714420896', - } - response = requests.post('https://www.facebook.com/api/graphql/', cookies=cookies, headers=headers, data=data) - if response.status_code != 200: - raise OperationFailed(f'评论异常 response: {response.text}') - - if response.json() and response.json().get('data'): - return {'resp_id': response.json()['data']['comment_create']['feedback_comment_edge']['node']['id']} - else: - raise OperationFailed(f'参数错误, response: {response.text}') +# def get_dtsg_token(cookies): +# headers = { +# 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', +# 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', +# 'cache-control': 'max-age=0', +# 'dpr': '2', +# 'priority': 'u=0, i', +# 'referer': 'https://www.facebook.com/?stype=lo&flo=1&deoia=1&jlou=AfchVgl8eRm2v_gCaPU1qqUi53hsIzJeyLP44jmPwCBLa7tUz9PYG-i0xhSc1SsyoN0UM8OfM2n4oImZKLL1OlDYm_2UMbJ2mRP3XWSR1jaRHg&smuh=27937&lh=Ac-9GdZW-IjAq1cdtk8', +# 'sec-ch-prefers-color-scheme': 'light', +# 'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"', +# 'sec-ch-ua-full-version-list': '"Chromium";v="134.0.6998.89", "Not:A-Brand";v="24.0.0.0", "Google Chrome";v="134.0.6998.89"', +# 'sec-ch-ua-mobile': '?0', +# 'sec-ch-ua-model': '""', +# 'sec-ch-ua-platform': '"macOS"', +# 'sec-ch-ua-platform-version': '"15.3.2"', +# 'sec-fetch-dest': 'document', +# 'sec-fetch-mode': 'navigate', +# 'sec-fetch-site': 'same-origin', +# 'sec-fetch-user': '?1', +# 'upgrade-insecure-requests': '1', +# 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', +# 'viewport-width': '743', +# } +# +# params = { +# 'sk': 'welcome', +# 'lsrc': 'lb', +# } +# response = requests.get('https://www.facebook.com/', params=params, cookies=cookies, headers=headers) +# pattern = '"dtsg":{"token":"(.*?)"' +# obj = re.search(pattern, response.text) +# return str(obj.group(1)) +# +# +# def _gen_waterfall_id(user_id): +# a = 2147483647 +# result = random.random() * a +# s = f'{user_id}{int(time.time())}{result}' +# md5 = hashlib.md5(s.encode('utf-8')) +# return md5.hexdigest() +# +# +# def _get_boundary(): +# s = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM' +# return ''.join(random.choices(s, k=16)) +# +# +# def _upload_photo(cookies, filename, file, token): +# user_id = cookies['c_user'] +# boundary = _get_boundary() +# headers = { +# 'accept': '*/*', +# 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', +# 'content-type': f'multipart/form-data; boundary=----WebKitFormBoundary{boundary}', +# 'origin': 'https://www.facebook.com', +# 'priority': 'u=1, i', +# 'referer': 'https://www.facebook.com/', +# 'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"', +# 'sec-ch-ua-mobile': '?0', +# 'sec-ch-ua-platform': '"macOS"', +# 'sec-fetch-dest': 'empty', +# 'sec-fetch-mode': 'cors', +# 'sec-fetch-site': 'same-site', +# 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', +# } +# +# params = { +# 'av': user_id, +# '__aaid': '0', +# '__user': user_id, +# '__a': '1', +# '__req': '24', +# '__hs': '20160.HYP:comet_pkg.2.1...1', +# 'dpr': '2', +# '__ccg': 'EXCELLENT', +# '__rev': '1020837445', +# '__s': 'pywjy0:q8hbxy:j4h991', +# '__hsi': '7481088902259545192', +# '__dyn': '7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE3Qwb-q7oc81EEbbwto88422y11wBz83WwgEcEhwGxu782lwv89kbxS1Fwc61awkovwRwlE-U2exi4UaEW2au1jwUBwJK14xm3y11xfxmu3W3y261eBx_wHwdG7EbUG2-azqwaW223908O3216xi4UK2K2WEjxK2B08-269wkopg6C13xe3a3Gfw-KufxamEbbxG1fBG2-2K0E846fwk8eo', +# '__csr': 'g5rddNQ9n4MIyONklsARH4iiHazhb4ijqQKDWZvW8RKrndrShiSiA9h9adctAAOf99HSBFfVDFlJ9Frkwy8AWQleqVV95QXHh8GATKmh4QVEGjh49x7zdbBi-FEyiQnJXpp6KBhXyaVkhZoLVOaijxmmfxxaibyKmmtabHXyqAAx2GhonK9AV9KdAzbxai4Z7gHAizVoOEgy98KHDBAKq2TJ2EW8DG8yaFaV8C2DDxbiyrBWAzi4GcKuGG4UK8CCizRWCyeRx6iidyVA2am9CGdzqDAKuU8rxuu4WK7UXwAK9yqzo9axefxy9opwGxSfxeE8pqzHy8tKuazpFoO2qUG5UKi3C1ex-uEowce2Om4Ua8dUy0j-0Fo5K3K0C61hxfw9S2CE4MM2pg6q2uFGBiHg-7EcUG2W18w4BwwwbC4V8aEG3-4FA0EoaEO0GayGBwqF8rz88Ai0CEvwh85m48B0lmeAwgUfoaUpxmm3yawiWxei9wOU2uHwPxCehlwcC02jC02NK04fqRwj_wfHw0Cew8txugw02Ocw6Ry82Tw4Vwmotg3awrE7G2m08fwk86204M81KU0uWP07sCw5kg0Em08lg3Hwww8K0ka086g65w37U1poy1owjU1g8a84G4Q0lG08Py8Glw13i4U0v6Dw2Jo565m4r8U1uioK2ulZ1RagOgGu0lWrpE31yU-3q0Z81m81p8Iw0tywjpo6q0ssw', +# '__hsdp': '', +# '__hblp': '', +# '__comet_req': '15', +# 'fb_dtsg': token, +# 'jazoest': '25581', +# 'lsd': 'EuheViRhRnOVOfgS9HBpbx', +# '__spin_r': '1020837445', +# '__spin_b': 'trunk', +# '__spin_t': '1741826744', +# } +# content_type = MIMETYPE.get(filename.split('.')[-1]) +# data = { +# 'source': '8', +# 'profile_id': user_id, +# 'waterfallxapp': 'comet', +# 'upload_id': 'jsc_c_5', +# } +# +# form_data = b'' +# for k, v in data.items(): +# form_data += b'------WebKitFormBoundary%s\r\nContent-Disposition: form-data; name="%s"\r\n\r\n%s\r\n' % ( +# boundary.encode('utf-8'), k.encode('utf-8'), v.encode('utf-8') +# ) +# form_data += b'------WebKitFormBoundary%s\r\nContent-Disposition: form-data; name="file"; filename="%s"\r\n' \ +# b'Content-Type: %s\r\n\r\n%s\r\n------WebKitFormBoundary%s--\r\n' % \ +# (boundary.encode('utf-8'), filename.encode('utf-8'), content_type.encode('utf-8'), +# file.getvalue(), boundary.encode('utf-8')) +# +# response = requests.post( +# 'https://upload.facebook.com/ajax/react_composer/attachments/photo/upload', +# params=params, +# cookies=cookies, +# headers=headers, +# data=form_data, +# ) +# result = response.text[9:] +# photo_id = json.loads(result)['payload']['photoID'] +# return photo_id +# +# +# def _upload_video(cookies, filename, file, token): +# user_id = cookies['c_user'] +# content_type = MIMETYPE.get(filename.split('.')[-1]) +# content = file.getvalue() +# file_size = str(len(content)) +# uri = f'1741828726893-{filename}-{content_type}-{file_size}-' \ +# f'498AEJ73tToOXuUki2xK88hus3f+nSxTuf4/921pFh4=' +# uri = f"{hashlib.md5(uri.encode('utf-8'))}-0-{file_size}" +# start_headers = { +# 'accept': '*/*', +# 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', +# 'content-type': 'application/x-www-form-urlencoded', +# 'origin': 'https://www.facebook.com', +# 'priority': 'u=1, i', +# 'referer': 'https://www.facebook.com', +# 'sec-ch-prefers-color-scheme': 'light', +# 'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"', +# 'sec-ch-ua-full-version-list': '"Chromium";v="134.0.6998.46", "Not:A-Brand";v="24.0.0.0", "Google Chrome";v="134.0.6998.46"', +# 'sec-ch-ua-mobile': '?0', +# 'sec-ch-ua-model': '""', +# 'sec-ch-ua-platform': '"macOS"', +# 'sec-ch-ua-platform-version': '"15.3.2"', +# 'sec-fetch-dest': 'empty', +# 'sec-fetch-mode': 'cors', +# 'sec-fetch-site': 'same-origin', +# 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', +# 'x-asbd-id': file_size, +# 'x-fb-lsd': 'EuheViRhRnOVOfgS9HBpbx', +# 'x_fb_video_waterfall_id': '1162dcb62930e0a2f88aec53e2359276', +# } +# +# params = { +# '__a': '1', +# } +# file_extension = content_type.split('/')[-1] +# data = f'waterfall_id=1162dcb62930e0a2f88aec53e2359276&target_id={user_id}&source=composer&composer_entry_point_ref' \ +# f'=timeline&supports_chunking=true&supports_file_api=true&file_size={file_size}&' \ +# f'file_extension={file_extension}&partition_start_offset=0&partition_end_offset={file_size}&' \ +# f'composer_dialog_version=V2&video_publisher_action_source&__aaid=0&__user={user_id}&__a=1&__req=51' \ +# f'&__hs=20160.HYP%3Acomet_pkg.2.1...1&dpr=2&__ccg=EXCELLENT&__rev=1020837445&__s=r0kci7%3Aq8hbxy%3Aj4h991&' \ +# f'__hsi=7481088902259545192&__dyn=7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyU8EW1twYwJyE24wJwkEkwUx60GE5O0BU2_CxS320qafxOU7m2210wEwgo9oO0-E4a3a4oaEnxO0Bo7O2l2Utwqob82kwiE567Udo5qfK0zEkxe2GewyDwkUe9obrwh8lwUwgojUlDw-wUwxwjFovUaU3qxW2-awLyESE2KwwwOg2cwMwhEkxebwHwKG4UrwFg2fwxyo566k1FwgUjwOwWzUfHDzUiBG2OUqwjVqwLwHwa211zU523C&__csr=g5r6Yt2lNcbjiNklsARR4iiHazhb4ih2R8DWtvW8RKrndrOdiShk9jhcYNSijbkACIGmA_JnTnQCBJi28yjHhkVHDAAkzKJ4yGjuVp4jqCyFdbh98hUPiVkLGqFpapuTJBAqWl7KiWVkhZpFfD8F9e5po-bz4Fay8HBBDiyW-VGGii4aF5x6mUCjACUCV8Na4F94dQterAiAyFoOEgy98KHDBAKq2TJ2ECi8DG8yaFaV8C2DDxbiBKVuF8MFazbDGGxeby9FAEZuFEzJogh98SbCg8FoCqESaGFVbDK26UkGu4WK7UXwAK9yqzo9axefxy9opwGxSfxeE8pqzHy8tKuazpFoO2qUG5VF98dGwjEvDG6833wIBxe2y3u8w4_wam1rwXw9xwkojU2twFG1cc0Ck1CwDGqFkGQfxW3eawKwi819o882Vxei2G9gfUiCg2xwGzawanoCFo6Gi6UO294w9G7U4i1lx29g5lzF84e3S2K6olBwUyE4KEjAyocK0DGUcUpzAlo39w0AVw0Irw13SJo4_U3WU0A3w1QK0xS5V200b8O0rm8wt84a0jC1pxR0cG1KwuE9o0w-1gwo80j0w6Xw1XHc0tOq0lh02xo0xl0eK220yU4i0_o0wp0om0vC0im0mm8wm84-0k22y1axd05qw2cUyaBo0gQxe0s204wEyaw5KDw4aw6GwkolohIzwf20y2oK2ulZ1RagOgGu0lWrpE31yU-3q0JEfo1m81p8Iw0tywjpo6q0ssw&__hsdp=&__hblp=&__comet_req=15&fb_dtsg={quote(token)}&jazoest=25581&lsd=EuheViRhRnOVOfgS9HBpbx&__spin_r=1020837445&__spin_b=trunk&__spin_t=1741826744' +# +# response = requests.post( +# 'https://www.facebook.com/ajax/video/upload/requests/start/', +# params=params, +# cookies=cookies, +# headers=start_headers, +# data=data, +# ) +# result = response.text[9:] +# +# video_id = json.loads(result)['payload']['video_id'] +# headers = { +# 'accept': '*/*', +# 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', +# 'composer_session_id': '1162dcb62930e0a2f88aec53e2359276', +# 'end_offset': file_size, +# 'id': 'undefined', +# 'offset': '0', +# 'origin': 'https://www.facebook.com', +# 'priority': 'u=1, i', +# 'product_media_id': video_id, +# 'referer': 'https://www.facebook.com/', +# 'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"', +# 'sec-ch-ua-mobile': '?0', +# 'sec-ch-ua-platform': '"macOS"', +# 'sec-fetch-dest': 'empty', +# 'sec-fetch-mode': 'cors', +# 'sec-fetch-site': 'same-site', +# 'start_offset': '0', +# 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', +# 'x-entity-length': file_size, +# 'x-entity-name': filename, +# 'x-entity-type': content_type, +# 'x-total-asset-size': file_size, +# 'content-type': 'application/x-www-form-urlencoded', +# } +# +# params = { +# '__aaid': '0', +# '__user': user_id, +# '__a': '1', +# '__req': '1a', +# '__hs': '20160.HYP:comet_pkg.2.1...1', +# 'dpr': '2', +# '__ccg': 'EXCELLENT', +# '__rev': '1020850159', +# '__s': 'nc8uuq:q8hbxy:f9euk7', +# '__hsi': '7481168370954579081', +# '__dyn': '7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE3Qwb-q7oc81EEbbwto88422y11wBz83WwgEcEhwGxu782lwv89kbxS1Fwc61awkovwRwlE-U2exi4UaEW2au1jwUBwJK14xm3y11xfxmu3W3y261eBx_wHwdG7EbUG2-azqwaW223908O3216xi4UK2K2WEjxK2B08-269wkopg6C13xe3a3Gfw-KufxamEbbxG1fBG2-2K0E846fwk8eo', +# '__csr': 'gf5M84IBlR5Et22d5N7aT69shdb8BN-zbq49b8naVaQWhcJrb8Bj-O_RjipZSD8iZcXiHTyXmJqli6DlbJ4AgSRAQAWhrJ9erWgHKt4V8KFqCmRLyRQ8jChWXhkVkqvWKUTRBVamVDCDBV9V4UKumrKpBByWK5KeHDx2iuAuKVEZGnGF44VWz8xe4VFBJ4zUy5pUhy98Cpu8xiaVUycyK49oS9WUOfyFo-VvQUOppVQcgyHzKFEjAwFqGE-qquimeGiWxOrGQ9ADz6ql3Uycz9A9xqEmyJ1y6F-E-m6oSi7-ahk2O5U-5Gx2dgoDxy68pxyu6oWbJyU-9yUS2OFF9-icwww-wVKi3u48sK2iq9wTomwhUO0QEGpwea1-Dg-4Cm4o4yHUbP0v40iN2bUhh8721JwbO3m0tKEc82WCyZ7Wz86i1hwxx13Wwu8eo2xwa3wiS0RU4m0mq44u8gKq6A4EO6Q2J7Fd0a68wiA1iwm8BwDw7BxTw9CBy80mLg0dDU0aCo022-w0U-waq0d1z8b8vw6Me1jw5Uo3Yg1Vod86G3q17w2yoeo17U2dwoUco1docoao2dxm06kU4t02fyxmp02480PO0-o4W09sw3r80DCpm0gh09q0gm19z-588o0qVg09dU24w2Moao4yQ1Tyy01p8w0n0mfwCgkx91jw5HK0TUS1OO2o7UhbK2p0FVVCbCg', +# '__hsdp': '', +# '__hblp': '', +# '__comet_req': '15', +# 'fb_dtsg': token, +# 'jazoest': '25320', +# 'lsd': 'kr_xMDgwgZMvLcmrnMrL6A', +# '__spin_r': '1020850159', +# '__spin_b': 'trunk', +# '__spin_t': '1741845247', +# } +# +# response = requests.post( +# f'https://rupload-sin6-3.up.facebook.com/fb_video/{uri}', +# params=params, +# cookies=cookies, +# headers=headers, +# data=content, +# ) +# +# video_file_chunk = response.json()['h'] +# params = { +# '__a': '1', +# } +# +# data = { +# 'waterfall_id': '1162dcb62930e0a2f88aec53e2359276', +# 'target_id': user_id, +# 'video_id': video_id, +# 'source': 'composer', +# 'composer_entry_point_ref': 'timeline', +# 'supports_chunking': 'true', +# 'supports_upload_service': 'true', +# 'partition_start_offset': '0', +# 'partition_end_offset': file_size, +# 'start_offset': '0', +# 'end_offset': file_size, +# 'upload_speed': '0', +# 'fbuploader_video_file_chunk': video_file_chunk, +# 'composer_dialog_version': 'V2', +# '__aaid': '0', +# '__user': user_id, +# '__a': '1', +# '__req': '2w', +# '__hs': '20160.HYP:comet_pkg.2.1...1', +# 'dpr': '2', +# '__ccg': 'EXCELLENT', +# '__rev': '1020855273', +# '__s': 'wgfbjc:q8hbxy:0fgg9t', +# '__hsi': '7481172705613662617', +# '__dyn': '7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE3Qwb-q7oc81EEbbwto88422y11wBz83WwgEcEhwGxu782lwv89kbxS1Fwc61awkovwRwlE-U2exi4UaEW2au1jwUBwJK14xm3y11xfxmu3W3y261eBx_wHwdG7EbUG2-azqwaW223908O3216xi4UK2K2WEjxK2B08-269wkopg6C13xe3a3Gfw-KufxamEbbxG1fBG2-2K0E846fwk8eo', +# '__csr': 'g5fd4ONcuznkn5hsyqfONYhRYIB9R7jPTbnFuILa_SiT8HqZ99GAoyaOqnmGiEzGTkxQGKlfaBlaihkhbuh8HKaGAKHh5VfUOvkEyCV5KdQByUx9aSVAVWybhJCVpBK_UKjQm8rlenBFAgKAnCGHxmWBhUyXG8KiqRQqXo-VESWJ4BhEGQ6WiXylXLjDUGqFWyFEyQcgWJeumucK8BK8hEKuEKWgqDjVokjhpp9u8gkyWgiGbxmQdKmBxaq9z9p8GGADAUyUKi9DBBV9fzKAQubAyXy8S49pUgybgKezVEVedCDV898nCAgC2i4UkwCwxKVpFUrhpryogyElxW4UCi6lz88poB5x29DVo8EnK7EiK2OewkUvxebAwvFoy5E425-0Io57wRx-12xgF84m2u14w44ixm3C44aAxibgK3Sq18w9ady9k2q16wio4rx93URG6qwabwgQ2u5oWi37w4kxe0q6ay8xDU9UaybwbK8G0UUgAgaE2Gw40xO2OEggi-483rwp87S1x-7oF04dw6rhE1vU2Kh8C06XU1h83qG023e02Gi00wE80eiU2Lw3fQ1aw6_812wCw56glDU3QDw7tgy0DE7-0a8wj83hw4IwNw4oxO362C0zolw1Be17g0zykFA08Cw13q0J40uq0dXw2w30fOu0BU3Xwj9k3Gdw1HB00AUwrU0Ji2G3i5Q1_Ew0mcBo0m-bwsIw1r8aE7O18wrqZo22NfcE9A2NAy4', +# '__hsdp': '', +# '__hblp': '', +# '__comet_req': '15', +# 'fb_dtsg': token, +# 'jazoest': '25687', +# 'lsd': 'W2jWYsm50EoSzDoSO5Ue9n', +# '__spin_r': '1020855273', +# '__spin_b': 'trunk', +# '__spin_t': '1741846256', +# } +# +# requests.post( +# 'https://www.facebook.com/ajax/video/upload/requests/receive/', +# params=params, +# cookies=cookies, +# headers=start_headers, +# data=data, +# ) +# return video_id +# +# +# def _upload_comment_video(cookies, filename, file, token): +# user_id = cookies['c_user'] +# waterfall_id = _gen_waterfall_id(user_id) +# composer_session_id = _gen_waterfall_id(user_id) +# content_type = MIMETYPE.get(filename.split('.')[-1]) +# content = file.getvalue() +# file_size = str(len(content)) +# uri = f'1741828726893-{filename}-{content_type}-{file_size}-' \ +# f'498AEJ73tToOXuUki2xK88hus3f+nSxTuf4/921pFh4=' +# uri = f"{hashlib.md5(uri.encode('utf-8'))}-0-{file_size}" +# file_extension = content_type.split('/')[-1] +# headers = { +# 'accept': '*/*', +# 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', +# 'content-type': 'application/x-www-form-urlencoded', +# 'origin': 'https://www.facebook.com', +# 'priority': 'u=1, i', +# 'referer': 'https://www.facebook.com/', +# 'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"', +# 'sec-ch-ua-mobile': '?0', +# 'sec-ch-ua-platform': '"macOS"', +# 'sec-fetch-dest': 'empty', +# 'sec-fetch-mode': 'cors', +# 'sec-fetch-site': 'same-site', +# 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', +# 'x_fb_video_waterfall_id': waterfall_id, +# } +# +# params = { +# '__a': '1', +# } +# data = f'file_size={file_size}&file_extension={file_extension}&target_id={user_id}&source=comment&composer_dialog_version&waterfall_id={waterfall_id}&composer_session_id={composer_session_id}&composer_entry_point_ref=feed_story&composer_work_shared_draft_mode&has_file_been_replaced=false&supports_chunking=true&supports_file_api=true&partition_start_offset=0&partition_end_offset={file_size}&creator_product=2&spherical=false&video_publisher_action_source&__aaid=0&__user={user_id}&__a=1&__req=2s&__hs=20161.HYP%3Acomet_pkg.2.1...1&dpr=2&__ccg=EXCELLENT&__rev=1020896933&__s=a6lpwr%3Av72pg5%3Alvg2er&__hsi=7481534814351260330&__dyn=7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE5O0BU2_CxS320qa2OU7m2210wEwgo9oO0-E4a3a4oaEnxO0Bo7O2l2Utwqo31wiE567Udo5qfK0zEkxe2GewyDwkUe9obrwh8lwUwgojUlDw-wUwxwjFovUaU3qxW2-awLyESE2KwwwOg2cwMwhEkxebwHwKG4UrwFg2fwxyo566k1FwgUjwOwWzUfHDzUiBG2OUqwjVqwLwHwa211zU523C&__csr=geI2ex4D7NYfTfshvbN7i94jjWq6l9OqZ4EzVsQx2dqGAACCPZiqinWORrt9ajKnl5IGSiGZbJ4F4CoyWRhd5iZ95CAOtLy4jBhkjt29F8KiABJyqQ9yFIDjiZ7Lhi5HhCZrXDUCAum598gzEWuUR7ADHDqK-tUTymayF9ECjCBXG8h8iQmaQ4LzVECh1Omh1u4USjy8CmuiSFbhbCy8gyGVoSuWy94Wig-4EKmcG8yqBVoXGWZ2ECXAxmb-mFoLgGUvz9u8z9eqm7Hy9bCiHKU-3mUsyoKcxaGKaBLyqGm7-8xy2KcDAh8hxK4EiAx7xq8wGBxycxy2S79pZ29EPxy5FUd8y5E9EB1a3m8xe482qwzxC4o3ux11e1wKaJkWuqF898RwAwaxwaO3C8yEOum1LWghxy4o8m0z3o0wqU7C3DxO2R4xeShrBCUO740zoLCy4by8ct0Lwyxe0D8y68bWyE8o6608Dw9m3G2C0Fk0F8nwCx-0D8-7FUnG8wro10o0ey80zO0p3wdrl0Lye00JSE0fvE-0bWCw960k66p81X60it0oOKu0kN282wwv80D21FwbG0iC0iO1bwSwAw9i582sw1ta1izU0yOkFQ0ne04Z82Pg1Y80mSBt044g7W0hW1bgeES06Kk02dm0he08Cwm88o5h0TwiE0mry8Gu05JUhwCghG4C4aw5Kxq0Ao4y1MDDyVE6EAyy89A2CcdyHu&__hsdp=&__hblp=&__comet_req=15&fb_dtsg={quote(token)}&jazoest=25421&lsd=sBdlvZ7xyxJeCPFduGOZlc&__spin_r=1020896933&__spin_b=trunk&__spin_t=1741930566' +# print(data) +# response = requests.post( +# 'https://vupload-edge.facebook.com/ajax/video/upload/requests/start/', +# params=params, +# cookies=cookies, +# headers=headers, +# data=data, +# ) +# result = response.text[9:] +# video_id = json.loads(result)['payload']['video_id'] +# +# headers = { +# 'accept': '*/*', +# 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', +# 'composer_session_id': waterfall_id, +# 'end_offset': file_size, +# 'id': 'undefined', +# 'offset': '0', +# 'origin': 'https://www.facebook.com', +# 'priority': 'u=1, i', +# 'product_media_id': video_id, +# 'referer': 'https://www.facebook.com/', +# 'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"', +# 'sec-ch-ua-mobile': '?0', +# 'sec-ch-ua-platform': '"macOS"', +# 'sec-fetch-dest': 'empty', +# 'sec-fetch-mode': 'cors', +# 'sec-fetch-site': 'same-site', +# 'start_offset': '0', +# 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', +# 'x-entity-length': file_size, +# 'x-entity-name': 'undefined', +# 'x-entity-type': 'application/octet-stream', +# 'x-total-asset-size': file_size, +# 'content-type': 'application/x-www-form-urlencoded', +# } +# +# params = { +# '__aaid': '0', +# '__user': user_id, +# '__a': '1', +# '__req': '2v', +# '__hs': '20161.HYP:comet_pkg.2.1...1', +# 'dpr': '2', +# '__ccg': 'EXCELLENT', +# '__rev': '1020896933', +# '__s': 'a6lpwr:v72pg5:lvg2er', +# '__hsi': '7481534814351260330', +# '__dyn': '7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE5O0BU2_CxS320qa2OU7m2210wEwgo9oO0-E4a3a4oaEnxO0Bo7O2l2Utwqo31wiE567Udo5qfK0zEkxe2GewyDwkUe9obrwh8lwUwgojUlDw-wUwxwjFovUaU3qxW2-awLyESE2KwwwOg2cwMwhEkxebwHwKG4UrwFg2fwxyo566k1FwgUjwOwWzUfHDzUiBG2OUqwjVqwLwHwa211zU523C', +# '__csr': 'geI2ex4D7NYfTfshvbN7i94jjWq6l9OqZ4EzVsQx2dqGAACCPZiqinWORrt9ajKnl5IGSiGZbJ4F4CoyWRhd5iZ95CAOtLy4jBhkjt29F8KiABJyqQ9yFIDjiZ7Lhi5HhCZrXDUCAum598gzEWuUR7ADHDqK-tUTymayF9ECjCBXG8h8iQmaQ4LzVECh1Omh1u4USjy8CmuiSFbhbCy8gyGVoSuWy94Wig-4EKmcG8yqBVoXGWZ2ECXAxmb-mFoLgGUvz9u8z9eqm7Hy9bCiHKU-3mUsyoKcxaGKaBLyqGm7-8xy2KcDAh8hxK4EiAx7xq8wGBxycxy2S79pZ29EPxy5FUd8y5E9EB1a3m8xe482qwzxC4o3ux11e1wKaJkWuqF898RwAwaxwaO3C8yEOum1LWghxy4o8m0z3o0wqU7C3DxO2R4xeShrBCUO740zoLCy4by8ct0Lwyxe0D8y68bWyE8o6608Dw9m3G2C0Fk0F8nwCx-0D8-7FUnG8wro10o0ey80zO0p3wdrl0Lye00JSE0fvE-0bWCw960k66p81X60it0oOKu0kN282wwv80D21FwbG0iC0iO1bwSwAw9i582sw1ta1izU0yOkFQ0ne04Z82Pg1Y80mSBt044g7W0hW1bgeES06Kk02dm0he08Cwm88o5h0TwiE0mry8Gu05JUhwCghG4C4aw5Kxq0Ao4y1MDDyVE6EAyy89A2CcdyHu', +# '__hsdp': '', +# '__hblp': '', +# '__comet_req': '15', +# 'fb_dtsg': token, +# 'jazoest': '25421', +# 'lsd': 'sBdlvZ7xyxJeCPFduGOZlc', +# '__spin_r': '1020896933', +# '__spin_b': 'trunk', +# '__spin_t': '1741930566', +# } +# response = requests.post( +# f'https://rupload-sin6-3.up.facebook.com/fb_video/{uri}', +# params=params, +# cookies=cookies, +# headers=headers, +# data=content, +# ) +# video_file_chunk = response.json()['h'] +# +# boundary = _get_boundary() +# headers = { +# 'accept': '*/*', +# 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', +# 'content-type': f'multipart/form-data; boundary=----WebKitFormBoundary{boundary}', +# 'origin': 'https://www.facebook.com', +# 'priority': 'u=1, i', +# 'referer': 'https://www.facebook.com/', +# 'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"', +# 'sec-ch-ua-mobile': '?0', +# 'sec-ch-ua-platform': '"macOS"', +# 'sec-fetch-dest': 'empty', +# 'sec-fetch-mode': 'cors', +# 'sec-fetch-site': 'same-site', +# 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', +# 'x_fb_video_waterfall_id': waterfall_id, +# } +# params = { +# "composer_session_id": composer_session_id, +# "video_id": video_id, +# "start_offset": "0", +# "end_offset": file_size, +# "source": "comment", +# "target_id": user_id, +# "waterfall_id": waterfall_id, +# "composer_entry_point_ref": "feed_story", +# "has_file_been_replaced": "false", +# "supports_chunking": "true", +# "partition_start_offset": "0", +# "partition_end_offset": file_size, +# "__aaid": "0", +# "__user": user_id, +# "__a": "1", +# "__req": "2w", +# "__hs": "20161.HYP:comet_pkg.2.1...1", +# "dpr": "2", +# "__ccg": "EXCELLENT", +# "__rev": "1020896933", +# "__s": "a6lpwr:v72pg5:lvg2er", +# "__hsi": "7481534814351260330", +# "__dyn": "7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE5O0BU2_CxS320qa2OU7m2210wEwgo9oO0-E4a3a4oaEnxO0Bo7O2l2Utwqo31wiE567Udo5qfK0zEkxe2GewyDwkUe9obrwh8lwUwgojUlDw-wUwxwjFovUaU3qxW2-awLyESE2KwwwOg2cwMwhEkxebwHwKG4UrwFg2fwxyo566k1FwgUjwOwWzUfHDzUiBG2OUqwjVqwLwHwa211zU523C", +# "__csr": "geI2ex4D7NYfTfshvbN7i94jjWq6l9OqZ4EzVsQx2dqGAACCPZiqinWORrt9ajKnl5IGSiGZbJ4F4CoyWRhd5iZ95CAOtLy4jBhkjt29F8KiABJyqQ9yFIDjiZ7Lhi5HhCZrXDUCAum598gzEWuUR7ADHDqK-tUTymayF9ECjCBXG8h8iQmaQ4LzVECh1Omh1u4USjy8CmuiSFbhbCy8gyGVoSuWy94Wig-4EKmcG8yqBVoXGWZ2ECXAxmb-mFoLgGUvz9u8z9eqm7Hy9bCiHKU-3mUsyoKcxaGKaBLyqGm7-8xy2KcDAh8hxK4EiAx7xq8wGBxycxy2S79pZ29EPxy5FUd8y5E9EB1a3m8xe482qwzxC4o3ux11e1wKaJkWuqF898RwAwaxwaO3C8yEOum1LWghxy4o8m0z3o0wqU7C3DxO2R4xeShrBCUO740zoLCy4by8ct0Lwyxe0D8y68bWyE8o6608Dw9m3G2C0Fk0F8nwCx-0D8-7FUnG8wro10o0ey80zO0p3wdrl0Lye00JSE0fvE-0bWCw960k66p81X60it0oOKu0kN282wwv80D21FwbG0iC0iO1bwSwAw9i582sw1ta1izU0yOkFQ0ne04Z82Pg1Y80mSBt044g7W0hW1bgeES06Kk02dm0he08Cwm88o5h0TwiE0mry8Gu05JUhwCghG4C4aw5Kxq0Ao4y1MDDyVE6EAyy89A2CcdyHu", +# "__comet_req": "15", +# "fb_dtsg": token, +# "jazoest": "25421", +# "lsd": "sBdlvZ7xyxJeCPFduGOZlc", +# "__spin_r": "1020896933", +# "__spin_b": "trunk", +# "__spin_t": "1741930566" +# } +# form_data = b'------WebKitFormBoundary%s\r\nContent-Disposition: form-data; ' \ +# b'name="fbuploader_video_file_chunk"\r\n\r\n%s\r\n' % ( +# boundary.encode('utf-8'), video_file_chunk.encode('utf-8') +# ) +# requests.post( +# 'https://vupload-edge.facebook.com/ajax/video/upload/requests/receive/', +# cookies=cookies, +# headers=headers, +# params=params, +# data=form_data, +# ) +# return video_id +# +# +# def post(cookies, message, image_key=None): +# user_id = cookies['c_user'] +# dtsg_token = get_dtsg_token(cookies) +# headers = { +# 'accept': '*/*', +# 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', +# 'content-type': 'application/x-www-form-urlencoded', +# 'origin': 'https://www.facebook.com', +# 'priority': 'u=1, i', +# 'referer': f'https://www.facebook.com/', +# 'sec-ch-prefers-color-scheme': 'light', +# 'sec-ch-ua': '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"', +# 'sec-ch-ua-full-version-list': '"Not(A:Brand";v="99.0.0.0", "Google Chrome";v="133.0.6943.127", "Chromium";v="133.0.6943.127"', +# 'sec-ch-ua-mobile': '?0', +# 'sec-ch-ua-model': '""', +# 'sec-ch-ua-platform': '"macOS"', +# 'sec-ch-ua-platform-version': '"15.3.2"', +# 'sec-fetch-dest': 'empty', +# 'sec-fetch-mode': 'cors', +# 'sec-fetch-site': 'same-origin', +# 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36', +# 'x-asbd-id': '359341', +# 'x-fb-friendly-name': 'ComposerStoryCreateMutation', +# 'x-fb-lsd': 'aQBZ0Gh5mfQSPgCywj081r', +# } +# uuid4_token = str(uuid.uuid4()) +# +# # 处理图片或视频上传 +# attachments = [] +# if image_key: +# # bio = client.download_bytes_file(BUCKET, image_key) +# with open('../files/xmbl.mp4', 'rb') as f: +# bio = io.BytesIO(f.read()) +# filename = image_key.split('/')[-1] +# content_type = MIMETYPE.get(filename.split('.')[-1]) +# if not content_type: +# raise OperationFailed('文件类型暂不支持') +# if content_type in PIC_TYPE: +# # 上传图片 +# photo_id = _upload_photo(cookies, filename, bio, dtsg_token) +# attachments = [{'photo': {'id': photo_id}}] +# else: +# # 上传视频 +# video_id = _upload_video(cookies, filename, bio, dtsg_token) +# attachments = [{'video': {'id': video_id, 'notify_when_processed': True}}] +# +# data = { +# 'av': user_id, +# '__aaid': '0', +# '__user': user_id, +# '__a': '1', +# '__req': '42', +# '__hs': '20159.HYP:comet_pkg.2.1...1', +# 'dpr': '2', +# '__ccg': 'EXCELLENT', +# '__rev': '1020809040', +# '__s': 'itr9j4:q8hbxy:4gveux', +# '__hsi': '7480795543745950771', +# '__dyn': '7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE5O0BU2_CxS320qa2OU7m221Fwgo9oO0-E4a3a4oaEnxO0Bo7O2l2Utwqo31wiE567Udo5qfK0zEkxe2GewyDwkUe9obrwh8lwUwgojUlDw-wSU8o4Wm7-2K1ywtUuwLyEbUGdG0HE88cA0z8c84q58jyUaUbGxe6Uak0zU8oC1hxB0qo4e4UcEeE-3WVU-4FqwIK6E4-mEbUaU2wwgo623C', +# '__csr': 'g4r1p3O7ZNk4kn4gxn2lkIIp7iLlsZSQyO8yaXOEy9H8qAOsqXkGi8yGmzSXldtnhqh2nO4FkIFttVVQKmLnhZ9Jq8GJ6iybBt6QiF95iunUBF4gCqhSGrhWSuDCildrLCpVBC-VlDy-jK8n_DmlCBhJQUym-i6pahFVkVV9aCyGpKnXmfDiBBBgRaqXCAh8hnAypS4UKGKQvQWBzqAx3HVSjKip2qUi-mEgDAVkVaxai4WCCF5ypKqdKi9ypHCAGrBV_jAAxuHLV98hxCnAWV6GADy8Ci8hkFXiJ7K6omzrLh8x1a2qUjiJ38Na8znwzzXU-UkzXGdyrx50Ixei58OQ9ybxau2i4qDyku4U8ax516eLy8KcwAxi9xiufxiU8Q7EK2i14G5ocS2yHDwDwMwmEcE2LwLz9o15EN122i2GAp6hQGwIHyUZw867k18EE6Wao2_woo2lwEx61lye0x86Wi2u3ZCy9Q1tQ0F8lny8iye1kwOGcECUlwcu0Ko5m9J1by5GlU62ewYwXw9m0G846i0zEeUcVu2twuuE0n_w0wdw2cU1QEd8721iocE0OG2Dm5E081Enw08xG03HK1fw8a0nq0oeu1dw72a16wyw55wBo3jg1X48wa21-w2w85e0PoKu0hy0iy18wgEfE7uhxa5o8y3U9EK04SK9w4zDg0zygEyaw7Xw3mE3Vwbx07yw3IU1N306Ew9G0WVFmm1eBg0n9wcp0fafw17i0s60s60ju0rypo4O15w8e2a5o987S05wpQaw1eK0EkK464WzQ2C09tDxGE3qOuiA5f472dKLm', +# '__hsdp': '', +# '__hblp': '', +# '__comet_req': '15', +# 'fb_dtsg': dtsg_token, +# 'jazoest': '25494', +# 'lsd': 'WgZt97AQ_LCDMTfuw-sO6Y', +# '__spin_r': '1020809040', +# '__spin_b': 'trunk', +# '__spin_t': '1741758441', +# 'fb_api_caller_class': 'RelayModern', +# 'fb_api_req_friendly_name': 'ComposerStoryCreateMutation', +# 'variables': '{"input":{"composer_entry_point":"inline_composer","composer_source_surface":"timeline","idempotence_token":"%s_FEED","source":"WWW","attachments":%s,"audience":{"privacy":{"allow":[],"base_state":"EVERYONE","deny":[],"tag_expansion_state":"UNSPECIFIED"}},"message":{"ranges":[],"text":"%s"},"with_tags_ids":null,"inline_activities":[],"text_format_preset_id":"0","publishing_flow":{"supported_flows":["ASYNC_SILENT","ASYNC_NOTIF","FALLBACK"]},"logging":{"composer_session_id":"%s"},"navigation_data":{"attribution_id_v2":"ProfileCometTimelineListViewRoot.react,comet.profile.timeline.list,tap_bookmark,1741758458056,864702,61573941575877,,"},"tracking":[null],"event_share_metadata":{"surface":"timeline"},"actor_id":"%s","client_mutation_id":"9"},"feedLocation":"TIMELINE","feedbackSource":0,"focusCommentID":null,"gridMediaWidth":230,"groupID":null,"scale":2,"privacySelectorRenderLocation":"COMET_STREAM","checkPhotosToReelsUpsellEligibility":true,"renderLocation":"timeline","useDefaultActor":false,"inviteShortLinkKey":null,"isFeed":false,"isFundraiser":false,"isFunFactPost":false,"isGroup":false,"isEvent":false,"isTimeline":true,"isSocialLearning":false,"isPageNewsFeed":false,"isProfileReviews":false,"isWorkSharedDraft":false,"hashtag":null,"canUserManageOffers":false,"__relay_internal__pv__CometUFIShareActionMigrationrelayprovider":true,"__relay_internal__pv__GHLShouldChangeSponsoredDataFieldNamerelayprovider":false,"__relay_internal__pv__GHLShouldChangeAdIdFieldNamerelayprovider":false,"__relay_internal__pv__IsWorkUserrelayprovider":false,"__relay_internal__pv__CometUFIReactionsEnableShortNamerelayprovider":false,"__relay_internal__pv__CometFeedStoryDynamicResolutionPhotoAttachmentRenderer_experimentWidthrelayprovider":500,"__relay_internal__pv__CometImmersivePhotoCanUserDisable3DMotionrelayprovider":false,"__relay_internal__pv__WorkCometIsEmployeeGKProviderrelayprovider":false,"__relay_internal__pv__IsMergQAPollsrelayprovider":false,"__relay_internal__pv__FBReels_deprecate_short_form_video_context_gkrelayprovider":false,"__relay_internal__pv__FBReelsMediaFooter_comet_enable_reels_ads_gkrelayprovider":false,"__relay_internal__pv__StoriesArmadilloReplyEnabledrelayprovider":false,"__relay_internal__pv__FBReelsIFUTileContent_reelsIFUPlayOnHoverrelayprovider":false,"__relay_internal__pv__EventCometCardImage_prefetchEventImagerelayprovider":false,"__relay_internal__pv__GHLShouldChangeSponsoredAuctionDistanceFieldNamerelayprovider":false}' % ( +# uuid4_token, json.dumps(attachments), message, uuid4_token, user_id +# ), +# 'server_timestamps': 'true', +# 'doc_id': '9835564903120639', +# } +# response = requests.post('https://www.facebook.com/api/graphql/', cookies=cookies, headers=headers, data=data) +# if response.status_code != 200: +# raise OperationFailed(f'发帖异常 response: {response.text}') +# +# if response.json() and response.json().get('data'): +# if not response.json()['data']['story_create'].get('timeline_feed_units_edge'): +# return +# post_id = response.json()['data']['story_create']['timeline_feed_units_edge']['node']['feedback']['id'] +# return {'reso_id': post_id} +# else: +# raise OperationFailed(f'参数错误, response: {response.text}') +# +# +# def like(cookies, post_id): +# user_id = cookies['c_user'] +# dtsg_token = get_dtsg_token(cookies) +# headers = { +# 'accept': '*/*', +# 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', +# 'content-type': 'application/x-www-form-urlencoded', +# 'origin': 'https://www.facebook.com', +# 'priority': 'u=1, i', +# 'referer': 'https://www.facebook.com/', +# 'sec-ch-prefers-color-scheme': 'light', +# 'sec-ch-ua': '"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"', +# 'sec-ch-ua-full-version-list': '"Not(A:Brand";v="99.0.0.0", "Google Chrome";v="133.0.6943.127", "Chromium";v="133.0.6943.127"', +# 'sec-ch-ua-mobile': '?0', +# 'sec-ch-ua-model': '""', +# 'sec-ch-ua-platform': '"macOS"', +# 'sec-ch-ua-platform-version': '"15.3.1"', +# 'sec-fetch-dest': 'empty', +# 'sec-fetch-mode': 'cors', +# 'sec-fetch-site': 'same-origin', +# 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36', +# 'x-asbd-id': '359341', +# 'x-fb-friendly-name': 'CometUFIFeedbackReactMutation', +# 'x-fb-lsd': 'pSe8b3OaUeIWyqreatk6Bt', +# } +# +# data = { +# 'av': user_id, +# '__aaid': '0', +# '__user': user_id, +# '__a': '1', +# '__req': '73', +# '__hs': '20159.HYP:comet_pkg.2.1...1', +# 'dpr': '2', +# '__ccg': 'EXCELLENT', +# '__rev': '1020805083', +# '__s': 'rkcs6h:q8hbxy:ud5a0g', +# '__hsi': '7480739570773453695', +# '__dyn': '7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE3Qwb-q7oc81EEbbwto886C11wBz83WwgEcEhwGxu782lwv89kbxS1Fwc61awkovwRwlE-U2exi4UaEW2au1jwUBwJK14xm3y11xfxmu3W3iU8o4Wm7-2K1ywtUuwLyEbUGdG0HE88cA0z8c84q58jyUaUbGxe6Uak0zU8oC1hxB0qo4e4UcEeE-3WVU-4FqwIK6E4-mEbUaU2wwgomwioeo', +# '__csr': 'g4v2Qp2I8MB2sBiMP6hWT94Pi8BOh4JEAjOIAYkOkCOl8TFfXAlOEhi4QySYQQJ99Qyjh3uRIBtEDDqkREOQBWFa-leLCnfKGHflRKZpkAJQAnllFkQhrEDZ5h2pV7AFd6BA9LBFTG-nyJKAeh8yCgPKC8iBLAHKKmAayUGCQKjSF4ibCz6qhkX-V6pWBWCWLSHHmmJi2qKKQbXyp8-FqKclAgzylmiimHCdyQFQhCXWGq8jQpABnWGGGcDxbBJ6VpXFx69gygxAqmt2eiKjK-jQppoWu9JapzZknWiFf-h4y9VXBBDp5LKp3rFXimaBKihGijBLyAqAfBCxVUCuXx6EVScAx22Oezebx2UyWV9bCGrx279EqyGG5bF3e2uuFFEPDAK4UB3oHxp5UOvDAUG4ElymESeCCxLzVFAawNolgpw8i4o1hEd87u48swt81mS2C3pa1FAwcG2GeBl11240xo-2e11wzwXm598jx61xwTo9qwygBQ0Ho8EO5E36yt2Ah5UrBwJBAhe6VXjXwsy0aS7UZ1GeJ5Owxxa6U4x0OF2A4o4O8Ujg4G2K291i9Z08a4EnOel1-19wGCK7FEKK4VpU7W9y8RwDwCw0Bbw3s81DU0qfw3388Elwk_m1mo0Gm3W069UeU10ooAo7yU4K7802Nkw4YxS1fp86e0ZEaocE5iawDwuo2kwo8jwXwoo27wdu1aw9a0E8Dh411w3k8gwh8CA9w3pE7a08Swho9E1x83ww51waegB019W0G9U1hFE4e1byE6W0N87a08c4kq0F8hg3-Dw_Dw5rwroqw6wxXg6G11wgU3LmifwIwSgK0pu1jCw6yxkE1PXhE0AR0da48iw9i10wVw1wTw2FUGl0HxkwgBto3Qw80LOAwDWqQi5eAPJ4BBo2Qwax6Qu0FU4O540GUeUK2u0mK0jUw0tzwKx20EU1BO0', +# '__hsdp': '', +# '__hblp': '', +# '__comet_req': '15', +# 'fb_dtsg': dtsg_token, +# 'jazoest': '25686', +# 'lsd': 'pSe8b3OaUeIWyqreatk6Bt', +# '__spin_r': '1020805083', +# '__spin_b': 'trunk', +# '__spin_t': '1741745409', +# 'fb_api_caller_class': 'RelayModern', +# 'fb_api_req_friendly_name': 'CometUFIFeedbackReactMutation', +# 'variables': '{"input":{"attribution_id_v2":"ProfileCometTimelineListViewRoot.react,comet.profile.timeline.list,via_cold_start,1741762579222,259553,190055527696468,,","feedback_id":"%s","feedback_reaction_id":"1635855486666999","feedback_source":"NEWS_FEED","feedback_referrer":"/","is_tracking_encrypted":true,"tracking":["AZU7Uu1mm-QEQWdf13bCqxa9BLW6XkzoVE0sGm0QPL4CVtIl4WisVkoklN9Br-D0Au3gMFW4r6MvQ0nT00cAJa6iF6KyFW3HCZaxjanGT-stTURNU_RPjcB29mJ-hLkoviYK03qDPP41KJKtNwLxhWyj6z_wd3i__pyfdS8FecVlOj8qHhr2s6LJq32sUIqQ8omYEHGRnDN99kb9BW8HS_x4C8ZY8-fDY5abf-cXMixnohPQBtAqhQhwB2DxkFwqYxPHy6psbCYTCVyjbhPsFyvEfSO7bVN4_foTsx9dzcyhY820L0NB847Fzu77vWNC0wHffoD_SCOnJQTU8m-TcjVTbZu0vwoam47IPOi0DK3xSSxG_8bDXdbv86prssWEsvi7vkbERsPACyi9JcuGCiO0cIpOnJSsJkbuOU_BqYq7SrR9h254Px8T85lj5F_OmWCvOuKYJ8IAUS6cyc56dw-cGPBkQ2R5ewEDCl5uwfB0rg"],"session_id":"121da0a0-58ab-4ab0-93dd-6a7e3c42625e","actor_id":"%s","client_mutation_id":"1"},"useDefaultActor":false,"__relay_internal__pv__CometUFIReactionsEnableShortNamerelayprovider":false}' % ( +# post_id, user_id +# ), +# 'server_timestamps': 'true', +# 'doc_id': '9232085126871383', +# } +# +# response = requests.post('https://www.facebook.com/api/graphql/', cookies=cookies, headers=headers, data=data) +# if response.status_code != 200: +# raise OperationFailed(f'点赞异常 response: {response.text}') +# +# +# def comment(cookies, post_id, message, image_key=None): +# user_id = cookies['c_user'] +# uuid4_token = str(uuid.uuid4()) +# dtsg_token = get_dtsg_token(cookies) +# headers = { +# 'accept': '*/*', +# 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', +# 'content-type': 'application/x-www-form-urlencoded', +# 'origin': 'https://www.facebook.com', +# 'priority': 'u=1, i', +# 'referer': 'https://www.facebook.com/', +# 'sec-ch-prefers-color-scheme': 'light', +# 'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"', +# 'sec-ch-ua-full-version-list': '"Chromium";v="134.0.6998.89", "Not:A-Brand";v="24.0.0.0", "Google Chrome";v="134.0.6998.89"', +# 'sec-ch-ua-mobile': '?0', +# 'sec-ch-ua-model': '""', +# 'sec-ch-ua-platform': '"macOS"', +# 'sec-ch-ua-platform-version': '"15.3.2"', +# 'sec-fetch-dest': 'empty', +# 'sec-fetch-mode': 'cors', +# 'sec-fetch-site': 'same-origin', +# 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36', +# 'x-asbd-id': '359341', +# 'x-fb-friendly-name': 'useCometUFICreateCommentMutation', +# 'x-fb-lsd': 'sBdlvZ7xyxJeCPFduGOZlc', +# } +# +# # 处理图片或视频上传 +# attachments = 'null' +# if image_key: +# # bio = client.download_bytes_file(BUCKET, image_key) +# with open('../xzpq.mp4', 'rb') as f: +# bio = io.BytesIO(f.read()) +# filename = image_key.split('/')[-1] +# content_type = MIMETYPE.get(filename.split('.')[-1]) +# if not content_type: +# raise OperationFailed('文件类型暂不支持') +# if content_type in PIC_TYPE: +# # 上传图片 +# photo_id = _upload_photo(cookies, filename, bio, dtsg_token) +# attachments = json.dumps([{'media': {'id': photo_id}}]) +# else: +# # 上传视频 +# video_id = _upload_comment_video(cookies, filename, bio, dtsg_token) +# attachments = json.dumps([{'media': {'id': video_id}}]) +# data = { +# 'av': user_id, +# '__aaid': '0', +# '__user': user_id, +# '__a': '1', +# '__req': '2z', +# '__hs': '20161.HYP:comet_pkg.2.1...1', +# 'dpr': '2', +# '__ccg': 'EXCELLENT', +# '__rev': '1020896933', +# '__s': 'a6lpwr:v72pg5:lvg2er', +# '__hsi': '7481534814351260330', +# '__dyn': '7xeXzWK1ixt0mUyEqxemh0noeEb8nwgUao4u5QdwSwAyUco5S3O2Saw8i2S1DwUx60GE5O0BU2_CxS320qa2OU7m2210wEwgo9oO0-E4a3a4oaEnxO0Bo7O2l2Utwqo31wiE567Udo5qfK0zEkxe2GewyDwkUe9obrwh8lwUwgojUlDw-wUwxwjFovUaU3qxW2-awLyESE2KwwwOg2cwMwhEkxebwHwKG4UrwFg2fwxyo566k1FwgUjwOwWzUfHDzUiBG2OUqwjVqwLwHwa211zU523C', +# '__csr': 'geI2ex4D7NYfTfshvbN7i94jjWq6l9OqZ4EzVsQx2dqGAACCPZiqinWORrt9ajKnl5IGSiGZbJ4F4CoyWRhd5iZ95CAOtLy4jBhkjt29F8KiABJyqQ9yFIDjiZ7Lhi5HhCZrXDUCAum598gzEWuUR7ADHDqK-tUTymayF9ECjCBXG8h8iQmaQ4LzVECh1Omh1u4USjy8CmuiSFbhbCy8gyGVoSuWy94Wig-4EKmcG8yqBVoXGWZ2ECXAxmb-mFoLgGUvz9u8z9eqm7Hy9bCiHKU-3mUsyoKcxaGKaBLyqGm7-8xy2KcDAh8hxK4EiAx7xq8wGBxycxy2S79pZ29EPxy5FUd8y5E9EB1a3m8xe482qwzxC4o3ux11e1wKaJkWuqF898RwAwaxwaO3C8yEOum1LWghxy4o8m0z3o0wqU7C3DxO2R4xeShrBCUO740zoLCy4by8ct0Lwyxe0D8y68bWyE8o6608Dw9m3G2C0Fk0F8nwCx-0D8-7FUnG8wro10o0ey80zO0p3wdrl0Lye00JSE0fvE-0bWCw960k66p81X60it0oOKu0kN282wwv80D21FwbG0iC0iO1bwSwAw9i582sw1ta1izU0yOkFQ0ne04Z82Pg1Y80mSBt044g7W0hW1bgeES06Kk02dm0he08Cwm88o5h0TwiE0mry8Gu05JUhwCghG4C4aw5Kxq0Ao4y1MDDyVE6EAyy89A2CcdyHu', +# '__hsdp': '', +# '__hblp': '', +# '__comet_req': '15', +# 'fb_dtsg': dtsg_token, +# 'jazoest': '25421', +# 'lsd': 'sBdlvZ7xyxJeCPFduGOZlc', +# '__spin_r': '1020896933', +# '__spin_b': 'trunk', +# '__spin_t': '1741930566', +# 'fb_api_caller_class': 'RelayModern', +# 'fb_api_req_friendly_name': 'useCometUFICreateCommentMutation', +# 'variables': '{"feedLocation":"DEDICATED_COMMENTING_SURFACE","feedbackSource":110,"groupID":null,"input":{"client_mutation_id":"9","actor_id":"%s","attachments":%s,"feedback_id":"%s","formatting_style":null,"message":{"ranges":[],"text":"%s"},"reply_target_clicked":false,"attribution_id_v2":"ProfileCometTimelineListViewRoot.react,comet.profile.timeline.list,via_cold_start,1741930566987,158144,190055527696468,,","vod_video_timestamp":null,"is_tracking_encrypted":true,"tracking":["AZUnHF90UjvMroqev0xy6W_qNXEYnMdkDf2rOE-nm5QixlfrYaVfAvJUqno_2QpxLLNNH4DHVW3nOxZV7bQ8g-mFD5gsNi8pyl3TCLHIoaVbwibiTs-HdYDZiIkx1x3XW0xFcl8qgJvOjvbxKJfELSMgvIzV41LuBiCsetCc90f-Ix5k-9BspWI2AMnOMvYsWfxZ59yHxUtvL_D9lAdfopanDANfA5LeeDThbw5uaixa8GwokZpZGlwj0prU9qeQ9JWrOy6praN_WrvO2bZhFu3rhSBG_oKZ_bYZITmkN6uKs4eN4EVFhPfeVzGafPB5LoKIsY0Qs5zYTQdn8-KLvdYLHHhzcSxArKjActiRETyNQ8ZdZGThr0yyLy1weKmbRSKSoHSXC9eMJYF6ApK_zA2KFapQv_w2j9bIdnML9A9SbHYajroIofnXJ5eAHWv83TVbotU0gw-kl5zRzV25Am0tZ8-p7K8Two2ai0HxkF0MMTi60mI96lTmzLviyj8om76TLDB7-u-X5MLukgzHfqmTSnhd5KyVIrx77kLaXr4E-5mDMjPvAF5jcunXAJBjDl5rRmFze0rO1PgWwFEAvCvnjC8ftDH4VdRbW0wUMmQAMA","{\\"assistant_caller\\":\\"comet_above_composer\\",\\"conversation_guide_session_id\\":\\"d75579ed-48e4-4aac-8975-84cf698151f4\\",\\"conversation_guide_shown\\":null}"],"feedback_source":"DEDICATED_COMMENTING_SURFACE","idempotence_token":"client:%s","session_id":"cce85c8c-eb4e-4304-9e86-ac7d27d7f642"},"inviteShortLinkKey":null,"renderLocation":null,"scale":2,"useDefaultActor":false,"focusCommentID":null,"__relay_internal__pv__IsWorkUserrelayprovider":false}' % ( +# user_id, attachments, post_id, message, uuid4_token +# ), +# 'server_timestamps': 'true', +# 'doc_id': '9389802714420896', +# } +# response = requests.post('https://www.facebook.com/api/graphql/', cookies=cookies, headers=headers, data=data) +# if response.status_code != 200: +# raise OperationFailed(f'评论异常 response: {response.text}') +# +# if response.json() and response.json().get('data'): +# return {'resp_id': response.json()['data']['comment_create']['feedback_comment_edge']['node']['id']} +# else: +# raise OperationFailed(f'参数错误, response: {response.text}') def sleep(a, b): @@ -757,6 +754,45 @@ def _edit_privacy(page): sleep(1, 2) +def parse_cookies(cookies): + if isinstance(cookies, str): + try: + cookies = json.loads(cookies) + if isinstance(cookies, list): + return cookies + except ValueError: + c = [] + for i in cookies.split(';'): + kv = i.split('=') + if kv: + k, v = kv[0], kv[1] + c.append({'name': k, 'value': v, 'domain': '.facebook.com', 'path': '/'}) + return c + if isinstance(cookies, dict): + return [ + {'name': k, 'value': v, 'domain': '.facebook.com', 'path': '/'} for k, v in cookies.items() + ] + else: + return cookies + + +def check_account_status(page): + page.set_default_timeout(3000) + try: + lock_img = page.query_selector_all('//img[@src="/images/checkpoint/epsilon/comet/intro.png"]') + if lock_img: + raise AuthException('该账户已被封禁') + except TimeoutError: + pass + + try: + login_btn = page.query_selector_all('//button[@name="login"]') + if login_btn: + raise AuthException('该账户登录状态失效') + except TimeoutError: + pass + + class RLock(threading._RLock): pass @@ -775,40 +811,42 @@ def playwright_like(cookies, post_id): ) context = browser.new_context(no_viewport=True) context.add_init_script(path=os.path.join(BASE_PATH, 'stealth.min.js')) - context.add_cookies([ - {'name': k, 'value': v, 'domain': '.facebook.com', 'path': '/'} for k, v in cookies.items() - ]) + context.add_cookies(parse_cookies(cookies)) page = context.new_page() url = 'https://facebook.com' - page.goto(url) - _change_language(page) + try: + page.goto(url) + _change_language(page) - if 'permalink.php?story_fbid' in post_id or '/posts/' in post_id: - # 文字或图片类型 - button_xpath = '//div[@class="__fb-light-mode x1n2onr6 x1vjfegm"]//span[@data-ad-rendering-role="like_button"]' - elif 'watch/?v' in post_id: - # 视频类型 - button_xpath = '//span[@data-ad-rendering-role="like_button"][1]' - elif '/reel/' in post_id: - # 短视频类型 - button_xpath = '//div[@class="__fb-dark-mode x1afcbsf x1uhb9sk x1swf91x"]//div[@aria-label="Like"]//div[@aria-label="Like"]' - else: - raise OperationFailed(f'不支持的帖子类型POST: {post_id}') + if 'permalink.php?story_fbid' in post_id or '/posts/' in post_id: + # 文字或图片类型 + button_xpath = '//div[@class="__fb-light-mode x1n2onr6 x1vjfegm"]//span[@data-ad-rendering-role="like_button"]' + elif 'watch/?v' in post_id: + # 视频类型 + button_xpath = '//span[@data-ad-rendering-role="like_button"][1]' + elif '/reel/' in post_id: + # 短视频类型 + button_xpath = '//div[@class="__fb-dark-mode x1afcbsf x1uhb9sk x1swf91x"]//div[@aria-label="Like"]//div[@aria-label="Like"]' + else: + raise OperationFailed(f'不支持的帖子类型POST: {post_id}') - page.goto(post_id) - sleep(1, 2) - page.click(button_xpath) - time.sleep(10) + page.goto(post_id) + sleep(1, 2) + page.click(button_xpath) + time.sleep(10) + except Error as e: + check_account_status(page) + raise OperationFailed(f'操作超时,请重试{e}') content = _full_screenshot() context.close() browser.close() key = f'{uuid.uuid4()}.png' put_object(key, content) - return {'image_key': key} + return {'screenshot_key': key} -def playwright_post(cookies, message, image_key=None): +def playwright_post(cookies, content, image_key=None): path = os.path.join(BASE_PATH, 'chrome', '130-0008', 'chrome.exe') with lock: with sync_playwright() as playwright: @@ -819,40 +857,43 @@ def playwright_post(cookies, message, image_key=None): ) context = browser.new_context(no_viewport=True) context.add_init_script(path=os.path.join(BASE_PATH, 'stealth.min.js')) - context.add_cookies([ - {'name': k, 'value': v, 'domain': '.facebook.com', 'path': '/'} for k, v in cookies.items() - ]) + context.add_cookies(parse_cookies(cookies)) page = context.new_page() url = 'https://facebook.com' - page.goto(url) - _change_language(page) - time.sleep(5) - - if image_key: - filename = image_key.split('/')[-1] - file_path = os.path.join(BASE_PATH, 'files', filename) - client.fget_object(BUCKET, image_key, file_path) - page.click('//span[text()="Photo/video"]') - sleep(1, 2) - with page.expect_file_chooser() as fc_info: - page.click('//span[text()="Add photos/videos"]') - file_chooser = fc_info.value - file_chooser.set_files(file_path) + try: + page.goto(url) + _change_language(page) time.sleep(5) - if not image_key: - page.click('''//span[contains(text(), "What's on your mind")]''') - _edit_privacy(page) - page.type('''//div[contains(@aria-label, "What's on your mind")]''', message) + if image_key: + filename = image_key.split('/')[-1] + file_path = os.path.join(BASE_PATH, 'files', filename) + client.fget_object(BUCKET, image_key, file_path) + page.click('//span[text()="Photo/video"]') + sleep(1, 2) + with page.expect_file_chooser() as fc_info: + page.click('//span[text()="Add photos/videos"]') + file_chooser = fc_info.value + file_chooser.set_files(file_path) + time.sleep(5) - page.click('//div[@aria-label="Post"]') - time.sleep(15) + if not image_key: + page.click('''//span[contains(text(), "What's on your mind")]''') + _edit_privacy(page) + page.type('''//div[contains(@aria-label, "What's on your mind")]''', content) + + page.click('//div[@aria-label="Post"]') + time.sleep(15) + + post_url = page.locator('//div[@data-pagelet="FeedUnit_0"]//a[@role="link"]').nth(2).get_attribute('href') + if '&__cft__' in post_url: + post_url = post_url.split('&__cft__')[0] + page.goto(post_url) + time.sleep(5) + except Error as e: + check_account_status(page) + raise OperationFailed(f'操作超时,请重试{e}') - post_url = page.locator('//div[@data-pagelet="FeedUnit_0"]//a[@role="link"]').nth(2).get_attribute('href') - if '&__cft__' in post_url: - post_url = post_url.split('&__cft__')[0] - page.goto(post_url) - time.sleep(5) content = _full_screenshot() if image_key: os.remove(file_path) @@ -861,7 +902,7 @@ def playwright_post(cookies, message, image_key=None): key = f'{uuid.uuid4()}.png' put_object(key, content) - return {'resp_id': post_url, 'image_key': key} + return {'response_url': post_url, 'screenshot_key': key} def playwright_comment(cookies, post_id, message, image_key=None): @@ -875,54 +916,57 @@ def playwright_comment(cookies, post_id, message, image_key=None): ) context = browser.new_context(no_viewport=True) context.add_init_script(path=os.path.join(BASE_PATH, 'stealth.min.js')) - context.add_cookies([ - {'name': k, 'value': v, 'domain': '.facebook.com', 'path': '/'} for k, v in cookies.items() - ]) + context.add_cookies(parse_cookies(cookies)) page = context.new_page() url = 'https://facebook.com' - page.goto(url) - _change_language(page) - time.sleep(5) - - page.goto(post_id) - sleep(1, 2) - - if 'permalink.php?story_fbid' in post_id or '/posts/' in post_id: - # 文字或图片类型 - input_xpath = '//div[@aria-label="Write a comment…"]' - attach_xpath = '//div[@id="focused-state-actions-list"]//div[@aria-label="Attach a photo or video"]' - comment_xpath = '//div[@aria-label="Comment"]' - page.click(input_xpath) - sleep(1, 2) - elif 'watch/?v' in post_id: - # 视频类型 - input_xpath = '//div[@aria-label="Write a comment…"]' - attach_xpath = '//div[@aria-label="Attach a photo or video"]' - comment_xpath = '//div[@aria-label="Comment"]' - elif '/reel/' in post_id: - # 短视频类型 - input_xpath = '//div[@aria-label="Write a comment…"]' - attach_xpath = '//div[@aria-label="Attach a photo or video"]' - comment_xpath = '//div[@role="complementary"]//div[@aria-label="Comment"]' - page.click('//div[@aria-label="Comment"][1]') - sleep(1, 2) - else: - raise OperationFailed(f'不支持的帖子类型POST: {post_id}') - - if image_key: - filename = image_key.split('/')[-1] - file_path = os.path.join(BASE_PATH, 'files', filename) - client.fget_object(BUCKET, image_key, file_path) - sleep(1, 2) - with page.expect_file_chooser() as fc_info: - page.click(attach_xpath) - file_chooser = fc_info.value - file_chooser.set_files(file_path) + try: + page.goto(url) + _change_language(page) time.sleep(5) - page.type(input_xpath, message) - page.click(comment_xpath) - time.sleep(5) + page.goto(post_id) + sleep(1, 2) + + if 'permalink.php?story_fbid' in post_id or '/posts/' in post_id: + # 文字或图片类型 + input_xpath = '//div[@aria-label="Write a comment…"]' + attach_xpath = '//div[@id="focused-state-actions-list"]//div[@aria-label="Attach a photo or video"]' + comment_xpath = '//div[@aria-label="Comment"]' + page.click(input_xpath) + sleep(1, 2) + elif 'watch/?v' in post_id: + # 视频类型 + input_xpath = '//div[@aria-label="Write a comment…"]' + attach_xpath = '//div[@aria-label="Attach a photo or video"]' + comment_xpath = '//div[@aria-label="Comment"]' + elif '/reel/' in post_id: + # 短视频类型 + input_xpath = '//div[@aria-label="Write a comment…"]' + attach_xpath = '//div[@aria-label="Attach a photo or video"]' + comment_xpath = '//div[@role="complementary"]//div[@aria-label="Comment"]' + page.click('//div[@aria-label="Comment"][1]') + sleep(1, 2) + else: + raise OperationFailed(f'不支持的帖子类型POST: {post_id}') + + if image_key: + filename = image_key.split('/')[-1] + file_path = os.path.join(BASE_PATH, 'files', filename) + client.fget_object(BUCKET, image_key, file_path) + sleep(1, 2) + with page.expect_file_chooser() as fc_info: + page.click(attach_xpath) + file_chooser = fc_info.value + file_chooser.set_files(file_path) + time.sleep(5) + + page.type(input_xpath, message) + page.click(comment_xpath) + time.sleep(5) + except Error as e: + check_account_status(page) + raise OperationFailed(f'操作超时,请重试{e}') + content = _full_screenshot() if image_key: os.remove(file_path) @@ -931,10 +975,10 @@ def playwright_comment(cookies, post_id, message, image_key=None): key = f'{uuid.uuid4()}.png' put_object(key, content) - return {'image_key': key} + return {'screenshot_key': key} -def playwright_get_user_profile(cookies): +def playwright_get_user_profile(cookies, username=None): path = os.path.join(BASE_PATH, 'chrome', '130-0008', 'chrome.exe') with lock: with sync_playwright() as playwright: @@ -945,16 +989,18 @@ def playwright_get_user_profile(cookies): ) context = browser.new_context(no_viewport=True) context.add_init_script(path=os.path.join(BASE_PATH, 'stealth.min.js')) - context.add_cookies([ - {'name': k, 'value': v, 'domain': '.facebook.com', 'path': '/'} for k, v in cookies.items() - ]) + context.add_cookies(parse_cookies(cookies)) page = context.new_page() url = 'https://facebook.com' - page.goto(url) - _change_language(page) + try: + page.goto(url) + _change_language(page) - profile_pic_url = page.locator('//div[@aria-label="Shortcuts"]//li[1]//*[@preserveAspectRatio="xMidYMid slice"]').get_attribute('xlink:href') - nickname = page.locator('//div[@aria-label="Shortcuts"]//li[1]//span').first.inner_text() + profile_pic_url = page.locator('//div[@aria-label="Shortcuts"]//li[1]//*[@preserveAspectRatio="xMidYMid slice"]').get_attribute('xlink:href') + username = page.locator('//div[@aria-label="Shortcuts"]//li[1]//span').first.inner_text() + except Error as e: + check_account_status(page) + raise OperationFailed(f'操作超时,请重试{e}') context.close() browser.close() @@ -967,9 +1013,9 @@ def playwright_get_user_profile(cookies): # } ) bio = io.BytesIO(response.content) - key = f"{nickname.replace(' ', '_')}.png" + key = f"{username.replace(' ', '_')}.png" put_object(key, bio) - return {'profile_pic': key, 'nickname': nickname} + return {'avatar_key': key, 'username': username, 'nickname': username} def playwright_set_user_profile(cookies, firstname=None, lastname=None, image_key=None): @@ -986,49 +1032,52 @@ def playwright_set_user_profile(cookies, firstname=None, lastname=None, image_ke ) context = browser.new_context(no_viewport=True) context.add_init_script(path=os.path.join(BASE_PATH, 'stealth.min.js')) - context.add_cookies([ - {'name': k, 'value': v, 'domain': '.facebook.com', 'path': '/'} for k, v in cookies.items() - ]) + context.add_cookies(parse_cookies(cookies)) page = context.new_page() url = 'https://www.facebook.com' - page.goto(url) - _change_language(page) + try: + page.goto(url) + _change_language(page) - url = 'https://accountscenter.facebook.com/?entry_point=app_settings' - page.goto(url) - page.locator('//div[@role="list"]/div').first.click() + url = 'https://accountscenter.facebook.com/?entry_point=app_settings' + page.goto(url) + page.locator('//div[@role="list"]/div').first.click() - if firstname or lastname: - if firstname and lastname: - # 修改名称 - page.click('//a[@aria-label="Name"]') - page.locator('//input').first.fill(firstname) - page.locator('//input').last.fill(lastname) - page.locator('//div[@role="button"]').last.click() - page.click('//span[text()="Done"]') - else: - raise OperationFailed('名称中必须有First name和Last name') + if firstname or lastname: + if firstname and lastname: + # 修改名称 + page.click('//a[@aria-label="Name"]') + page.locator('//input').first.fill(firstname) + page.locator('//input').last.fill(lastname) + page.locator('//div[@role="button"]').last.click() + page.click('//span[text()="Done"]') + else: + raise OperationFailed('名称中必须有First name和Last name') - if image_key: - # 修改头像 - page.click('//a[@aria-label="Profile picture"]') - filename = image_key.split('/')[-1] - file_path = os.path.join(BASE_PATH, 'files', filename) - client.fget_object(BUCKET, image_key, file_path) - sleep(1, 2) - with page.expect_file_chooser() as fc_info: - page.click('//div[text()="Upload new photo"]') - file_chooser = fc_info.value - file_chooser.set_files(file_path) - page.locator('//span[text()="Save"]').last.click() - time.sleep(5) - os.remove(file_path) + if image_key: + # 修改头像 + page.click('//a[@aria-label="Profile picture"]') + filename = image_key.split('/')[-1] + file_path = os.path.join(BASE_PATH, 'files', filename) + client.fget_object(BUCKET, image_key, file_path) + sleep(1, 2) + with page.expect_file_chooser() as fc_info: + page.click('//div[text()="Upload new photo"]') + file_chooser = fc_info.value + file_chooser.set_files(file_path) + page.locator('//span[text()="Save"]').last.click() + time.sleep(5) + os.remove(file_path) + except Error as e: + check_account_status(page) + raise OperationFailed(f'操作超时,请重试{e}') context.close() browser.close() + return {} -def playwright_test(cookies): +def playwright_check_account_cookies(cookies): path = os.path.join(BASE_PATH, 'chrome', '130-0008', 'chrome.exe') with lock: with sync_playwright() as playwright: @@ -1039,40 +1088,31 @@ def playwright_test(cookies): ) context = browser.new_context(no_viewport=True) context.add_init_script(path=os.path.join(BASE_PATH, 'stealth.min.js')) - context.add_cookies([ - {'name': k, 'value': v, 'domain': '.facebook.com', 'path': '/'} for k, v in cookies.items() - ]) + context.add_cookies(parse_cookies(cookies)) page = context.new_page() url = 'https://www.facebook.com' page.goto(url) - time.sleep(10000) + time.sleep(10) + check_account_status(page) context.close() browser.close() + return {} if __name__ == '__main__': + # cookies = 'sb=mC6pxQuLvNLPTNpF-b9Tk8tK;c_user=61570961343759;xs=18:fBZ4XJkFA69uNg:2:1734940655:-1:-1;fr=0JjwzD0HEedbQSHGt.AWUHNQcfxnkbZ3j5rVd1NgTTGhA.BnaRfv..AAA.0.0.BnaRfv.AWWF3uukqmQ;datr=7xdpZzxiItbht8A5aCDBAhQU' + cookies = 'datr=UdBVZy_TbLb_SPycLuUOVfpB;sb=UdBVZ509Gl0kpUXQ_P_pcmy2;m_pixel_ratio=2;wd=360x590;fr=0HivUSkxlYXi0Scep.AWXQIH6ShK78BdDqLHVgAuV2cIkb3765V9gKDw.BnVdBR..AAA.0.0.BnvaSE.AWWFQz-vcoU;locale=en_US;c_user=61570226580861;xs=50%3APFRJIPR2ekAw8g%3A2%3A1740481664%3A-1%3A-1' # cookies = { - # 'datr': 'gUM7ZgtRENjtL34mDqlmAhD6', - # 'sb': '3-jQZxmj3sGZwWeCljieq_X6', - # 'c_user': '61573941575877', + # 'datr': '4MXgZ3twsUMLaR7_yYPjboTs', + # 'sb': '4MXgZ5AKdd6AiVqGy_N0-cpe', # 'locale': 'zh_CN', - # 'presence': 'C%7B%22t3%22%3A%5B%5D%2C%22utc3%22%3A1741745415451%2C%22v%22%3A1%7D', - # 'fr': '1I4dwdZF6jROteKRg.AWUKdna6hiEq5tAR7DMwI3ln8q49Km00-iVZzQ.Bn0PRY..AAA.0.0.Bn0PRY.AWVQ4Md7YN8', - # 'xs': '47%3AHNx1689XzRyiDw%3A2%3A1741745375%3A-1%3A-1%3A%3AAcUaomjGuSJlQilSly9moQfhEB9P1mqZn-p4NQvvUA', - # 'wd': '1728x411', + # 'presence': 'C{"t3":[],"utc3":1742784026639,"v":1}', + # 'ps_n': '1', + # 'wd': '1369x475', + # 'c_user': '61574433449058', + # 'fr': '04xfKMRdCsbtllhPA.AWUt-rPOi-ist5ZdVHl3jiYcKYM11xLu0MN9gA.Bn4MXg..AAA.0.0.Bn4MYY.AWWmAFxhQek', + # 'xs': '6:he_0XMG7YzQPKQ:2:1742784022:-1:-1', # } - cookies = { - 'datr': '4MXgZ3twsUMLaR7_yYPjboTs', - 'sb': '4MXgZ5AKdd6AiVqGy_N0-cpe', - 'locale': 'zh_CN', - 'presence': 'C{"t3":[],"utc3":1742784026639,"v":1}', - 'ps_n': '1', - 'wd': '1369x475', - 'c_user': '61574433449058', - 'fr': '04xfKMRdCsbtllhPA.AWUt-rPOi-ist5ZdVHl3jiYcKYM11xLu0MN9gA.Bn4MXg..AAA.0.0.Bn4MYY.AWWmAFxhQek', - 'xs': '6:he_0XMG7YzQPKQ:2:1742784022:-1:-1', - } - # playwright_test(cookies) # post(cookies, 'cs2025') # like(cookies, 'ZmVlZGJhY2s6MTIyMTA5NjE0NjU0NzkzNzc5') # comment(cookies, 'ZmVlZGJhY2s6MTIyMTA5NjE0NjU0NzkzNzc5', 'game la', 'xzpq.mp4') @@ -1095,4 +1135,5 @@ if __name__ == '__main__': # lastname='Keals', # image_key='rg.jpg' # ) + # playwright_check_account_cookies(cookies)