Python Tweepy回复提到的bot
当我运行这个脚本来回复Tweepy在Twitter上提到的内容时,我一直得到一个错误名称error:name'create_api'没有定义,我不知道为什么。我错过了什么?任何帮助都将不胜感激。多谢各位Python Tweepy回复提到的bot,python,tweepy,Python,Tweepy,当我运行这个脚本来回复Tweepy在Twitter上提到的内容时,我一直得到一个错误名称error:name'create_api'没有定义,我不知道为什么。我错过了什么?任何帮助都将不胜感激。多谢各位 import tweepy import logging import time def create_api(): consumer_key = 'xxxxx' consumer_secret = 'xxxxx' access_token = 'xxxx-xxxx'
import tweepy
import logging
import time
def create_api():
consumer_key = 'xxxxx'
consumer_secret = 'xxxxx'
access_token = 'xxxx-xxxx'
access_token_secret = 'xxxx'
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True,
wait_on_rate_limit_notify=True)
try:
api.verify_credentials()
except Exception as e:
logger.error("Error creating API", exc_info=True)
raise e
logger.info("API created")
return api
def check_mentions(api, keywords, since_id):
logger.info("Retrieving mentions")
new_since_id = since_id
for tweet in tweepy.Cursor(api.mentions_timeline,
since_id=since_id).items():
new_since_id = max(tweet.id, new_since_id)
if tweet.in_reply_to_status_id is not None:
continue
if any(keyword in tweet.text.lower() for keyword in keywords):
logger.info(f"Answering to {tweet.user.name}")
if not tweet.user.following:
tweet.user.follow()
api.update_status(
status="Please reach us via DM",
in_reply_to_status_id=tweet.id,
)
return new_since_id
def main():
api = create_api()
since_id = 1
while True:
since_id = check_mentions(api, ["help", "support"], since_id)
logger.info("Waiting...")
time.sleep(60)
if __name__ == "__main__":
main()
你的大多数错误似乎都是由于缩进不当造成的。这是我修复缩进问题的代码版本 我得到
name错误:没有定义名称“logger”
,因为使用logging
库的正确方法是使用logging.x
而不是logger
。这似乎是一个小错误
修复后,我得到tweepy.error.tweepyerror:[{'code':89,'message':'Invalid or expired token.}]
,这是预期的,因为我没有有效的令牌
import tweepy
import logging
import time
def create_api():
consumer_key = 'xxxxx'
consumer_secret = 'xxxxx'
access_token = 'xxxx-xxxx'
access_token_secret = 'xxxx'
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True,
wait_on_rate_limit_notify=True)
try:
api.verify_credentials()
except Exception as e:
logging.error("Error creating API", exc_info=True)
raise e
logging.info("API created")
return api
def check_mentions(api, keywords, since_id):
logging.info("Retrieving mentions")
new_since_id = since_id
for tweet in tweepy.Cursor(api.mentions_timeline,
since_id=since_id).items():
new_since_id = max(tweet.id, new_since_id)
if tweet.in_reply_to_status_id is not None:
continue
if any(keyword in tweet.text.lower() for keyword in keywords):
logging.info(f"Answering to {tweet.user.name}")
if not tweet.user.following:
tweet.user.follow()
api.update_status(
status="Please reach us via DM",
in_reply_to_status_id=tweet.id,
)
return new_since_id
def main():
api = create_api()
since_id = 1
while True:
since_id = check_mentions(api, ["help", "support"], since_id)
logging.info("Waiting...")
time.sleep(60)
if __name__ == "__main__":
main()
输出:(显示日志记录正在捕获错误)
ERROR:root:创建API时出错
回溯(最近一次呼叫最后一次):
创建api中第16行的文件“\stack15.py”
api.verify_凭证()
文件“C:\Users\xxxxxxx\source\repos\PyProjects\py\u 3.7\lib\site packages\tweepy\api.py”,第605行,在verify\u凭证中
)(**卡丁车)
文件“C:\Users\xxxxxxx\source\repos\PyProjects\py\u 3.7\lib\site packages\tweepy\binder.py”,第250行,在调用中
返回方法execute()
文件“C:\Users\xxxxxxx\source\repos\PyProjects\py\u 3.7\lib\site packages\tweepy\binder.py”,第233行,在execute中
raise TweepError(错误消息,响应,api代码=api错误代码)
tweepy.error.TweepError:[{'code':89,'message':'Invalid or expired token.}]
回溯(最近一次呼叫最后一次):
文件“\stack15.py”,第52行,在
main()
文件“\stack15.py”,第44行,主
api=创建_api()
文件“\stack15.py”,创建api中的第19行
提高e
创建api中第16行的文件“\stack15.py”
api.verify_凭证()
文件“C:\Users\xxxxxxx\source\repos\PyProjects\py\u 3.7\lib\site packages\tweepy\api.py”,第605行,在verify\u凭证中
)(**卡丁车)
文件“C:\Users\xxxxxxx\source\repos\PyProjects\py\u 3.7\lib\site packages\tweepy\binder.py”,第250行,在调用中
返回方法execute()
文件“C:\Users\xxxxxxx\source\repos\PyProjects\py\u 3.7\lib\site packages\tweepy\binder.py”,第233行,在execute中
raise TweepError(错误消息,响应,api代码=api错误代码)
tweepy.error.TweepError:[{'code':89,'message':'Invalid or expired token.}]
回复时,使用tweet.id\u str而不是tweet.id完整的回溯是什么?你有缩进问题,我无法复制。您的缩进格式不正确,在为自己解决了这些问题之后,我得到了错误tweepy.error.TweepError:[{'code':89,'message':'Invalid or expired token.}]
,这意味着我能够进入创建api()
函数。我也遇到了这个错误NameError:name'logger'没有定义
,您可能应该查看它。@lapirose您能告诉我您到底做了什么吗?因为我以为我做到了,现在我又犯了其他错误。谢谢您的回复。@Harmon758现在错误不同了,第17行例外情况除外,如e:^SyntaxError:无效的SyntaxIt!我有一个虚拟空间,我的IDE没有接收到。再次感谢!
ERROR:root:Error creating API
Traceback (most recent call last):
File ".\stack15.py", line 16, in create_api
api.verify_credentials()
File "C:\Users\xxxxxxx\source\repos\PyProjects\py_3.7\lib\site-packages\tweepy\api.py", line 605, in verify_credentials
)(**kargs)
File "C:\Users\xxxxxxx\source\repos\PyProjects\py_3.7\lib\site-packages\tweepy\binder.py", line 250, in _call
return method.execute()
File "C:\Users\xxxxxxx\source\repos\PyProjects\py_3.7\lib\site-packages\tweepy\binder.py", line 233, in execute
raise TweepError(error_msg, resp, api_code=api_error_code)
tweepy.error.TweepError: [{'code': 89, 'message': 'Invalid or expired token.'}]
Traceback (most recent call last):
File ".\stack15.py", line 52, in <module>
main()
File ".\stack15.py", line 44, in main
api = create_api()
File ".\stack15.py", line 19, in create_api
raise e
File ".\stack15.py", line 16, in create_api
api.verify_credentials()
File "C:\Users\xxxxxxx\source\repos\PyProjects\py_3.7\lib\site-packages\tweepy\api.py", line 605, in verify_credentials
)(**kargs)
File "C:\Users\xxxxxxx\source\repos\PyProjects\py_3.7\lib\site-packages\tweepy\binder.py", line 250, in _call
return method.execute()
File "C:\Users\xxxxxxx\source\repos\PyProjects\py_3.7\lib\site-packages\tweepy\binder.py", line 233, in execute
raise TweepError(error_msg, resp, api_code=api_error_code)
tweepy.error.TweepError: [{'code': 89, 'message': 'Invalid or expired token.'}]