python - Tweepy:流侦听器未捕获任何内容
问题描述
我有这段代码,它曾经像三个月前一样正常工作,但现在它不工作了。流侦听器未捕获任何内容。它只是沉默,既不捕获推文也不抛出错误。它正在运行,但我无法观察到任何活动。我通过更新状态检查了 API 连接。我在谷歌云实例中运行它,但是我也在我的工作站上尝试过。这样我就可以排除 Google Cloud Instance 与此有关。
# Standard library
import logging
import datetime, time
import sqlite3
# External library
import tweepy
# Logging configuration
logging.basicConfig(filename='../.log/tweets_capture.log',level=logging.INFO)
# Twitter OAuth authentication
# This is where your key and secrete for twitter login should go.
# More info at https://www.slickremix.com/docs/how-to-get-api-keys-and-tokens-for-twitter/
with open('../../cred/bioinfobotmain.txt', 'r') as f: # Reading the credentials from a text file.
creds = f.readlines()
consumer_key = creds[0].rstrip()
consumer_secret = creds[1].rstrip()
access_token = creds[2].rstrip()
access_token_secret = creds[3].rstrip()
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
#api.update_status('Start Streaming')
# Subclass for stream listener
class StreamListener(tweepy.StreamListener):
def on_status(self, status):
print(status.text)
if status.lang == 'en' and 'RT'.upper() not in status.text :
stat = status.text
stat = stat.replace('\n','')
stat = stat.replace('\t','')
user_id = status.user.id_str
stat_id = status.id_str
create = str(status.created_at)
name = status.user.screen_name
data = (create, name, user_id, stat_id, stat)
#Connecting to SQLite3 database
try:
db_file = '../../db/bioinfotweet.db'
conn = sqlite3.connect(db_file, isolation_level=None)
conn.execute('PRAGMA journal_mode=wal') # This will let concurrent read and write to the database.
c = conn.cursor()
c.execute("INSERT INTO tweetscapture (Date, ScreenName, UserID, TweetID, Text) values (?, ?, ?, ?, ?)", data)
conn.commit()
cdate="Tweet inserted at: "+str(datetime.datetime.now())
logging.info(cdate)
conn.close()
except Exception as ex:
exname = str(ex)
template = "An exception of type {0} occurred. Arguments:\n{1!r}"
message = template.format(type(ex).__name__, ex.args)
logging.info("Sqlite3 database exception occurred.")
logging.info(message)
def on_error(self, status_code):
if status_code == 420:
cdate = "Error code 420 at:"+str(datetime.datetime.now())
logging.info(cdate)
logging.info("Sleeping for 15 mins")
time.sleep(900)
return False
stream_listener = StreamListener()
stream = tweepy.Stream(auth=api.auth, listener=stream_listener)
cdate="Stream started at: "+str(datetime.datetime.now())
logging.info(cdate)
while True:
try:
stream.userstream(encoding='utf8')
except Exception as ex:
exname = str(ex)
template = "An exception of type {0} occurred. Arguments:\n{1!r}"
message = template.format(type(ex).__name__, ex.args)
logging.info("Generic exception occurred.")
logging.info(message)
if "not defined" in exname:
break
else:
logging.info("Sleeping for 60 sec")
time.sleep(60)
continue
解决方案
用户流已于 2018 年 8 月 23 日停用。您的代码调用stream.userstream
将不再有效。有关更多信息,请参阅此公告。
推荐阅读
- python - 如何在 Python 3 中扩展 datetime.date?
- python - 使用 Selenium 选择自动完成列表 - 在访问另一个列表之前必须关闭一个列表
- html - 使用 DIV 在 bootstrap 中对齐和缩放图像
- sql - 可以使用什么功能来防范幻读异常,而不是使用 Serializable 隔离级别?
- java - Jackson 对象映射器为整数返回 0,为字符串返回 null
- http - 强制 Gitlab 在 Go 失败时重试 webhook
- html - 无法从 html 网站中的文件访问图像
- python - plt. 在子情节中仅适用于一个情节
- java - Fetch.Lazy 当你检索一个 List 和 Fetch.Eager 当你返回一个实体
- javascript - 从数组中删除项目时如何使用behaviorSubject