2012-09-11 14 views

risposta

6

Risposta breve: non è possibile farlo perfettamente.

Risposta lunga: puoi farlo con un po 'di sforzo ma non sarà nemmeno vicino alla perfezione. È possibile utilizzare l'API di twitter per monitorare l'attività di un massimo di 4000 ID utente. Se un tweet viene creato da una delle 4k persone che controlli, puoi ottenere tutte le informazioni incluse le persone che hanno preferito il tweet. Ciò richiede anche che tu spinga tutte le informazioni sulle persone che controlli su un database (io uso mongodb). È quindi possibile interrogare il database per informazioni sul proprio tweet.

+1

Mi piacciono le risposte brevi. se twitter non vuole mostrarmi i preferiti, non è un problema mio, ma guai di api, uh: \ Grazie! – gaussblurinc

+0

È possibile utilizzare https://dev.twitter.com/docs/api/1.1/get/favorites/list per ottenere gli ultimi 20 preferiti di un utente e cercare il proprio tweet in esso. Ma questo è molto limitato in quanto restituisce solo 20. – Amitash

+3

sì, e non riesco a ottenere tutti gli utenti id, sì? ho bisogno di un metodo come: 'statuses/preferiti/utenti' – gaussblurinc

3

A quanto pare, l'unico modo per farlo è in questo momento è quello di get the info direttamente dal server web, in questo modo:

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