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.

TypeError: __init__() falta 2 argumentos posicionales requeridos: ‘access_token’ y ‘access_token_secret’

Estoy intentando obtener los tweets de Twitter a través de la API de tweepy y para eso, he escrito el siguiente código que consta de sockets para conectarme a pyspark para el posterior análisis de los tweets que se están obteniendo.
Código:

import tweepy
from tweepy import OAuthHandler
from tweepy import Stream
import socket
import json
consumer_key="IvWeydhuRZoHbigNvX9wl8FbX"
consumer_secret="hv9NnWV64f4ECnK3eqJIhwQiu0SoDMtL1b9ImPJJFPwSSKleOg"
access_token="3945967939-cqy1y3J6cPcKi2fohK3qr5QSB2Z3lrOcs863tPI"
access_secret="oJIXDC37NsRU1FNP4jznCyIVwRiBjaHF9L3qsyxybkykS"
class TweetListener(Stream):
    def __init__(self, csocket):
        self.client_socket=csocket
    def on_data(self, data):
        try:
            msg = json.loads(data)
            print(msg('text').encode('utf-8'))
            self.client_socket.send(msg('text').encode('utf-8'))
            return True
        except BaseException as e:
            print('Error %s'%str(e))
        return True
    def on_error(self, status):
        print(status)
        return True
def send_data(c_socket):
    auth = OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_secret)
    twtr_stream = Stream(auth, TweetListener(c_socket))
    twtr_stream.filter(track=['ETH'])
s = socket.socket()
host = "127.0.0.1"
port = 5000
s.bind((host, port))
print("Puerto activo %s"%str(port))
send_data(c_socket)

Error en la salida:

TypeError                                 Traceback (most recent call last)
/tmp/ipykernel_22860/3758390964.py in <module>
----> 1 send_data(c_socket)
/tmp/ipykernel_22860/1165989285.py in send_data(c_socket)
      2     auth = OAuthHandler(consumer_key, consumer_secret)
      3     auth.set_access_token(access_token, access_secret)
----> 4     twtr_stream = Stream(auth, TweetListener(c_socket))
      5     twtr_stream.filter(track=['ETH'])

TypeError: __init__() missing 2 required positional arguments: 'access_token' and 'access_token_secret'

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error indica que la clase TweetListener está faltando dos argumentos requeridos, access_token y access_secret. Estos son los tokens utilizados para autenticar la conexión con la API de Twitter.

    Para solucionar este error, necesitas pasar estos dos argumentos al instanciar la clase TweetListener. Puedes modificar la función send_data() de la siguiente manera:

    def send_data(c_socket):
        auth = OAuthHandler(consumer_key, consumer_secret)
        auth.set_access_token(access_token, access_secret)
        twtr_stream = Stream(auth, TweetListener(c_socket, access_token, access_secret))
        twtr_stream.filter(track=['ETH'])
    

    Esto pasará el token de acceso y el secreto a la clase TweetListener como argumentos y el error debería resolverse.

Comments are closed.