首页 > 解决方案 > 防止 python twitter bot 发布重复的状态更新

问题描述

我现在只是将我的脚趾浸入 Python 中,并且我在一个项目中学习得最好(尽管效率不高)。我目前的项目是一个 twitter 机器人,它在我的管辖范围内抓取一个政府网站以获取最新的 COVID-19 病例数,并将它们发布到推特上,以构建这个很棒的教程

在功能上它正在工作,但我想对其进行优化,以便它仅在数据更新和新时发布。否则,它只是一个每天发布相同信息的帐户,而不是新闻帐户。

我认为 Twitter API 中不允许重复推文的内置规则会自动过滤掉旧信息。有时它确实有效,但规则不够严格 - 只要不经常这样做,该帐户似乎仍然可以发布重复内容。理想情况下,我想在我的代码中使其更加严格。它需要将新文本与上一条推文进行比较,并且仅在文本存在差异时才发推文。

谁能给我一些指导,看看这是否可行,以及如何最好地完成它?我正处于编码阶段,我不确定在搜索中使用哪些术语来找到解决方案。

这是当前的代码:

import sys
from config import CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET
import tweepy

import requests
from lxml import html
from threading import Timer

def create_tweet():
    response = requests.get('https://yukon.ca/en/case-counts-covid-19')
    doc = html.fromstring(response.content)
    A, B, C, D, E, F = doc.xpath('//table[@class="table"]//td[2]//text()')

    tweet = f'''Yukon COVID-19 cases count
Total people tested: {A}
Confirmed cases: {B}
Recovered cases: {C}
Deaths: {D}
Negative results: {E}
Pending results: {F}

Data from: https://yukon.ca/en/case-counts-covid-19
'''
    return tweet


if __name__ == '__main__':
    auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
    auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

    # Create API object
    api = tweepy.API(auth)

    try:
        api.verify_credentials()
        print('Authentication Successful')
    except:
        print('Error while authenticating API')
        sys.exit(1)

    tweet = create_tweet()
    api.update_status(tweet)
    print('Tweet successful')

标签: pythontwitterduplicatesbotstweepy

解决方案


很酷的项目:)

如果没有关于您正在抓取的网站的更多上下文,我无法评论您的数据源是否为其帖子分配了某种唯一标识符 - 这可以是合成的东西,例如 ID # 甚至时间戳。

如果您的源帖子确实有 ID,那么您可以在每次发布推文时将该 ID 存储在某种数据库或文件中。

然后,当您的爬虫再次运行时,它可以检查其 ID 列表以防止重复。

如果您的数据源没有在其帖子中发布时间戳或其他 ID,我建议编写一个函数来获取您潜在推文的文本,将其传递给哈希函数,并根据您的文件/数据库检查哈希值过去的哈希值.

这是一个关于使用 MD5 哈希函数生成 MD5 摘要(哈希)字符串的超级简单教程,hashlib您应该能够轻松比较/存储: https ://www.geeksforgeeks.org/md5-hash-python/


推荐阅读