使用tweepy转发最新推文

0 投票
1 回答
558 浏览
提问于 2025-04-19 12:01

我最近在玩一个叫做 tweepy 的 Python 模块,目的是创建一个推特机器人,让它自动转发我关注的几个特定账号的每一条推文。我按照模块的说明文档操作,成功地转发了所有这些账号的推文。不过,大家可能知道,有些账号发推的频率没有那么高,我不想重复转发同一条推文。我在文档中没有找到关于 '获取最新推文' 的明确解决方案,所以我想出了一个方法:把 推文 ID 和账号 ID 存储在一个 字典 中,作为 键值对。在转发之前,我会检查一下 ID 是否匹配。如果匹配,我就跳过这条推文。

这样做算是个好办法吗?还是我忽略了更简单的方法,应该再看看文档?

1 个回答

0

我有一段代码可以做到这一点,但其实没那么简单。在我的情况下,人们可能会转发别人的推文,而且还可能稍微修改一下内容。所以我需要“看”一下这条推文是不是同一个主题。

我通过解析推文来实现这个功能,去掉一些常见的词(比如“a”、“the”、“un”等),提取出主要的词汇。然后,正如你所说的,我把这些词存储在一个变量里。我的选择是使用pickle和一个先进先出(FIFO)的系统。所以,当有新的推文过来的时候,我会把最相关的词和一个相关词的列表进行对比,允许有一个词的偏差,只有在这种情况下,我才决定是否转发这条推文。实际上,我是重新发这条推文,而不是简单地转发。如果你只是转发,可能只需要存储推文的ID就可以了。但正如我所说的,要小心你的关注者可能会发相同的内容,而它们的ID会不同。

--- FIFO ---

class Fifo:

    def __init__(self, max_limit):
        self.data = [[], []]
        self.max_limit = max_limit

    def append(self, value):
        self.data[1].append(value)
        if self.max_limit > 0:
            if len(self.data[0]) + len(self.data[1]) > self.max_limit:
                return self.pop()

    def pop(self):
        if not self.data[0]:
            self.data.reverse()
            self.data[0].reverse()
        return self.data[0].pop()

    def __len__(self):
        return len(self.data[0]) + len(self.data[1])

    def tolist(self):
        temp = (self.data[0])[:]
        temp.reverse()
        return temp + self.data[1]

撰写回答