python - 防止 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')
解决方案
很酷的项目:)
如果没有关于您正在抓取的网站的更多上下文,我无法评论您的数据源是否为其帖子分配了某种唯一标识符 - 这可以是合成的东西,例如 ID # 甚至时间戳。
如果您的源帖子确实有 ID,那么您可以在每次发布推文时将该 ID 存储在某种数据库或文件中。
然后,当您的爬虫再次运行时,它可以检查其 ID 列表以防止重复。
如果您的数据源没有在其帖子中发布时间戳或其他 ID,我建议编写一个函数来获取您潜在推文的文本,将其传递给哈希函数,并根据您的文件/数据库检查哈希值过去的哈希值.
这是一个关于使用 MD5 哈希函数生成 MD5 摘要(哈希)字符串的超级简单教程,hashlib
您应该能够轻松比较/存储:
https ://www.geeksforgeeks.org/md5-hash-python/
推荐阅读
- node.js - 如何将 Nuxt.js 部署到 Elastic Beanstalk?
- python - 子模板也可以在 django 中使用子模板吗?
- reactjs - 成功登录后,aws-amplify 不保留会话
- vue.js - 使用 Vuelidate 从父组件验证子组件
- php - 使用 SQL 插入 PHP 进行分页中的多个条件
- angular - 该请求缺少身份验证密钥(FCM 令牌)。请参阅 FCM 文档的“身份验证”部分
- google-apps-script - 如何在没有用户交互的情况下设置从某个时间开始的时间控制触发器?
- javascript - Zapier中的分页
- dll - 如何使用 metabot 在任何地方自动更新 DLL
- python - tkinter 空白画布底部