跳转到主要内容

监控RSS源中网页的变化

项目描述

diffengine 是一个用于监视RSS源以查看故事内容何时发生变化的实用程序。当发现新内容时,会在互联网档案馆保存快照,并为发送到社交媒体生成差异。希望它能帮助人们关注网络新闻的塑造方式。它还创建了一个随时间变化的变化数据库,可用于研究目的。

diffengine 受益于 NYTDiffNewsDiffs 的启发,它们 几乎 做了我们想要的事情。《NYTdiff》能够创建可展示的差异图像并将它们推送到推文,但它是为特定于《纽约时报》API而设计的。NewsDiffs 为监视多个网站(华盛顿邮报、纽约时报、CNN、BBC等)的变化提供了一个全面的框架,但您需要是一名程序员才能为要监视的网站添加 解析模块。它也是一个完整的网站,需要一些承诺来安装和运行。

借助 feedparser,diffengine 采用不同的方法,通过与任何发布变化RSS源的网站进行合作。这包括许多新闻机构,但也包括个人博客和组织网站,它们发布定期的更新。此外,使用 readability 模块,diffengine 能够自动提取页面的主要内容,而无需进行特殊的解析来删除模板材料。与NYTDiff一样,diffengine 不再创建另一个供人们监视的网站,而是将更新推送到人们已经存在的社交媒体,同时构建一个可用于研究目的的本地差异数据库。

安装

  1. 安装 GeckoDriver
  2. 安装 Python 3
  3. pip3 install --process-dependency-links diffengine

运行

为了运行 diffengine,您需要选择一个目录位置,其中可以存储 diffengine 配置、数据库和差异。例如,我在我的主目录中有一个目录,但您可以使用任何位置,只要您能写入它即可。

首次运行 diffengine 时,它会提示您输入要监控的 RSS 或 Atom feed URL,并将与 Twitter 进行认证。

% diffengine /home/ed/.diffengine 

What RSS/Atom feed would you like to monitor? https://inkdroid.org/feed.xml

Would you like to set up tweeting edits? [Y/n] Y

Go to https://apps.twitter.com and create an application.

What is the consumer key? <TWITTER_APP_KEY>

What is the consumer secret? <TWITTER_APP_SECRET>

Log in to https://twitter.com as the user you want to tweet as and hit enter.

Visit https://api.twitter.com/oauth/authorize?oauth_token=NRW9BQAAAAAAyqBnAAXXYYlCL8g

What is your PIN: 8675309

Saved your configuration in /home/ed/.diffengine/config.yaml

Fetching initial set of entries.

Done!

之后,您只需将 diffengine 添加到您的 crontab 中,使其定期运行,或者如果您愿意,也可以根据您自己的间隔手动运行。以下是我的 crontab,每 30 分钟运行一次以查找新内容。

0,30 * * * * /usr/local/bin/diffengine /home/ed/.diffengine

您可以在任何时候检查您的配置文件,并根据需要添加/删除订阅源。这是存储在您选择的存储目录中的 config.yaml 文件,在我的例子中是 /home/ed/.diffengine/config.yaml

日志可以在存储目录中的 diffengine.log 文件中找到,例如 /home/ed/.diffengine/diffengine.log

示例

查看 Ryan Baumann 的 "diffengine" Twitter 列表,以获取已知 diffengine Twitter 账户的列表。

多个账户及订阅源实现示例

如果您要设置多个账户,并且可能需要为每个账户设置多个订阅源,为每个账户设置一个目录可能很有帮助。例如

  • 多伦多太阳 /home/nruest/.torontosun
  • 多伦多之星 /home/nruest/.torontostar
  • 环球邮报 /home/nruest/.globemail
  • Canadaland /home/nruest/.canadaland
  • CBC /home/nruest/.cbc

然后您将为每个账户配置一个 cron 条目

0,15,30,45 * * * * /usr/bin/flock -xn /tmp/globemail.lock -c "/usr/local/bin/diffengine /home/nruest/.globemail"
0,15,30,45 * * * * /usr/bin/flock -xn /tmp/torontosun.lock -c "/usr/local/bin/diffengine /home/nruest/.torontosun"
0,15,30,45 * * * * /usr/bin/flock -xn /tmp/cbc.lock -c "/usr/local/bin/diffengine /home/nruest/.cbc"
0,15,30,45 * * * * /usr/bin/flock -xn /tmp/lapresse.lock -c "/usr/local/bin/diffengine /home/nruest/.lapresse"
0,15,30,45 * * * * /usr/bin/flock -xn /tmp/calgaryherald.lock -c "/usr/local/bin/diffengine /home/nruest/.calgaryherald"

如果一个账户有多个订阅源,您可以将 config.yml 配置如下

- name: The Globe and Mail - Report on Business
  twitter:
    access_token: ACCESS_TOKEN
    access_token_secret: ACCESS_TOKEN_SECRET
  url: http://www.theglobeandmail.com/report-on-business/?service=rss
- name: The Globe and Mail - Opinion
  twitter:
    access_token: ACCESS_TOKEN
    access_token_secret: ACCESS_TOKEN_SECRET
  url: http://www.theglobeandmail.com/opinion/?service=rss
- name: The Globe and Mail - News
  twitter:
    access_token: ACCESS_TOKEN
    access_token_secret: ACCESS_TOKEN_SECRET
  url: http://www.theglobeandmail.com/news/?service=rss
twitter:
  consumer_key: CONSUMER_KEY
  consumer_secret: CONSUMER_SECRET

开发

Build Status

以下是如何使用 pipenv 开始对 diffengine 进行开发的步骤

% git clone https://github.com/docnow/diffengine 
% cd diffengine
% pipenv install
% pytest
============================= test session starts ==============================
platform linux -- Python 3.5.2, pytest-3.0.5, py-1.4.32, pluggy-0.4.0
rootdir: /home/ed/Projects/diffengine, inifile:
collected 5 items

test_diffengine.py .....

=========================== 5 passed in 8.09 seconds ===========================

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

diffengine-0.2.7.tar.gz (11.6 kB 查看哈希值)

上传时间

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面