Twitter机器人问题

问题描述 投票:0回答:1

我做了一个推特机器人,每次Lil Uzi Vert或Playboi Carti发推特时,它都会在他们的subreddit上发布。我的问题是,它一直在两个subreddits上发送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()
python python-3.x twitter reddit
1个回答
0
投票

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

你可以使用 python-twitter's 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上做的事情。

© www.soinside.com 2019 - 2024. All rights reserved.