【问题标题】:Creating a twitter thread on tweepy not working在 tweepy 上创建 Twitter 线程不起作用
【发布时间】:2021-12-08 18:16:20
【问题描述】:

这是我在这里的第一个问题,所以如果您需要我添加任何内容,请告诉我。

我在 Twitter 上有一个使用 tweepy 的机器人,它可以在推特上发布书中的短语。当我有一个少于 280 个字符的短语时,我会在推特上发布它。如果我的短语有超过 280 个字符,我有一个方法可以将超过 280 个字符的短语分解成一个 list 的“tweetable”“subphrases”。

所以,我想用该列表创建一个推特线程,这样该短语将继续通过每条回复前一条推文的方式形成。

#tweet_list is the broke down phrase

home = api.user_timeline(user_id = "myuser", count = 50, tweet_mode="extended")
first_tweet = True

for i in range(len(tweet_list)):
            if first_tweet == True:
                tweet = tweet_list[0]
                api.update_status(status=tweet)
                first_tweet = False
                time.sleep(30)

            else:
                tweet = tweet_list[i]
                last_tweeted = home[0] #gets the latest tweet from my account
                api.update_status(status=tweet, in_reply_to_status_id=last_tweeted.id, auto_populate_reply_metadata=True)
                time.sleep(30)

我的想法是,我会迭代 tweet_list,首先发布短语的第一部分,然后继续执行代码的下一部分,在那里我将获取最新的推文并回复它。我不知道这是否是最好的解决方案,可能不是,因为 Tweepy 正在返回这个错误:

tweepy.error.TweepError: [{'code': 187, 'message': 'Status is a duplicate.'}]

如果我尝试发布

提前致谢!

【问题讨论】:

    标签: python twitter tweepy


    【解决方案1】:

    我就是这样做的。 我做了一个函数来将文本分成块。

    def devide_post(message):
        if len(message) > 240:
            parts = math.ceil(len(message) / 240)
            message = message.split()
    
            messagelength = math.ceil(len(message) / parts)
            chunks = [
                message[i : i + messagelength]
                for i in range(0, len(message), messagelength)
            ]
            message_chunks = []
            for i, j in enumerate(chunks):
                message_chunks.append(" ".join(j).strip() + f" {i+1}/{len(chunks)}")
            return message_chunks
        else:
            return [message]
    

    这会将您的消息分成消息列表。如果该块中有 4 条推文,它还会在“1/4”末尾添加一个计数器。如果需要,您可以删除此部分。

    然后我像这样发布我的推文:

    message = "my messages"
    previous_message = None
    for i in devide_post(message):
        previous_message = post_tweet(i, previous_message).id
    

    编辑:这是我的 post_tweet 函数:

    def post_tweet(message, reply=None):
        return api.update_status(message, reply)
    

    【讨论】:

    • 谢谢@Bendik!我将文本分成块的功能已经在起作用,但是您的解决方案也很棒。我的问题更多是关于回复部分,你能告诉我你是如何定义previous_message 方法的吗?谢谢!
    • prevoius_message 只是设置为帖子的 id。所以首先我将 previous_message 设置为 None。所以第一条消息就像post_tweet(message, None) 一样发布在我将previous_message 设置为我刚刚发布的帖子的同一行上。然后下一次迭代发布下一条消息和上一条消息的 id。 post_tweet(new_message, id_of_previous_post 不知道这样是否更清楚
    猜你喜欢
    • 2021-02-13
    • 2020-09-29
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 2018-08-20
    相关资源
    最近更新 更多