Консультируй пожалуйста :)
Когда я использую этот скрипт:
class CustomStreamListener(tweepy.StreamListener):
def on_status(self, status):
# We'll simply print some values in a tab-delimited format
# suitable for capturing to a flat file but you could opt
# store them elsewhere, retweet select statuses, etc.
try:
print "%s\t%s\t%s\t%s" % (status.text,
status.author.screen_name,
status.created_at,
status.source,)
except Exception, e:
print >> sys.stderr, 'Encountered Exception:', e
pass
def on_error(self, status_code):
print >> sys.stderr, 'Encountered error with status code:', status_code
return True # Don't kill the stream
def on_timeout(self):
print >> sys.stderr, 'Timeout...'
return True # Don't kill the stream
# Create a streaming API and set a timeout value of 60 seconds.
streaming_api = tweepy.streaming.Stream(auth, CustomStreamListener(), timeout=60)
# Optionally filter the statuses you want to track by providing a list
# of users to "follow".
print >> sys.stderr, 'Filtering the public timeline for "%s"' % (' '.join(sys.argv[1:]),)
streaming_api.filter(follow=None, track=Q)
Произошла ошибка:
Traceback (most recent call last):
File "C:/Python26/test.py", line 65, in <module>
streaming_api = tweepy.streaming.Stream(auth, CustomStreamListener(), timeout=60)
TypeError: __init__() takes at least 4 non-keyword arguments (3 given)
Что мне тогда делать?
Ваш пример выглядит отсюда. И вы используете Tweepy, библиотеку Python для доступа к API Twitter.
Из Github, вот определение объекта Stream()
(при условии, что у вас есть последняя версия Tweepy, пожалуйста, дважды проверьте!),
def __init__(self, auth, listener, **options):
self.auth = auth
self.listener = listener
self.running = False
self.timeout = options.get("timeout", 300.0)
self.retry_count = options.get("retry_count")
self.retry_time = options.get("retry_time", 10.0)
self.snooze_time = options.get("snooze_time", 5.0)
self.buffer_size = options.get("buffer_size", 1500)
if options.get("secure"):
self.scheme = "https"
else:
self.scheme = "http"
self.api = API()
self.headers = options.get("headers") or {}
self.parameters = None
self.body = None
Поскольку вы, похоже, прошли соответствующее количество аргументов, похоже, что CustomStreamListener()
не инициализируется и поэтому не передается классу Stream()
в качестве аргумента. Посмотрите, можете ли вы инициализировать CustomStreamListener()
перед передачей в качестве аргумента Stream()
.
__init__
- это конструктор класса, в данном случае Stream
. Ошибка означает, что вы указали неправильное количество аргументов в вызове конструктора.
Основной причиной этой проблемы является использование более старой версии tweepy. Я использовал tweepy 1.7.1 и имел ту же ошибку, перед тем как обновить tweepy 1.8. Сразу после этого проблема была решена. Я думаю, что 4 проголосовавших ответа должны быть приняты, чтобы прояснить решение.
tweepy.streaming.Stream
изменился с принятия 4 аргументов до 3 аргументов в этом коммите .