2012-09-11 12 views

Odpowiedz

6

Krótka odpowiedź: Nie możesz tego zrobić idealnie.

Długa odpowiedź: Możesz to zrobić z pewnym wysiłkiem, ale nie będzie to nawet bliskie ideału. Możesz użyć funkcji API Twittera, aby monitorować aktywność do 4000 identyfikatorów użytkownika. Jeśli tweet jest tworzony przez jedną z 4 tysięcy osób, które monitorujesz, możesz uzyskać wszystkie informacje, w tym osoby, które faworyzowały tweet. Wymaga to również przekazania wszystkich informacji o osobach, które monitorujesz, do bazy danych (ja używam mongodb). Następnie możesz przesłać zapytanie do bazy danych w celu uzyskania informacji o tweecie.

+1

lubię krótkie odpowiedzi. jeśli twitter nie chce pokazać mi ulubionych, to nie mój problem, ale kłopoty z api, uh: \ Dzięki! – gaussblurinc

+0

Możesz użyć https://dev.twitter.com/docs/api/1.1/get/favorites/list, aby uzyskać 20 najnowszych ulubionych użytkowników i wyszukać swój tweet w nim. Ale jest to bardzo ograniczone, ponieważ zwraca tylko 20. – Amitash

+3

tak, i nie mogę uzyskać wszystkich użytkowników id, tak? Potrzebuję metody jak: 'statusy/ulubione/użytkownicy' – gaussblurinc

3

Wydaje się, że jedynym sposobem na to jest w tej chwili jest do get the info bezpośrednio z serwera, tak jak poniżej:

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') 
Powiązane problemy