python - Tweepy 回复提及机器人
问题描述
当我运行此脚本以使用 Tweepy 回复 Twitter 提及时,我不断收到错误 NameError: name 'create_api' is not defined 我不知道为什么。我在这里想念什么?任何帮助将不胜感激。谢谢
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()
解决方案
似乎您的大多数错误都来自不正确的缩进。这是我修复缩进问题的代码版本。
我明白了,因为使用库NameError: name 'logger' is not defined
的正确方法是使用而不是. 这似乎是一个小错字。logging
logging.x
logger
修复该问题后,我得到了tweepy.error.TweepError: [{'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: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.'}]
推荐阅读
- swift - SwiftUI - macOS 上的侧边栏大小调整
- flutter - 如何从 firestore 数据库渲染图像
- java - jooq 交易开枪 - 不能使用'returningResult()'?
- python - 计算缺失列 id 的列表
- javascript - JSON路径问题仅检查指定对象中的特定字符串
- prefect - Prefect docker agent 执行后无法更新流状态
- java - Spring Boot MongoDB SuperBuilder 继承
- java - Java 用下一步覆盖二维数组
- kubernetes - 在 k8s 集群中,我应该始终调用 Ingress Rule 还是 Node Port Service Name?
- python - 有没有办法从导出中未选择的不同列有条件地对 excel 表进行样式化?