簡體   English   中英

Tweepy 回復提及機器人

[英]Tweepy reply to mentions bot

當我運行此腳本以使用 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.'}]

當你回復時,使用 tweet.id_str 而不是 tweet.id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM