Можно ли очистить данные из общедоступных групп Facebook без использования API Facebook?

#python #facebook #graphql

#python #Facebook #graphql

Вопрос:

Facebook устарел от функции извлечения списка участников общедоступной группы из своего API еще в 2018 году. Хотя существует несколько «онлайновых веб-скребков», которые на самом деле могут извлекать такие списки.

Некоторые из этих сайтов используют файлы cookie для достижения этой цели, в частности значения c_user и xs cookie. Поэтому я предполагаю, что они делают запросы непосредственно к API graphql facebook.

Я попытался воссоздать это, чтобы посмотреть, действительно ли это работает, в образовательных целях, конечно,

Вот код

 import requests

C_USER = '{my c_user cookie value}'
XS =  '{my xs cookie value}'



def fetchUsers(gid):
    with requests.Session() as s:
        link = 'https://www.facebook.com/groups/{}/members'.format(gid)
        s.headers['referer'] = 'https://www.facebook.com/groups/{}/members'.format(gid)
        s.headers['user-agent'] = 'Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Mobile Safari/537.36'
        s.headers['x-fb-friendly-name'] = 'GroupsCometMembersPageNewForumMembersSectionRefetchQuery'
        s.headers['authority'] = 'www.facebook.com'
        s.headers['content-type'] = 'application/x-www-form-urlencoded'
        s.headers['cookie'] = 'datr=KVgYYIAX5zb_krhCp; sb=clgYYE_FY0H6lWP3SnZ; c_user={C_USER}; spin=r.1004833058_b.trunk_t.1639053628_s.1_v.2_; usida=eyJ2ZXIIjoxNjM5MDgzODA3fQ==; x-referer=eyJyIjoiL2Jyb3dzMjg1NjQmc3RhcnQ9MCZsaXN0VHlwZT1saXN0X25vbmZyaWVuZF9ub25hZG1pbiIsImgiOiIvYnJvd3NlL2dyb3VwL21lbWJI1OTE2NzMxOTMyODU2NCZzdGFydD0wJmxpc3RUeXBlPWxpc3Rfbm9uZnJpZW5kX25vbmFkbWluIiwicyI6Im0ifQ==; presence=C{"t3":[{"i":"u.100033204257783"}],"utc3":1639086440727,"v":1}; xs={XS}; fr=0pIsrVrEIGibHFXTR.AWWZGxit3m9NCbQGzc.Bhsnl6.8c.AAA.0.0.Bhsnl6.AWnnLrY; m_pixel_ratio=1; wd=2543x937; dpr=1'
        res = s.post(link)
        
        return res.text
    
print(fetchUsers('{group id}'))
 

Хотя это вернуло какой-то странный HTML-код с некоторыми встроенными в него JavaScript-скриптами, в то время как я ожидал некоторого JSON в формате вкладки предварительного просмотра от аналогичного запроса, сделанного с фактического сайта Facebook.

Вопрос в том, является ли тот факт, что мой запрос составлен неправильно или что сайты, о которых я упоминал выше, не используют этот метод для получения списка участников общедоступных групп Facebook? Если да, то как они делают это «законно», не нарушая TOS Facebook?