今天,我写了一个推特机器人,用文件夹中的随机图像答复提到它的任何人。
这里的问题是我是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)
谢谢。
答案 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