我正在使用Tweepy的流媒体API来收听即将到来的活动的tweets。指定了一些关键字来监听和写入服务器(gearhost)上托管的数据库。在
但是,当在一段时间内没有tweet传入时,它将为下一条tweet显示此错误,并且无法写入我的数据库。在
pymysql.err.OperationalError: (2006, MySQL server has gone away(BrokenPipeError(32, 'Broken Pipe'))")
我已经找到了一些解决方案,比如:Correct way of keeping mysql connection,但似乎对我不起作用。它显示了以下错误:
AttributeError: 'NoneType' object has no attribute 'cursor'
我找到了另一个解决方案,但它说我应该使用连接池,但我是python新手,不知道连接池是如何工作的。在
有人能帮我吗?我的代码是:
import tweepy
from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
import re
import sys
import json
import pytz
from pytz import timezone
#connect to pymysql
import pymysql
conn = pymysql.connect(host='hosting',
user='username',
password='password',
db='database',
autocommit=True,
charset='utf8mb4',)
consumer_key = '******'
consumer_secret = '********'
access_token = '****-****'
access_token_secret = '*****'
KEYWORDS = ['singaporepoly','singapore poly', 'sp courses', 'sp open house',
'sp mcdonald', 'sp singapore', 'sp map', 'spoh18', 'sp cca', 'sp career', 'sp library',
'sp part time', 'sp starbucks', '#speye', '#singaporepoly','sp facilities', 'sp polite',
'sp memories','spgusto', 'sp engineering', 'sp campus','sp bowling', 'sp dmit','sp wifi',
'sp bowling','sp FC1', 'sp FC2', 'sp FC3', 'sp FC4', 'sp FC5', 'sp FC6', 'sp mae', 'sp eee',
'sp aircon', 'sp internet','sp mac', 'spdb', 'sp goodies','sp goodie','sp kfc', 'sp bridge',
'sp mrt', 'sp cls','sp sb','#spbizsch', 'sp jae','sp results','sp result','sp jpsae','sp dsa',
'sp interview', 'sp eat','sp student','sp camp','sp freshies','sp foc','sp pool','sp class',
'sp freshmen','sp floorball','sp sports','sp semester','sp cass','sp mass comm','sp information technology',
'sp event','sp dover','sp moberly','sp performance','spsdz','sp subway','sp chicken rice','sp mini wok',
'sp mala','sp koufu','sp mcdonalds','Singapore Polytechnic','sp student union','spsu']
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
sgtz = timezone('Asia/Singapore')
utc = pytz.timezone('UTC')
class StdOutListener(StreamListener):
def on_status(self, status):
# Printing to Terminal
if ('Singapore' == status.user.location) or ('Central Region, Singapore' == status.user.location) or ('North-East Region, Singapore' == status.user.location) or ('East Region, Singapore' == status.user.location) or ('West Region, Singapore' == status.user.location):
d = status.created_at
d_tz = utc.localize(d)
localtime = d_tz.astimezone(sgtz)
status_list = [localtime, status.author.screen_name, status.text]
print (status_list)
#write to database
cur = conn.cursor()
cur.execute("USE database")
cur.execute("INSERT INTO database.tweets_sp_sg(tweet_time_sp_sg,screen_name_sp_sg,tweets_sp_sg) values (%s,%s,%s)",(status_list))
def on_error(self, status_code):
print ('Encountered error with status code:', status_code)
return True
if __name__ == '__main__':
l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
while True:
stream = Stream(auth, l, timeout = None)
stream.filter(track = KEYWORDS, languages=['en'])
目前没有回答
相关问题 更多 >
编程相关推荐