How to get users ID, who favorite specific tweet?

Мне потребовалось узнать через Twitter API кто лайкал тот или иной твит. Однако, несколько раз перечитав документацию, я не обнаружил такой очевидной и необходимой возможности. Тогда я предположил, что это делается как-то опосредованно и начал гуглить. К моему великому разочарованию, выяснилось, что Twitter не предоставляет такой возможности ни через API, ни как-то иначе, хотя спрос очень велик. Интернет-пользователи предположили, что это слишком ценная информация, с помощью которой можно проводить разного рода анализ и которой Twitter никогда не поделится. Печально! Но мне, тем не менее, удалось частично решить проблему. Я научился получать такой список, то только из первых 25 человек, кто лайкнул (ранее это называлось «добавил в избранное») определённый твит. Согласитесь, что это лучше, чем совсем ничего. А для моих задач, так и вообще оказалось достаточно, так как я анализирую не слишком популярные твиты, которые редко кто лайкает свыше 25 раз.

Я обратил внимание, что заходя в Twitter через браузер, я таки могу посмотреть список лайкнувших, не всех, конечно, а только первых 25 человек. Я проанализировал запрос браузера и ответ сайта, и сделал то же самое, но на Python. И вот, что у меня получилось:

import requests
from bs4 import BeautifulSoup

STATUS_ID = 935591323964452865  # Номер интересующего твита
url = 'https://twitter.com/i/activity/favorited_popup?id=' + str(STATUS_ID)
response = requests.get(url)
html_users = response.json().get('htmlUsers')
soup = BeautifulSoup(html_users, "html.parser")
users = soup.find_all('div', class_='account js-actionable-user js-profile-popup-actionable ')
for user in users:
    a = user.get('data-user-id')  # Идентификатор пользователя
    b = user.get('data-name')  # Отображаемое имя пользователя
    c = user.get('data-screen-name')  # Зарегистрированный ник пользователя
    print(a + ': ' + b + ' (@' + c + ')')

После запуска этого кода на экран будут выведены первые 25 пользователей лайкнувших твит, номер которого задан в константе STATUS_ID:


349771130: Jesús Sanabria Martos (@mrmartos)
962381673634480128: Darrelyn (@Darrelyn12)
795037326577717248: Daniel Silva 👠 (@Daniellsillva20)
945972103429414913: Iván. Toala (@IvnToala1)
2379258727: ❤️✨ARIA | BLAKE✨❤️ (@TheAriaBlake)
952753272: Liss♢Mercado (@lisethmerkdo)
851954819699007489: poc (@spanishLulaby)
3269382655: i could’ve dropped my croissant (@reneekalee)
1027127156: Alberto Villamar (@al_villamar)
1322826428: adrianah23 (@adrianahuff23)
521158789: nry (@hernandezatreyu)
3821490633: S. Frances Tiger (@SFrancesTiger)
974695248197771265: 罗欣雨 (@luoxinyu0)
870872736469590016: christo.tsakiri@gmai (@ChristoTsakiri)
947357203681431552: AD Jones@JESUS license777 (@AjSlick007)
193148406: Guillermo Jimenez (@J1mEn3z)
2301341356: Alyx Kahl (@AlyxKahl)
978106588534857729: Mohammas (@Mohamma97950826)
979010404293554176: Shibsankar Das (@Shibsan39266625)
2741494735: DJA'AR👑 (@DJAARMusic)
2861650798: Stephen Braverman (@stephenbraverm1)
1613852833: Kev__Lennon (@ShadyDavila)
907429808824573953: Luís (@luissgusstt)
4393419136: Xoxo, Zaah 👒 (@Zaah_carvalho)
315234146: Sherry (@SherrySherry274)

Всё делается без авторизации и без участия Twitter-API. Надеюсь, что это кому-то пригодится.

Оставить ответ

Войти с помощью: 

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Защита от спама * Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.