es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo iterar a través de una lista que contiene consultas de búsqueda utilizando un bucle for

Estoy tratando de iterar a través de una lista que contiene diferentes consultas de búsqueda. Cada elemento en la lista ‘search_query_list’ diferencia el nombre y el nombre de usuario de Twitter de un político.

search_query_list =
['(block me OR blocked me) -vote -$2000 -Senate -House -is:retweet lang:en (SenJonKyl OR Jon Kyl)',
'(block me OR blocked me) -vote -$2000 -Senate -House -is:retweet lang:en (DougJones OR Doug Jones)',
'(block me OR blocked me) -vote -$2000 -Senate -House -is:retweet lang:en (timkaien OR Tim Kaine)']

Estoy tratando de iterar a través de cada elemento de la lista y extraer tweets para cada político usando un bucle for. Sin embargo, por alguna razón desconocida, el código no extrae ningún tweet.

pol_tweets = [] # Lista vacía

def getTweets():
    client = getClient()
    for x in search_query_list:
        tweets = client.search_all_tweets(query=x,
                                          tweet_fields=['created_at', 'author_id'],
                                          start_time='2017-01-01T00:00:00Z',
                                          max_results=30,
                                          expansions=['attachments.media_keys', 'author_id'],
                                          media_fields=['preview_image_url', 'url'],
                                          user_fields=['description'])
    return pol_tweets.append(tweets) # Añadir tweets a la lista vacía

results = getTweets()
print(results)
None
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas con el código proporcionado que pueden estar causando que no se puedan extraer los tweets:

    1. La lista search_query_list no está escrita de manera consistente en el código. Está escrita como search_query_list y searh_query. Esto puede causar un error cuando el código intenta acceder a la lista.
    2. La función getTweets() tiene una declaración de retorno dentro del bucle for. Esto significa que la función devolverá el primer conjunto de tweets que obtenga de la primera consulta en la lista, en lugar de agregar todos los tweets a pol_tweets. El enfoque correcto sería mover la declaración de retorno fuera del bucle, después de que se hayan agregado todos los tweets a la lista.
    3. La función getClient() no está definida en el código proporcionado. No está claro qué hace esta función o de dónde proviene, pero puede ser necesario definirla para crear un cliente de Twitter y autenticarse con la API de Twitter.

    Aquí hay una versión revisada del código que aborda estos problemas:

    import tweepy
    
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    
    client = tweepy.Client(auth)
    
    search_query_list = [
        '(block me OR blocked me) -vote -$2000 -Senate -House -is:retweet lang:en (SenJonKyl OR Jon Kyl)',
        '(block me OR blocked me) -vote -$2000 -Senate -House -is:retweet lang:en (DougJones OR Doug Jones)',
        '(block me OR blocked me) -vote -$2000 -Senate -House -is:retweet lang:en (timkaine OR Tim Kaine)'
    ]
    
    pol_tweets = []
    
    def getTweets():
        for query in search_query_list:
            tweets = client.search_all_tweets(
                query=query,
                tweet_fields=['created_at', 'author_id'],
                start_time='2017-01-01T00:00:00Z',
                max_results=30,
                expansions=['attachments.media_keys', 'author_id'],
                media_fields=['preview_image_url', 'url'],
                user_fields=['description']
            )
            pol_tweets.extend(tweets)
        return pol_tweets
    
    results = getTweets()
    
    print(len(results)) # debería imprimir el número de tweets extraídos
    

    En esta versión del código, definimos un objeto Client utilizando la biblioteca tweepy, que es necesaria para autenticarse con la API de Twitter. También utilizamos el método extend del objeto list para agregar cada conjunto de tweets a pol_tweets a medida que se extraen, en lugar de devolver el primer conjunto de tweets encontrado. Finalmente, movemos la declaración de retorno fuera del bucle para asegurarnos de que todos los tweets se agreguen a la lista antes de devolverla.

Comments are closed.