我制作了一个Twitter机器人,每当Lil Uzi Vert或Playboi Carti发推文时,它都应发布在其subreddit上。我遇到的问题是,它在两个子Reddit上一直在散布Lil Uzi Vert的最后一条推文。因此,我也被禁止了。
如果我尝试仅关注我的Twitter帐户,那么它会起作用。
发现了问题:每当有人喜欢或转发其推文时,它将被视为另一个新状态,因此将其发布在Reddit上。 (不管是哪个帖子,它都可以更老)。仅当其中之一发推文或回复时,我如何才能使它起作用?
import praw
import tweepy
def submit(status):
r = praw.Reddit(
client_id="",
client_secret="",
username="",
password="",
user_agent=""
)
subreddit = r.subreddit('playboicarti')
subreddit.submit("new tweet", status)
subreddit = r.subreddit('liluzivert')
subreddit.submit("new tweet", status)
# Twitter part
class MyStreamListener(tweepy.StreamListener):
def __init__(self, api):
self.api = api
def on_status(self, status):
status = f"https://twitter.com/user/status/{status.id}\nHe said: {status.text}"
submit(status)
def on_error(self, status):
print("Error detected" + str(status))
def twitter():
# Authenticate to Twitter
auth = tweepy.OAuthHandler("", "")
auth.set_access_token("",
"")
# Create API object
api = tweepy.API(auth, wait_on_rate_limit=True,
wait_on_rate_limit_notify=True)
tweets_listener = MyStreamListener(api)
stream = tweepy.Stream(api.auth, tweets_listener)
stream.filter(follow=["101263750", "1599608046"])
if __name__ == "__main__":
twitter()
答案 0 :(得分:0)
据我所知,Tweepy不支持过滤掉转发。
您可以使用python-twitter的GetUserTimeline(),该关键字具有布尔关键字参数include_rts
。
现在唯一的问题是python-twitter没有流侦听器设置,因此您必须使用循环和time.sleep()
复制它,这样就不会超过速率限制。像这样:
import twitter
import time
api = twitter.Api(consumer_key='',
consumer_secret='',
access_token_key='',
access_token_secret='')
user_id = 101263750
while True:
try:
statuses = api.GetUserTimeline(user_id=user_id,include_rts=False,
since_id=max_id,trim_user=True)
for status in statuses:
print(status.text)
max_id = status.id
except NameError:
max_id = api.GetUserTimeline(user_id=user_id,include_rts=False,count=1,
trim_user=True)[0].id
time.sleep(30)
我让你适应reddit的工作。