【问题标题】:Twitter bot issueTwitter机器人问题
【发布时间】:2020-08-09 10:59:30
【问题描述】:

我制作了一个 Twitter 机器人,每次 Lil Uzi Vert 或 Playboi Carti 发推文时,它都应该在他们的 subreddit 上发布。我遇到的问题是,它不断在两个子版块上向 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()

【问题讨论】:

  • 当您在 MyStreamListener 类中调用 status 时,您会转到一个 subreddit 并以固定状态发布。然后,使用相同的固定状态,您更改为另一个 subreddit 并发布新帖子。你什么时候改变其他 subreddit 的状态?
  • @SergioR 我没有,因为我想在两个子版块上发布相同的内容。粉丝们都喜欢这两位艺术家

标签: python python-3.x twitter reddit


【解决方案1】:

据我所知,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 上所做的事情。

【讨论】:

  • 嘿,首先我要感谢你,我试过你说的,我测试了所有东西,但是当我发送一个状态时它不会做任何事情。我确实用我的改变了uid。问题是我认为状态循环中的状态。我猜它根本找不到任何状态。即使我确实发送了一条推文。
猜你喜欢
  • 1970-01-01
  • 2013-06-03
  • 2020-11-01
  • 2020-08-25
  • 2011-07-28
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多