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机器人, 二进制发布, 信息聚合, 公共记录法监控, 关键词匹配, 媒体监控, 开源工具, 新闻抓取, 新闻监控, 社交媒体自动化, 自动化发布, 逆向工具