freedomofpress/trackthenews
GitHub: freedomofpress/trackthenews
trackthenews是一个开源Python工具,用于监控RSS新闻源并自动发布匹配关键词的文章到Twitter,解决实时新闻追踪和自动化传播的需求。
Stars: 154 | Forks: 21
# 追踪新闻
`trackthenews` 是驱动 [@FOIAfeed](https://twitter.com/foiafeed) 的脚本,该 Twitter 机器人会监控新闻媒体,查找包含《信息自由法》(FOIA) 等公共记录法的报道,并发布指向匹配文章的链接和摘录。该底层软件可以跟踪任何RSS订阅源以查找任何关键词。
如果你想运行自己的 `trackthenews` 实例,可以下载并安装软件包,然后运行其内置配置过程。可使用 `pip` 安装:
我们目前针对 Python 3.11 进行测试,但它也可能适用于其他版本。
```
pip3 install trackthenews
```
或者克隆 GitHub 仓库并运行 `setup.py`:
```
python3 setup.py install
```
安装完成后,你可以在相应目录中运行以下命令来创建配置:
```
trackthenews --config
```
默认情况下,该脚本会将所有配置文件放置在你当前工作目录中一个名为 `ttnconfig` 的新文件夹中,但你也可以为其指定一个目录。
```
python3 trackthenews --config ~/foo/bar/path
```
该配置过程将创建必要的文件,并引导你完成用于匹配报道的 Twitter 机器人的设置。配置完成后,你需要使用文本编辑器将 `matchwords` 和 RSS 订阅源添加到它们各自的文件中。
RSS 订阅源和关键词文件的示例可在该项目的 GitHub 仓库中找到。RSS 订阅源文件是一个 JSON 对象数组,每个对象对应一个订阅源。每个对象需要一个 `url` 字段,并且还应有一个 `outlet` 字段。
所有设置完成后,你可以不带 `--config` 标志运行程序以检查是否有匹配的文章。
```
trackthenews
```
如果你指定了自定义安装目录,或者从其他目录(或 `cron` 作业)运行,则需要指定配置文件所在的目录。
```
trackthenews ~/foo/bar/path
```
设置,例如新帖子的背景颜色、字体和用户代理,都位于指定配置目录中的 `config.yaml` 文件里。
## 工作原理
该脚本的大部分内容围绕 `Article` 类展开。
* `Article` 是根据输入创建的。目前这些输入是存储在 `rssfeeds.json` 中的 RSS 订阅源,但在未来的版本中,其他输入将包括直接 URL、新闻 API、Twitter 订阅源或爬取的页面。
* 一系列 `Article` 方法随后会抓取并隔离每篇文章的内容(目前该清理工作使用 [Readability 的 Python 移植版](https://github.com/buriy/python-readability) 完成,但未来版本可能会纳入针对特定站点的解析),检查其是否适合发布,然后为发布推文准备图片。
* 最后,`Article` 发布自身。
所有文章都记录在 SQLite 数据库中。
### 高级功能:屏蔽列表
在某些情况下,你可能希望阻止某些文章或段落被发布,即使它们原本匹配。为此,请按照 `trackthenews/base_blocklist.py` 中的抽象基类模板实现一个 CustomBlocklist 类,并将其作为名为 `blocklist.py` 的文件放入你的 `ttnconfig` 目录中。
你可以在 `blocklist.py` 中导入 `bs4` 库以进行高级解析。
## 开发
### 快速开始
```
poetry env use 3.11 # Necessary if you have a different default python version
poetry install
poetry run trackthenews sample_project
# 按照设置脚本说明进行操作
cat sample_project/matchlist-sample.txt > sample_project/matchlist.txt
cat sample_project/rssfeeds-sample.json > sample_project/rssfeeds.json
poetry run trackthenews sample_project
```
### 详细说明
要开发 `trackthenews`,请克隆仓库并使用 [poetry][] 安装软件包,然后运行 CLI 工具:
```
# 确保您正在使用 Python 3.11
poetry env use 3.11
# 这将创建一个虚拟环境并安装 trackthenews 及其依赖项
poetry install --with=dev
# 这将运行设置脚本
poetry run trackthenews sample_project
```
当设置过程完成后,你的机器人配置将位于 `sample_project` 目录中。填写 `matchlist.txt`、`matchlist_case_sensitive.txt` 和 `rssfeeds.json` 文件,或从提供的示例中复制配置:
```
cat sample_project/matchlist-sample.txt > sample_project/matchlist.txt
cat sample_project/rssfeeds-sample.json > sample_project/rssfeeds.json
```
`matchlist_case_sensitive.txt` 是可选的,我们不提供示例。
现在运行机器人:
```
poetry run trackthenews sample_project
```
### 代码检查
我们检查所有代码是否符合 [black][]、[flake8][] 和 [isort][] 的标准。要在本地运行这些检查:
```
poetry run black --check . # To automatically fix issues, exclude --check flag
poetry run flake8
poetry run isort --check-only --diff . # To automatically fix issues, exclude --check-only and --diff flag
```
我们还提供以下 makefile 快捷方式来运行这些命令:
```
make black
make flake8
make isort
make black-fix # Automatically fix issues
make isort-fix # Automatically fix issues
make all # Run all three checks (check only, no fixes)
```
## 许可证
MIT许可证。
标签:RSS解析, Twitter机器人, 二进制发布, 信息聚合, 公共记录法监控, 关键词匹配, 媒体监控, 开源工具, 新闻抓取, 新闻监控, 社交媒体自动化, 自动化发布, 逆向工具