Twitter API:如何获取用户ID,谁最喜欢的特定推文?

gau*_*inc 15 twitter favorites get

我正在尝试获取有关用户的信息,他们在收藏夹中添加了特定的推文,但我在文档中找不到它.

twitter可以做到这一点是不公平的,但不会将此方法作为API.

Ami*_*ash 8

简短的回答:你不能完美地做到这一点.

答案很长:你可以通过一些努力来做到这一点,但它不会接近完美.您可以使用twitter api监控最多4000个用户ID的活动.如果您监控的4k人之一创建了推文,那么您可以获得所有信息,包括赞成推文的人.这还要求您将有关监视人员的所有信息推送到数据库(我使用mongodb).然后,您可以在数据库中查询有关推文的信息.

  • 是的,我不能得到所有用户的身份,是吗?我需要像`statuses/favorites/users`这样的方法 (4认同)

小智 6

显然,实现此目的的唯一方法是直接从Web服务器获取信息,如下所示:

import urllib2
from lxml.html import parse

#returns list(retweet users),list(favorite users) for a given screen_name and status_id
def get_twitter_user_rts_and_favs(screen_name, status_id):
    url = urllib2.urlopen('https://twitter.com/' + screen_name + '/status/' + status_id)
    root = parse(url).getroot()

    num_rts = 0
    num_favs = 0
    rt_users = []
    fav_users = []

    for ul in root.find_class('stats'):
        for li in ul.cssselect('li'):

            cls_name = li.attrib['class']

            if cls_name.find('retweet') >= 0:
                num_rts = int(li.cssselect('a')[0].attrib['data-tweet-stat-count'])

            elif cls_name.find('favorit') >= 0:
                num_favs = int(li.cssselect('a')[0].attrib['data-tweet-stat-count'])

            elif cls_name.find('avatar') >= 0 or cls_name.find('face-pile') >= 0:#else face-plant

                for users in li.cssselect('a'):
                    #apparently, favs are listed before retweets, but the retweet summary's listed before the fav summary
                    #if in doubt you can take the difference of returned uids here with retweet uids from the official api
                    if num_favs > 0:#num_rt > 0:
                        #num_rts -= 1
                        num_favs -= 1
                        #rt_users.append(users.attrib['data-user-id'])
                        fav_users.append(users.attrib['data-user-id'])
                    else:                        
                        #fav_users.append(users.attrib['data-user-id'])
                        rt_users.append(users.attrib['data-user-id'])

        return rt_users, fav_users


#example
if __name__ == '__main__':
    print get_twitter_user_rts_and_favs('alien_merchant', '674104400013578240')
Run Code Online (Sandbox Code Playgroud)