为了账号安全,请及时绑定邮箱和手机立即绑定

Tweepy 回复提及机器人

Tweepy 回复提及机器人

暮色呼如 2022-07-12 15:34:46
当我运行此脚本以使用 Tweepy 回复 Twitter 提及时,我不断收到错误 NameError: name 'create_api' is not defined 我不知道为什么。我在这里想念什么?任何帮助将不胜感激。谢谢import tweepyimport loggingimport timedef 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 apidef 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_iddef 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()
查看完整描述

2 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

当你回复时,使用 tweet.id_str 而不是 tweet.id



查看完整回答
反对 回复 2022-07-12
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

似乎您的大多数错误都来自不正确的缩进。这是我修复缩进问题的代码版本。


我明白了,因为使用库NameError: name 'logger' is not defined的正确方法是使用而不是. 这似乎是一个小错字。logginglogging.xlogger


修复该问题后,我得到了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.'}]


查看完整回答
反对 回复 2022-07-12
  • 2 回答
  • 0 关注
  • 201 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号