搜寻最新的内容,而不是最旧的内容

时间:2019-08-31 22:01:14

标签: python twitter bots tweepy

今天,我写了一个推特机器人,用文件夹中的随机图像答复提到它的任何人。

这里的问题是我是python的新手,我根本不知道如何使它成为函数。当我开始运行它时,该机器人开始答复其他用户的所有提及(我使用的是朋友给我的旧帐户),即使它正在运行,这也不是我想要的,但这并不是我想要的。

该机器人会从一开始就答复所有提及,并且直到所有这些答复都答复后它才会停止(该机器人现在已关闭,我不想惹恼任何人)

我怎样才能只回复最新的提及而不是最初的提及?

代码如下:

import tweepy
import logging
from config import create_api
import time
import os
import random
from datetime import datetime

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger()

api = create_api()

imagePath = random.choice(os.listdir("images/"))

while True:
    for tweet in tweepy.Cursor(api.mentions_timeline).items():
        try:
            imagePath = random.choice(os.listdir("images/"))
            tweetId = tweet.user.id
            username = tweet.user.screen_name
            api.update_with_media('images/' + imagePath, "@" + username + " ", in_reply_to_status_id=tweet.id)
            print('Replying to ' + username + 'with ' + imagePath)

        except tweepy.TweepError as e:
            print(e.reason)
        except StopIteration:
            break
    time.sleep(12)

谢谢。

1 个答案:

答案 0 :(得分:1)

我目前无法测试此代码,但这应该可以工作。

而不是遍历每条推文,它会将tweepy.Cursor返回的iterator变成一个列表,然后只获取该列表中的最后一项。

api = create_api()

imagePath = random.choice(os.listdir("images/"))

while True:
    tweet_iterator = tweepy.Cursor(api.mentions_timeline).items()
    latest_tweet = list(tweet_iterator)[-1]
    try:
        imagePath = random.choice(os.listdir("images/"))
        tweetId = latest_tweet.user.id
        username = latest_tweet.user.screen_name
        api.update_with_media('images/' + imagePath, "@" + username + " ", in_reply_to_status_id=latest_tweet.id)
        print('Replying to ' + username + 'with ' + imagePath)

    except tweepy.TweepError as e:
        print(e.reason)
    except StopIteration:
        break
    time.sleep(12)

您还希望跟踪您上次回复的用户,因此,您不只是一遍又一遍地向同一人发送垃圾邮件。

这不是最有效的方法,但应该足够容易理解:

latest_user_id = None
while True:
    # Rest of the code
    try:
        if latest_user_id == latest_tweet.user.id:
            # don't do anything
        else:
           latest_user_id = latest_tweet.user.id
           # the rest of your code