API Twitter - получение списка пользователей, которые предпочитают статус

Я хочу получить список пользователей, которые предпочитают определенный статус через API Twitter. Я вижу, что у каждого статуса есть количество избранных, но мне нужен список пользователей, которые сделали фаворитов.

Любые идеи, как это можно достичь?

Ответ 1

Вот обходной путь или взлом, реализованный в Python 2.7.x:

import urllib2
import re

def get_user_ids_of_post_likes(post_id):
    try:
        json_data = urllib2.urlopen('https://twitter.com/i/activity/favorited_popup?id=' + str(post_id)).read()
        found_ids = re.findall(r'data-user-id=\\"+\d+', json_data)
        unique_ids = list(set([re.findall(r'\d+', match)[0] for match in found_ids]))
        return unique_ids
    except urllib2.HTTPError:
        return False

# Example: 
# https://twitter.com/golan/status/731770343052972032

print get_user_ids_of_post_likes(731770343052972032)

# ['13520332', '416273351', '284966399']
#
# 13520332 +> @TopLeftBrick
# 416273351 => @Berenger_r
# 284966399 => @FFrink

Ответ 2

Это распечатает URL для каждой учетной записи Twitter, которой понравился указанный твит

import requests
from bs4 import BeautifulSoup

url = "https://twitter.com/golan/status/731770343052972032"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
likes = soup.findAll("a", {"class": "js-profile-popup-actionable js-tooltip"})
for like in likes:
  print("https://twitter.com" + like['href'])

Ответ 3

Для тех, кто использует Python 3, вам нужно декодировать строку HTML, чтобы избежать получения TypeError.

import urllib
import re

def get_user_ids_of_post_likes(post_id):
    try:
        json_data = urllib.request.urlopen('https://twitter.com/i/activity/favorited_popup?id=' + str(post_id)).read()
        json_data = json_data.decode('utf-8')
        found_ids = re.findall(r'data-user-id=\\"+\d+', json_data)
        unique_ids = list(set([re.findall(r'\d+', match)[0] for match in found_ids]))
        return unique_ids

    except urllib.request.HTTPError:
        return False

# Example: 
# https://twitter.com/golan/status/731770343052972032

print get_user_ids_of_post_likes(731770343052972032)

# ['13520332', '416273351', '284966399']
#
# 13520332 +> @TopLeftBrick
# 416273351 => @Berenger_r
# 284966399 => @FFrink