Twitter机器人问题

时间:2020-04-25 21:06:39

标签: python python-3.x twitter reddit

我制作了一个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()

1 个答案:

答案 0 :(得分:0)

据我所知,Tweepy不支持过滤掉转发。

您可以使用python-twitterGetUserTimeline(),该关键字具有布尔关键字参数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的工作。