【问题标题】:Twitter API - Getting list of users who favorited a statusTwitter API - 获取收藏状态的用户列表
【发布时间】:2015-05-13 00:29:03
【问题描述】:

我想通过 Twitter API 获取收藏特定状态的用户列表。 我可以看到每个状态都有收藏的数量,但我需要收藏的用户列表。

有什么想法可以实现吗?

【问题讨论】:

  • 这不会在 API 中公开。
  • 获取此数据的任何解决方法?我见过人们谈论为此使用流 - 不完全相同的场景....
  • 没有。阅读 API 文档 - 它没有为您提供该功能。对不起。
  • Android 官方 Twitter 应用可以显示点赞和转发帖子的用户列表。所以它通过私有 api 调用以某种方式暴露出来。

标签: twitter


【解决方案1】:

这是在 Python 2.7.x 中实现的解决方法或 hack:

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

【讨论】:

  • 成功了!您还知道这受到什么速率限制吗? 15/分钟还是180/分钟?
  • 该变通方法不使用官方 Twitter API,因此不应该有速率限制。但是 Twitter 可能会提供替代爬虫检测,所以请尝试一下。
  • 很好,python3 用户需要一些代码更改。 'urllib2' 将是 'urllib.request' 并且需要从字节解码,所以在匹配之前使用 'decode("utf8")'
  • 值得注意的是,这个方法在当前的 twitter HTML 布局下最多只能返回 25 个结果。
  • 它正在工作,但限制仍然是最多 25 个结果。
【解决方案2】:

对于使用 Python 3 的用户,您需要对 HTML 字符串进行解码以避免出现 TypeError。

import urllib.request
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

【讨论】:

  • 这不是你在 Python3 中使用 print 的方式
  • @tonyo miyoro 不管怎样,这个方法已经不行了
猜你喜欢
  • 1970-01-01
  • 2011-10-25
  • 2017-02-11
  • 1970-01-01
  • 2018-08-05
  • 2013-06-22
  • 2011-12-24
  • 2018-01-16
  • 2011-05-11
相关资源
最近更新 更多