2012-09-11 26 views
7

Tôi đang cố gắng để có được thông tin về người dùng, người đã thêm tweet cụ thể vào mục yêu thích, nhưng tôi không thể tìm thấy nó trong tài liệu.Twitter API: Cách nhận ID người dùng, người yêu thích tweet cụ thể?

Thật không công bằng khi twitter có thể thực hiện điều đó, nhưng không cung cấp phương thức này làm API.

+0

thấy https://stackoverflow.com/questions/ 28982850/twitter-api-get-list-of-users-người-ưa thích-a-trạng thái – sovon

Trả lời

6

Câu trả lời ngắn: Bạn không thể làm điều này một cách hoàn hảo.

Câu trả lời dài: Bạn có thể làm điều này với một số nỗ lực nhưng nó sẽ không còn gần hoàn hảo nữa. Bạn có thể sử dụng api twitter để theo dõi hoạt động của tối đa 4000 id người dùng. Nếu một tweet được tạo bởi một trong 4k người bạn theo dõi, thì bạn có thể nhận được tất cả thông tin bao gồm cả những người đã yêu thích tweet. Điều này cũng yêu cầu bạn đẩy tất cả thông tin về những người mà bạn giám sát vào cơ sở dữ liệu (tôi sử dụng mongodb). Sau đó bạn có thể truy vấn cơ sở dữ liệu để biết thông tin về tweet của bạn.

+1

tôi thích câu trả lời ngắn. nếu twitter không muốn hiển thị cho tôi yêu thích, nó không phải là rắc rối của tôi, nhưng rắc rối của api, uh: \ Cảm ơn! – gaussblurinc

+0

Bạn có thể sử dụng https://dev.twitter.com/docs/api/1.1/get/favorites/list để nhận 20 yêu thích mới nhất của người dùng và tìm kiếm tweet của bạn trong đó. Nhưng điều này rất hạn chế vì nó chỉ trả về 20. – Amitash

+3

vâng, và tôi không thể có được tất cả id người dùng, phải không? tôi cần phương pháp như: 'statuses/favorites/users' – gaussblurinc

3

Rõ ràng, cách duy nhất để làm điều này là vào thời điểm này là để get the info trực tiếp từ máy chủ web, như vậy:

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')