跳转到主要内容

一个发布市政地区的航空或卫星图像的Twitter机器人

项目描述

Munibot

Tests

Munibot是一个友好的Twitter机器人,发布行政区域(通常是市政区域)的航空或卫星图像。

munis_cat_scaled

它采用模块化编写,因此可以通过实现配置文件轻松地针对不同的数据源进行定制。

它目前为以下Twitter账号提供服务

  • @munibot_es:西班牙所有市政区域,以随机顺序显示,基于来自PNOA IGN的基础航空正射影像。

  • @munibot_cat:加泰罗尼亚所有市政区域,以随机顺序显示,基于来自ICGC的基础航空正射影像。

  • @communebot:法国所有市镇,以随机顺序显示,基于来自IGN的基础航空正射影像。

以下是一个示例推文的样式

example_tweet

目录

用法

安装

Munibot可在PyPI上获取,并可以使用pip进行安装。强烈建议在虚拟环境中安装。

python3 -m venv munibot
source munibot/bin/activate

pip install munibot

或者,可以使用pipx

pipx install munibot

Munibot使用RasterioFiona,这需要GDAL。在Linux(以及macOS,尽管我还没有测试它)上通过pip安装的轮子包括了GDAL的二进制文件,可以满足munibot的需求,因此不需要单独安装。在其他操作系统上,你可能需要安装GDAL。

配置

Munibot使用ini文件进行配置。你可以通过运行以下命令来下载此存储库中包含的示例ini文件

curl https://raw.githubusercontent.com/amercader/munibot/main/munibot.sample.ini -o munibot.ini

wget https://raw.githubusercontent.com/amercader/munibot/main/munibot.sample.ini -O munibot.ini

仅凭自身,munibot无法做很多事情。你需要安装现有的配置文件,或者编写自己的配置文件

要安装配置文件,只需使用pip安装其Python包

pip install munibot-es

运行

Munibot安装后,你应该可以运行

munibot --help

Munibot假设配置ini文件位于运行命令的同一文件夹中(并命名为“munibot.ini”)。如果不是这种情况,你可以通过--config-c参数传递配置文件的位置

munibot -c /path/to/munibot.ini

如果至少有一个配置文件可用,并且所有必要的授权令牌都包含在ini文件中(参见Twitter授权),只需运行以下命令即可发送新的推文

munibot tweet <profile-name>

如果你只想创建图像而不发送推文,请使用create命令

munibot create <profile-name>

部署

运行munibot不需要太多,只需一个能够运行Python >= 3.6的系统。一旦安装,你可能希望定期安排发送推文。Linux和macOS上的一种简单方法是cron。以下是一个示例配置,你可以根据自己的喜好和本地路径进行调整(它假设munibot安装在/home/user/munibot中的虚拟环境中)

# Tweet an image every 8 hours (~3 times a day)
0 */8 * * * /home/user/munibot/bin/munibot --c /home/user/munibot/munibot.ini tweet cat >> /home/user/out/cat/munibot_cat.log 2>&1

你可以在munibot ini配置文件中调整日志级别。

编写您自己的配置文件

Munibot旨在易于定制到不同的数据源,以便为不同的机器人账户供电。这是通过配置文件类来完成的。配置文件实现了一些强制性和可选属性和方法,提供生成推文所需的不同输入。munibot负责常见的功能,如生成最终图像和发送推文。

要查看你的配置文件应实现的实际方法,请查看munibot/profiles/base.py中的BaseProfile类。以下是一个快速概述,你应该提供什么

  • 特定行政单元边界的几何形状(给定一个id)。这可以从任何可以提供类似GeoJSON的Python字典的地方获得:实际的GeoJSON文件、PostGIS数据库或WFS服务。
  • 覆盖行政单元范围的基本图像(航空摄影或卫星图像)。WMS服务对此非常适用,因为它们允许检索任意范围和大小的图像。
  • 推文中应伴随图像的文本。通常是单元的名称,以及一些用于参考的高级单元。
  • 定义下一个应被推文的单元的id的方法。
  • 可选地,推文中应添加的纬度和经度

一旦实现了你的配置文件类,你可以在你的包的setup.py文件中通过munibot_profiles入口点进行注册

"munibot_profiles": [
	"<profile_id>=<your_package>.profiles.:<YourProfileClass>",
]

你可以查看以下示例

Twitter授权

使用Twitter API进行认证可能一开始会让人困惑,但遵循此指南后应该会清楚。

我们需要使用Twitter所说的OAuth 1.0a,更具体地说,是基于PIN的OAuth

快速总结

  • 您将注册一个Twitter 开发者账户
  • 使用此账户,您将创建一个应用程序,该应用程序将用于与Twitter API交互。
  • 实际的机器人账户将授权此应用程序并赋予写权限。
  • munibot应用程序将代表机器人账户发布推文。

逐步设置(您需要确保munibot正在运行,如果尚未安装,请先安装

  1. https://developer.twitter.com上注册开发者账户(您可以使用您的实际Twitter账户或创建一个单独的账户)

  2. 创建一个新项目,并在其中创建一个新应用程序

    • 选择读和写权限
    • 开启启用三脚OAuth认证设置
    • 输入一个回调URL(随便什么都可以,我们不会使用它)
  3. 生成访问令牌和密钥,并在munibot.ini文件中的[twitter]部分下输入它们

    [twitter]
    api_key=CHANGE_ME
    api_key_secret=CHANGE_ME
    
  4. 为您的机器人创建一个Twitter账户(例如munibot_xyz

  5. 运行以下命令

    munibot tokens <profile_name>
    

    您应该会看到一个类似的消息

     Please visit the following URL logged in as the Twitter bot account for this profile, authorize the application and input the verification code shown.
    
     https://api.twitter.com/oauth/authorize?oauth_token=XXX
    
     Verification code:
    
  6. 按照提示操作,以机器人账户的身份登录并打开链接。您应该会看到一个要求您授权您在第二步中创建的应用程序的页面。一旦授权,您应该会看到一个大的验证码。在munibot命令提示符中输入它。

    Verification code

  7. 命令应该输出以下内容

     Done, access tokens for profile <profile_name>:
    
     twitter_access_token=xxx
     twitter_access_token_secret=yyy
    
  8. 将上述令牌输入到munibot.ini文件的相关配置文件部分

     [profile:<profile_name>]
     twitter_access_token=xxx
     twitter_access_token_secret=yyy
    

完成!从现在起,munibot应该能够代表机器人账户发布推文。您可以通过运行munibot tweet <profile_name>来尝试它。

开发安装

克隆仓库并安装依赖项

git clone https://github.com/amercader/munibot.git
pip install -r requirements.txt
pip install -r dev-requirements.txt

要运行测试

pytest

带有覆盖率

pytest -v --cov=munibot --cov-report term-missing

许可协议

MIT

项目详情


下载文件

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

源分发

munibot-0.0.5.tar.gz (14.8 kB 查看哈希值)

上传时间

支持者