Tweepy ошибка при использовании класса для OAuthHandler: AttributeError: экземпляр аутентификации не имеет атрибута apply_auth - PullRequest
0 голосов
/ 10 июня 2018

Я новичок в python, и я использую библиотеку tweepy для потоковой передачи в Твиттере, и я пытаюсь создать класс, который обрабатывает эту аутентификацию OAth для меня.

from config.config import consumer_secret, consumer_key, secret, token
import tweepy
from tweepy.auth import OAuthHandler
from tweepy import API
from tweepy import OAuthHandler


class Authentication:
    """
    Class that handles the authentication for streaming
    http://docs.tweepy.org/en/v3.5.0/auth_tutorial.html
    """

    def __init__(self):
        self.consumer_key = consumer_key
        self.consumer_secret = consumer_secret
        self.secret = secret
        self.token = token

    def getAuthorization(self):
        self.consumer_key = consumer_key
        self.consumer_secret = consumer_secret
        self.secret = secret
        self.token = token
        auth = OAuthHandler(self.consumer_key, self.consumer_secret)
        auth.set_access_token(self.token, self.secret)
        return auth

У меня есть другой класс, который реализуетTwitter Streaming

import tweepy
from tweepy.streaming import StreamListener
from tweepy import Stream
from tweepy.auth import OAuthHandler


class Listener(tweepy.StreamListener):
    """
    Class that inherits from tweepy StreamListener
    http://tweepy.readthedocs.io/en/v3.5.0
    """

    def on_status(self, status):
        print status
        print(status.text)

    def on_data(self, data):
        print data
        return True

    def on_error(self, status):
        if status == 420:
            # returning False in on_data disconnects the stream
            print status
            return False

Проблема в том, что, когда я пытаюсь получить доступ к методу myStream в основном классе, например, к My Stream Filter, я получаю сообщение об ошибке ниже:

# main  class for the bigDataTweetListener project
import tweepy
from tweepy import Stream
from lib.authentication import Authentication
from lib.tweetListener import Listener
from tweepy.auth import OAuthHandler

# API Authentication
auth = Authentication()
auth.getAuthorization()
api = tweepy.API(auth)
print("authorization  successful")

#Listen a Stream by topic
myStreamListener = Listener()
myStream = tweepy.Stream(auth=api.auth, listener=myStreamListener)
myStream.filter(track="world  cup")

Traceback (последний вызов был последним): файл "C: /Users/Sosa9/PycharmProjects/bigDataTweetListener/main.py", строка 17, в файле myStream.filter (track = "world cup") в файле "C: \ Users\ Sosa9 \ PycharmProjects \ bigDataTweetListener \ venv \ lib \ site-packages \ tweepy \ streaming.py ", строка 228, в фильтре self._start (async) файла" C: \ Users \ Sosa9 \ PycharmProjects \ bigDataTweetListener \ venv \ lib \ "site-packages \ tweepy \ streaming.py ", строка 172, в файле _start self._run ()" C: \ Users \ Sosa9 \ PycharmProjects \ bigDataTweetListener \ venv \ lib \ site-packages \ tweepy \ streaming.py ", строка105, в _run self.auth.apply_auth (url, 'POST', self.headers, self.parameters) AttributeError: Экземпляр аутентификации не имеет атрибута 'apply_auth'

Я не знаю, почему методы. атрибуты из потокового класса недоступны, если я предоставил доступсоздание экземпляра класса аутентификации.Есть идеи?

1 Ответ

0 голосов
/ 11 июня 2018

Прежде всего, вы mixin python2 и 3. Вы должны: "print (status)", а не "print status", чтобы использовать Python3.(print (data) тоже).

Во-вторых, четыре первые строки в getAuthorization() бесполезны: вы уже объявили эти переменные в __init__.Таким образом, вы можете удалить или прокомментировать их:

def getAuthorization(self):
    # self.consumer_key = consumer_key
    # self.consumer_secret = consumer_secret
    # self.secret = secret
    # self.token = token
    auth = OAuthHandler(self.consumer_key, self.consumer_secret)
    auth.set_access_token(self.token, self.secret)
    return auth

Наконец, getAuthorization() возвращает auth, поэтому замените это:

auth.getAuthorization()

на:

auth = auth.getAuthorization()
...