def __init__(self, escritor): super(RecolectorTweetsUser, self).__init__(escritor) self.authorizator = GetAuthorizations(299) self.twitter = None self.apoyo = ApoyoTwitter() self.tipo_id = 1 self.inicializa()
def __init__(self, escritores): super(RecolectorSiguiendoShort, self).__init__(escritores) self.authorizator = GetAuthorizations(15) self.twitter = None self.apoyo = ApoyoTwitter() self.tipo_id = 5 self.inicializa() self.cursor = -1
def __init__(self, escritor): super(RecolectorSeguidoresLong, self).__init__(escritor) self.authorizator = GetAuthorizations(30) self.twitter = None self.apoyo = ApoyoTwitter() self.tipo_id = 3 self.inicializa() self.cursor = -1
def __init__(self, escritores): super(RecolectorSeguidoresShort, self).__init__(escritores) self.authorizator = GetAuthorizations(15) self.twitter = None self.apoyo = ApoyoTwitter() self.tipo_id = 4 self.inicializa() self.cursor = -1 self.lastQuery = ""
def __init__(self, escritores): self.authorizator = GetAuthorizations(1000) self.tipo_id = 100 self.authorizator.load_twitter_token(self.tipo_id) app_key, app_secret, oauth_token, oauth_token_secret = self.authorizator.get_twitter_secret( ) Recolector.__init__(self, escritores) TwythonStreamer.__init__(self, app_key, app_secret, oauth_token, oauth_token_secret) self.tweets = []
class RecolectorTweetsUsersStream(TwythonStreamer, Recolector): """docstring for TweetsStatusStream""" def __init__(self, escritores): self.authorizator = GetAuthorizations(1000) self.tipo_id = 100 self.authorizator.load_twitter_token(self.tipo_id) app_key, app_secret, oauth_token, oauth_token_secret = self.authorizator.get_twitter_secret( ) Recolector.__init__(self, escritores) TwythonStreamer.__init__(self, app_key, app_secret, oauth_token, oauth_token_secret) self.tweets = [] def recolecta(self, tokens): string_tokens = "" for i, token in enumerate(tokens): if i >= 5000: break if i == 0: string_tokens += str(token) else: string_tokens += "," + str(token) print string_tokens self.statuses.filter(follow=string_tokens) def on_success(self, data): limiteEscritura = 10 if 'text' in data: print len(self.tweets) if len(self.tweets) > limiteEscritura: self.guarda(self.tweets) self.tweets = [] self.tweets.append(data) def guarda(self, arrayDatos): for escritor in self.escritores: escritor.escribe(arrayDatos) def on_error(self, status_code, data): print status_code
class RecolectorTweetsLangStream(TwythonStreamer, Recolector): """docstring for TweetsStatusStream""" def __init__(self, escritores): self.authorizator = GetAuthorizations(1000) self.tipo_id = 100 self.authorizator.load_twitter_token(self.tipo_id) app_key, app_secret, oauth_token, oauth_token_secret = self.authorizator.get_twitter_secret( ) Recolector.__init__(self, escritores) TwythonStreamer.__init__(self, app_key, app_secret, oauth_token, oauth_token_secret) self.tweets = [] def recolecta(self, lang): self.statuses.filter(locations="-27,37,2,38", language=lang) #,language=lang def on_success(self, data): limiteEscritura = 20 if 'text' in data: print len(self.tweets) if len(self.tweets) > limiteEscritura: print len(self.tweets) self.guarda(self.tweets) self.tweets = [] self.tweets.append(data) def guarda(self, arrayDatos): for escritor in self.escritores: escritor.escribe(arrayDatos) def on_error(self, status_code, data): print "error" print status_code
class RecolectorSeguidoresLong(Recolector): """docstring for RecolectorSeguidores""" def __init__(self, escritor): super(RecolectorSeguidoresLong, self).__init__(escritor) self.authorizator = GetAuthorizations(30) self.twitter = None self.apoyo = ApoyoTwitter() self.tipo_id = 3 self.inicializa() self.cursor = -1 def inicializa(self): self.authorizator.load_twitter_token(self.tipo_id) api_key, access_token = self.authorizator.get_twython_token() self.twitter = Twython(api_key, access_token=access_token) def recolecta(self, query): self.cursor = -1 arrayUsuarios = [] if query[0] == '@': query = query[1:] while True: retorno = self.privateRealizaConsulta(query) if retorno == []: break self.cursor = retorno["next_cursor"] for usuario_np in retorno["users"]: usuario_p = self.privateParseaUserFormStatus(usuario_np) arrayUsuarios.append(usuario_p) self.guarda(arrayUsuarios) def guarda(self, arrayDatos): self.escritor.escribe(arrayDatos) def privateRealizaConsulta(self, query): if self.authorizator.is_limit_api(self.tipo_id): return [] try: retorno = self.twitter.get_followers_list(screen_name=query, cursor=self.cursor, count='200') self.authorizator.add_query_to_key(self.tipo_id) if retorno["users"] == []: return [] return retorno except Exception, e: print e return []
class RecolectorSiguiendoShort(Recolector): def __init__(self, escritores): super(RecolectorSiguiendoShort, self).__init__(escritores) self.authorizator = GetAuthorizations(15) self.twitter = None self.apoyo = ApoyoTwitter() self.tipo_id = 5 self.inicializa() self.cursor = -1 def inicializa(self): self.authorizator.load_twitter_token(self.tipo_id) api_key, access_token = self.authorizator.get_twython_token() self.twitter = Twython(api_key, access_token=access_token) def recolecta(self, query=None, id_user=-1, complete=False): self.cursor = -1 arrayUsuarios = [] if query is None and id_user == -1: raise Exception('Al menos debe haber un parametro usable') if query is not None: if query[0] == '@': query = query[1:] id_user = self.apoyo.getUserIDByScreenName(query) if id_user == None: raise Exception('El usuario debe estar en la base de datos') retornoFinal = {"ids": []} while True: retorno = self.privateRealizaConsultaById(id_user) if retorno == []: break retornoFinal["ids"].extend(retorno["ids"]) if len(retorno["ids"]) < 5000: break if complete == False: break #se almacenan las relaciones en una tupla (usuario1, usuario2) #esto quiere decir que el usuario1 sigue al usuario2. lista_relaciones = [] for identificador in retornoFinal["ids"]: lista_relaciones.append((id_user, identificador)) self.guarda(lista_relaciones) def guarda(self, arrayDatos): for escritor in self.escritores: escritor.escribe(arrayDatos) def privateRealizaConsultaById(self, identificador): if self.authorizator.is_limit_api(self.tipo_id): raise Exception('LIMITE') try: retorno = self.twitter.get_friends_ids(user_id=identificador, cursor=self.cursor, count='5000') self.authorizator.add_query_to_key(self.tipo_id) if len(retorno["ids"]) == 0: return [] return retorno except Exception, e: self.authorizator.add_query_to_key(self.tipo_id) print e if "429" in str(e): raise Exception('LIMITE') return []
class RecolectorTweetsUser(Recolector): """docstring for RecolectorTweetsUser""" def __init__(self, escritor): super(RecolectorTweetsUser, self).__init__(escritor) self.authorizator = GetAuthorizations(299) self.twitter = None self.apoyo = ApoyoTwitter() self.tipo_id = 1 self.inicializa() #self.tiempos_por_escritor = {} def inicializa(self): self.authorizator.load_twitter_token(self.tipo_id) api_key, access_token = self.authorizator.get_twython_token() self.twitter = Twython(api_key, access_token=access_token) def recolecta(self, query=None, identificador=-1, limit=3200): arrayFinal = [] if query is None and identificador == -1: raise Exception('Al menos debe haber un parametro usable') if query is not None: if query[0] == '@': query = query[1:] minimo = self.apoyo.getLastTweetCollected(screen_name=query, identificador=identificador) maximo = 0 maximoGlobal = long(0) cont = 0 flag_fin = False while True: try: statuses = self.privateRealizaConsulta(query=query, identificador=identificador, maxi=maximo, mini=minimo) except Exception, e: flag_fin = True statuses = [] if len(statuses) == 0: break for status in statuses: arrayFinal.append(status) maximo = self.getMinIDtweets(arrayFinal, query) maximo -= 1 if len(arrayFinal) > 50: self.guarda(arrayFinal) auxMax = self.getMaxIDtweets(arrayFinal, query) if auxMax > maximoGlobal: maximoGlobal = auxMax cont += len(arrayFinal) arrayFinal = [] #limite de la api if len(arrayFinal) >= limit: break #fin del while self.guarda(arrayFinal) #for tipo in self.tiempos_por_escritor: # print tipo + "\t" + str(self.tiempos_por_escritor[tipo]) if maximoGlobal != 0: self.apoyo.setLastUserTweet(maximoGlobal, screen_name=query, identificador=identificador) if flag_fin == True: raise Exception('LIMITE')
class RecolectorFavoritosUser(Recolector): def __init__(self, escritor): super(RecolectorFavoritosUser, self).__init__(escritor) self.authorizator = GetAuthorizations(14) self.twitter = None self.apoyo = ApoyoTwitter() self.tipo_id = 6 self.inicializa() def inicializa(self): self.authorizator.load_twitter_token(self.tipo_id) api_key, access_token = self.authorizator.get_twython_token() self.twitter = Twython(api_key, access_token=access_token) def recolecta(self, query=None, id_user=-1, complete=False): #TODO recolectar todos los favoritos si flag activa if query is None and id_user == -1: raise Exception('Al menos debe haber un parametro usable') if query is not None: if query[0] == '@': query = query[1:] id_user = self.apoyo.getUserIDByScreenName(query) if id_user == None: raise Exception('El usuario debe estar en la base de datos') #print id_user maximo = 0 while True: tweets = self.privateRealizaConsulta(id_user, maximo=maximo) if tweets == []: break relaciones = [] for tweet in tweets: #el usuario1 -[:FAV]-> el tweet X relaciones.append((id_user, tweet["id"])) self.guarda(tweets, relaciones) if complete == False: break maximo = self.getMinIDtweets(tweets) maximo -= 1 print maximo def guarda(self, arrayDatos, relaciones): #mal diseño sorry for escritor in self.escritores: if "EscritorTweets" in escritor.__class__.__name__: escritor.escribe(arrayDatos) else: escritor.escribe(relaciones) def getMinIDtweets(self, tweets): minimo = long(10**20) for tweet in tweets: if minimo > tweet["id"]: minimo = tweet["id"] if minimo == long(10**20): return 0 return minimo def privateRealizaConsulta(self, identificador, maximo=0): count = 200 if self.authorizator.is_limit_api(self.tipo_id): raise Exception('LIMITE') try: if maximo == 0: retorno = self.twitter.get_favorites(user_id=identificador, count=count) else: retorno = self.twitter.get_favorites(user_id=identificador, count=count, max_id=maximo) self.authorizator.add_query_to_key(self.tipo_id) return retorno except Exception, e: print e self.authorizator.add_query_to_key(self.tipo_id) if "429" in str(e): raise Exception('LIMITE') return []