2012-09-11 14 views
7

Ich versuche, Informationen über Benutzer zu erhalten, die bestimmte Tweet zu den Favoriten hinzugefügt haben, aber ich kann es in der Dokumentation nicht finden.Twitter API: Wie bekomme ich die User ID, welchen favorisierten Tweet?

Es ist unfair, dass Twitter das tun kann, aber diese Methode nicht als API gibt.

+0

siehe https://stackoverflow.com/questions/ 28982850/twitter-api-getting-list-of-users-wer-favorited-a-status – sovon

Antwort

6

Kurze Antwort: Sie können das nicht perfekt machen.

Lange Antwort: Sie können dies mit etwas Anstrengung tun, aber es wird nicht einmal annähernd perfekt sein. Mit der twitter API können Sie die Aktivität von bis zu 4000 Benutzer-IDs überwachen. Wenn ein Tweet von einem der 4k Personen erstellt wird, die Sie überwachen, können Sie alle Informationen abrufen, einschließlich der Personen, die den Tweet enthalten. Dies erfordert auch, dass Sie alle Informationen über die Personen, die Sie überwachen, auf eine Datenbank übertragen (ich benutze mongodb). Sie können dann die Datenbank nach Informationen zu Ihrem Tweet abfragen.

+1

ich mag kurze antworten. wenn twitter mir keine Favoriten zeigen will, ist es nicht mein Problem, aber Ärger von api, uh: \ Danke! – gaussblurinc

+0

Sie können https://dev.twitter.com/docs/api/1.1/get/favorites/list verwenden, um die 20 neuesten Favoriten eines Nutzers zu erhalten und nach Ihrem Tweet zu suchen. Aber das ist sehr begrenzt, da es nur 20 zurückgibt. – Amitash

+3

yeah, und ich kann nicht alle Benutzer ID, ja? Ich brauche Methode wie: 'Status/Favoriten/Benutzer' – gaussblurinc

3

Offenbar ist die einzige Möglichkeit, dies zu tun, ist zu diesem Zeitpunkt get the info ist direkt vom Web-Server, etwa so:

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