2012-09-11 24 views

Respuesta

6

Respuesta corta: No se puede hacer esto perfectamente.

Respuesta larga: Puede hacerlo con un poco de esfuerzo, pero no será ni cerca de perfecto. Puede utilizar la API de Twitter para controlar la actividad de hasta 4000 ID de usuario. Si una de las 4k personas que usted monitorea crea un tweet, entonces puede obtener toda la información, incluidas las personas que han favorecido el tweet. Esto también requiere que envíes toda la información sobre las personas que monitoreas a una base de datos (yo uso mongodb). A continuación, puede consultar la base de datos para obtener información sobre su tweet.

+1

me gustan las respuestas cortas. si Twitter no quiere mostrarme los favoritos, no es mi problema, pero me preocupa api, uh: \ ¡Gracias! – gaussblurinc

+0

Puede usar https://dev.twitter.com/docs/api/1.1/get/favorites/list para obtener los 20 últimos favoritos de un usuario y buscar su tweet en él. Pero esto es muy limitado ya que solo devuelve 20. – Amitash

+3

sí, y no puedo obtener la identificación de todos los usuarios, ¿sí? Necesito un método como: 'status/favoritos/usuarios' – gaussblurinc

3

Al parecer, la única manera de hacerlo es en este momento es get the info directamente desde el servidor web, así:

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