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
Beispiel #4
0
 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 []