可配置的机器人,回复提及并将消息发布到Twitter
twitterbot的Python项目详细描述
易于使用的twitterbot,可以发布新消息和回复提及的内容。 建立在流行的twitter包上。请阅读Twitter Automation rules and best practices在设置机器人之前。
功能
- 您可以使用twitterbot:
- 发布新消息。
- 回复任何twitter提到的消息。
安装
您可以使用以下命令从pypi获得twitterbot:
pip install twitterbot
开发版本可以安装:
pip install -e git://github.com/jessamynsmith/twitterbot.git#egg=twitterbot
如果您是在本地开发,则可以从 项目目录:
python setup.py.install
用法
快速入门
默认情况下,设置由环境变量填充。身份验证变量 是必需的,可以是obtained from your Twitter account。建议您阅读 在建立机器人之前,twitter的Automation rules and best practices。
- Twitter消费者键
- Twitter消费者的秘密
- twitter_oauth_secret
- twitter_oauth_令牌
您可以选择设置以下环境变量:
- Twitter消息提供商
- 提供要发布的消息。默认为“Messages.HelloWorldMessageProvider”, 一个简单的提供者,总是返回“hello world!“
- 自ID提供程序之后的Twitter
- 为sinu id提供存储空间。twitter使用sinfile存储上次检索到的sinu id。 默认使用文件系统('../.since_id.txt')。您可以将文件中的值设置为 开始处理特定邮件ID处的提及。
- 推特干燥运行
- 如果设置为true,消息将被记录,而不是实际发布到Twitter。
引用不足的bot项目是使用twitterbot库构建 部署到heroku并运行twitter帐户@the_underquoted的bot。
设置自定义消息提供程序
通过设置以下环境变量,您可以插入自己的消息提供程序:
export TWITTER_MESSAGE_PROVIDER='bot.messages.MyMessageProvider'
然后需要创建一个bot.messages模块,其中 实现create()方法的MyMessageProvider类, 例如
class MyMessageProvider(object): def create(self, mention, max_message_length): """ Create a message :param mention: JSON object containing mention details from Twitter :param max_message_length: Maximum allowable length for created message :return: a message """ return "This is my message!"
设置自定义自ID提供程序
默认设置是使用filesystemsinidprovider。使用文件系统将无法正常工作 在heroku或任何其他带有临时文件系统的主机上。如果你不能依赖文件系统, 必须指定其他SinceidProvider。
twitterbot附带了redis提供商。默认情况下,本地主机将用于redis。使用它, 必须先在系统上安装redis。我建议在OSX上使用自制软件:
brew install redis brew services start redis
一旦安装了redis或将其作为服务提供,就可以安装python redis包并设置 用于配置提供程序的环境变量。
pip install redis export TWITTER_SINCE_ID_PROVIDER='twitter_bot.since_id.redis_provider.RedisSinceIdProvider' export REDIS_URL=redis://:@somehost:someport # Optional, defaults to localhost
通过设置以下环境变量,可以插入自定义的自ID提供程序:
export TWITTER_SINCE_ID_PROVIDER='bot.since_id.MySinceIdProvider'
然后您需要创建一个bot.since_id模块和一个mysincedProvider类 实现了get()、set()和delete()方法, 例如
# since_id.py import os from twitter_bot import SettingsError from twitter_bot import BaseSinceIdProvider class MySinceIdProvider(BaseSinceIdProvider): def __init__(self, source=None): if not source: source = os.environ.get('TWITTER_SINCE_ID_SOURCE') if not source: raise SettingsError("You must supply source or set the TWITTER_SINCE_ID_SOURCE " "environment variable.") self.source = source def get(self): return self.source.get('since_id') def set(self, since_id): return self.source.set('since_id', since_id) def delete(self): return self.source.delete('since_id')
覆盖设置
如果您需要对设置进行更多控制,可以将设置子类化:
from twitter_bot import Settings class MyBotSettings(Settings): def __init__(self): super(MyBotSettings, self).__init__() self.MESSAGE_PROVIDER = 'bot.messages.MyProvider'
自动启动机器人
要将bot作为cron作业或heroku调度程序任务运行,可以制作一个小脚本 使用提供的流道。如果您有自定义设置,请导入自己的设置类 而不是提供的设置。
#!/usr/bin/env python # runner.py import sys from twitter_bot import BotRunner, Settings if __name__ == '__main__': if len(sys.argv) != 2: print("You must specify a single command, either 'post_message' or 'reply_to_mentions'") result = 1 else: result = BotRunner().go(Settings(), sys.argv[1]) sys.exit(result)
然后按如下方式调用脚本:
$ ./runner.py post_message $ ./runner.py reply_to_mentions
开发
在github上派生项目,git克隆您的fork,例如:
git clone https://github.com/<username>/twitterbot.git
设置virtualenv:
mkvirtualenv twitterbot pip install -r requirements/package.txt -r requirements/test.txt
运行覆盖率为100%的测试并检查代码样式:
coverage run -m nose coverage report -m flake8
验证所有受支持的python版本:
^{p页r 16}$运行机器人程序:
$ ./bin/runner.py reply_to_mentions # Check twitter stream for mentions, and reply $ ./bin/runner.py post_message # Post a message to twitter
在本地验证项目
可以使用circleci cli和docker在本地验证circleci构建。
首先,安装Docker Desktop
安装Circleci CLI,例如在OSX上使用自制程序:
$ brew install circleci
然后,您可以在终端中运行此命令来验证它:
$ circleci config validate
一旦你知道你的配置是有效的,你可以测试它。 cli允许您使用docker从桌面上的circleci运行单个作业:
$ circleci local execute --job build
有关详细信息,请参见[Circleci文档](https://circleci.com/docs/2.0/local-cli/#validate-a-circleci-config)