#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?