一个发布市政地区的航空或卫星图像的Twitter机器人
项目描述
Munibot
Munibot是一个友好的Twitter机器人,发布行政区域(通常是市政区域)的航空或卫星图像。
它采用模块化编写,因此可以通过实现配置文件轻松地针对不同的数据源进行定制。
它目前为以下Twitter账号提供服务
-
@munibot_es:西班牙所有市政区域,以随机顺序显示,基于来自PNOA IGN的基础航空正射影像。
-
@munibot_cat:加泰罗尼亚所有市政区域,以随机顺序显示,基于来自ICGC的基础航空正射影像。
-
@communebot:法国所有市镇,以随机顺序显示,基于来自IGN的基础航空正射影像。
以下是一个示例推文的样式
目录
用法
安装
Munibot可在PyPI上获取,并可以使用pip
进行安装。强烈建议在虚拟环境中安装。
python3 -m venv munibot
source munibot/bin/activate
pip install munibot
或者,可以使用pipx
pipx install munibot
Munibot使用Rasterio和Fiona,这需要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>",
]
你可以查看以下示例
- 西班牙和加泰罗尼亚的市镇:munibot_es
- 法国的市镇:communebot_fr
Twitter授权
使用Twitter API进行认证可能一开始会让人困惑,但遵循此指南后应该会清楚。
我们需要使用Twitter所说的OAuth 1.0a,更具体地说,是基于PIN的OAuth。
快速总结
- 您将注册一个Twitter 开发者账户
- 使用此账户,您将创建一个应用程序,该应用程序将用于与Twitter API交互。
- 实际的机器人账户将授权此应用程序并赋予写权限。
- munibot应用程序将代表机器人账户发布推文。
逐步设置(您需要确保munibot正在运行,如果尚未安装,请先安装)
-
在https://developer.twitter.com上注册开发者账户(您可以使用您的实际Twitter账户或创建一个单独的账户)
-
创建一个新项目,并在其中创建一个新应用程序
- 选择读和写权限
- 开启启用三脚OAuth认证设置
- 输入一个回调URL(随便什么都可以,我们不会使用它)
-
生成访问令牌和密钥,并在
munibot.ini
文件中的[twitter]
部分下输入它们[twitter] api_key=CHANGE_ME api_key_secret=CHANGE_ME
-
为您的机器人创建一个Twitter账户(例如
munibot_xyz
) -
运行以下命令
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:
-
按照提示操作,以机器人账户的身份登录并打开链接。您应该会看到一个要求您授权您在第二步中创建的应用程序的页面。一旦授权,您应该会看到一个大的验证码。在munibot命令提示符中输入它。
-
命令应该输出以下内容
Done, access tokens for profile <profile_name>: twitter_access_token=xxx twitter_access_token_secret=yyy
-
将上述令牌输入到
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
许可协议
项目详情
munibot-0.0.5.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 758678ec03a76878ad49b7140e4cd3228a05fc477afca11324915758f4433614 |
|
MD5 | 72c8c3eaa23e7c54cc4fbac90fe2b0da |
|
BLAKE2b-256 | 7e96416967f434034d71c67a367c78f999051cf687d45f6d75ddcb484348818c |