可配置的机器人,回复提及并将消息发布到Twitter

twitterbot的Python项目详细描述


Build statusCoverage statusLatest PyPI versionSupported Python versionsNumber of PyPI downloads

易于使用的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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法从组合框中选择值。需要JS替代方案   打印带有规范问题的Java打印程序?   使用Xmodem传输文件内容时的附加ASCII字符的java传输   java JAXB通过socket和流读取器块   java“错误:在类Grad中找不到Main方法,请将Main方法定义为:public static void Main(字符串[]args)”   如何在Java中将图像从彩色转换为黑白(灰度)   java如何使用Google云连接服务器发送上游GCM消息   JAVA中的JSON文件字段交叉点   什么是“搜索:{…}”/Java中正式使用的“中断搜索”语法?   由于明显的类路径冲突导致java ToDiscoverable强制转换错误?   java可以成为一种语言。类文件不能添加到URLClassLoader的urlpath   Android设备上会话管理的java最佳实践   Java8Java上的Google应用程序引擎。开发服务器上的时间不可用?   java Derby数据库导出为单个文件?   java如何让jmeter根据访问日志行中的时间戳进行日志重放   访问EJB分离接口时的java IllegalAccessException   java使用JsonPath在不知道密钥的情况下提取值   java将文件保存到Jersey API中的服务器应用程序目录   jsoup中的java Http异常   java有没有错误?