AzureCertifiedBot
AzureCertifiedBot是一个用 Python 编写并部署在 Azure VM 上的Twitter 机器人,它会点赞和转发 #AzureCertified 标签!
源代码基于Miguel Garcia 的《如何使用 Tweepy 在 Python 中制作 Twitter 机器人》 。
这个机器人是在米格尔·加西亚的这篇精彩文章的帮助下制作的。
请随时查看Miguel 的文章,了解所有这些要求!
Tweepy 是一个开源的 Python 包,它提供了一种非常便捷的方式来使用 Python 访问 Twitter API。Tweepy 包含一系列类和方法,分别代表 Twitter 的模型和 API 端点,并透明地处理各种实现细节,例如:
数据编码和解码、
HTTP 请求、
结果分页
、OAuth 身份验证、
速率限制和
数据流。
如果您不使用 Tweepy,则需要处理与 HTTP 请求、数据序列化、身份验证和速率限制相关的底层细节。这既耗时又容易出错。而有了 Tweepy,您就可以专注于构建所需的功能。
以下是配置模块的源代码。它包含 create_api() 函数,该函数从环境变量中读取身份验证凭据并创建 Tweepy API 对象:
# tweepy-bots/bots/config.py
import tweepy
import logging
import os
logger = logging.getLogger()
def create_api():
consumer_key = os.getenv("CONSUMER_KEY")
consumer_secret = os.getenv("CONSUMER_SECRET")
access_token = os.getenv("ACCESS_TOKEN")
access_token_secret = os.getenv("ACCESS_TOKEN_SECRET")
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth, wait_on_rate_limit=True,
wait_on_rate_limit_notify=True)
try:
api.verify_credentials()
except Exception as e:
logger.error("Error creating API", exc_info=True)
raise e
logger.info("API created")
return api
这个机器人利用之前介绍过的 Tweepy 信息流,主动监控包含特定关键词的推文。对于每条推文,如果您不是推文作者,它会将推文标记为“已点赞”,然后转发。
你可以使用这个机器人为你的账号推送与你兴趣相关的内容。
机器人源代码
下方是该机器人的完整源代码。它使用一个信息流来过滤包含“#AzureCertified”一词的推文。信息流中的每条推文都会被标记为已点赞和已转发:
#!/usr/bin/env python
# tweepy-bots/bots/favretweet.py
import tweepy
import logging
from config import create_api
import json
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger()
class FavRetweetListener(tweepy.StreamListener):
def __init__(self, api):
self.api = api
self.me = api.me()
def on_status(self, tweet):
logger.info(f"Processing tweet id {tweet.id}")
if tweet.in_reply_to_status_id is not None or \
tweet.user.id == self.me.id:
# This tweet is a reply or I'm its author so, ignore it
return
if not tweet.favorited:
# Mark it as Liked, since we have not done it yet
try:
tweet.favorite()
except Exception as e:
logger.error("Error on fav", exc_info=True)
if not tweet.retweeted:
# Retweet, since we have not retweeted it yet
try:
tweet.retweet()
except Exception as e:
logger.error("Error on fav and retweet", exc_info=True)
def on_error(self, status):
logger.error(status)
def main(keywords):
api = create_api()
tweets_listener = FavRetweetListener(api)
stream = tweepy.Stream(api.auth, tweets_listener)
stream.filter(track=keywords, languages=["en"])
if __name__ == "__main__":
main(["#AzureCertified"])
要打包您的机器人或应用程序,您需要在项目根目录中创建一个 Dockerfile 文件。该文件包含一组用于创建包含您的应用程序的 Docker 镜像的指令。
您的项目结构应如下所示:
tweepy-bots/
│
├── bots/
│ ├── config.py
│ └── favretweet.py
│
├── requirements.txt
└── Dockerfile
您可以使用以下 Dockerfile 创建 Fav & Retweet 机器人的镜像。它以 Python:3.7-alpine 为基础镜像。我们选择此镜像作为基础镜像,因为它体积小巧,并且包含 Python 3.7 和 pip。此 Dockerfile 会将机器人代码和 requirements.txt 文件复制到镜像中。最后,使用 pip3 将依赖项安装到镜像中:
FROM python:3.7-alpine
COPY bots/config.py /bots/
COPY bots/favretweet.py /bots/
COPY requirements.txt /tmp
RUN pip3 install -r /tmp/requirements.txt
WORKDIR /bots
CMD ["python3", "favretweet.py"]
最后一行说明了使用此图像时必须运行的命令。
现在您可以使用以下命令构建镜像:
$ docker build . -t fav-retweet-bot
最后,您可以使用 docker run 命令来测试镜像,并将保存身份验证凭据的环境变量传递给它:
$ docker run -it -e CONSUMER_KEY="nMRNy54oWfdfssdfsV9AoNavy0I" \
-e CONSUMER_SECRET="olAL5VAgZLWNspsdajff757kmsPEwuxpvLCLSR08DMa4O" \
-e ACCESS_TOKEN="792518593-j7gWSqzQO31ju7Bfdsf7NlZeSENsuADGU9B90r" \
-e ACCESS_TOKEN_SECRET="fusFsxvP5IglRckJ1I1why6017xMNkzxqBID48Azw0IoT" \
fav-retweet-bot
在创建 Docker 镜像的计算机上,运行以下命令将其导出到文件。稍后您将使用此文件将镜像上传到 Azure VM:
$ docker image save fav-retweet-bot:latest -o fav-retweet-bot.tar
连接成功后,运行以下命令在虚拟机上安装 Docker:
AzureUser@TwitterBot:~$ sudo apt-get update
AzureUser@TwitterBot:~$ sudo apt install docker.io
AzureUser@TwitterBot:~$ sudo adduser ubuntu docker
从本地计算机,使用 scp 命令将机器人 Docker 镜像上传到虚拟机。这可能需要一些时间,具体取决于您的网络连接速度:
scp fav-retweet-bot.tar AzureUser@13.196.128.199:/
现在连接到 Azure 虚拟机并加载 Docker 镜像。AzureUser@TwitterBot:~$ docker image load -i fav-retweet-bot.tar
部署机器人的最后一步是在 Azure VM 中运行 Docker 镜像,并向其传递身份验证凭据。
您可以使用 docker 命令来实现这一点。传递 -d 和 --restart-always 标志可以确保即使您断开 SSH 会话或虚拟机重启,机器人也会继续运行:
AzureUser@TwitterBot:~$ docker run -d --restart always \
-e CONSUMER_KEY="nMRNy54oWfdfssdfsV9AoNavy0I" \
-e CONSUMER_SECRET="olAL5VAgZLWNspsdajff757kmsPEwuxpvLCLSR08DMa4O" \
-e ACCESS_TOKEN="792518593-j7gWSqzQO31ju7Bfdsf7NlZeSENsuADGU9B90r" \
-e ACCESS_TOKEN_SECRET="fusFsxvP5IglRckJ1I1why6017xMNkzxqBID48Azw0IoT" \
fav-retweet-bot
使用 `docker ps` 命令,您可以检查机器人是否正在运行并找到其容器 ID。最后,使用 `docker logs` 命令和容器 ID,您可以检查机器人的输出,以查看其是否正常工作:
AzureUser@TwitterBot:~$ docker logs f4aefe89a890
INFO:root:API created
INFO:root:Processing tweet id 1218244916562785538
INFO:root:Processing tweet id 1418486946762214918
现在,即使您断开与 SSH 会话的连接或关闭计算机,机器人仍会在 Azure VM 上继续运行。
AzureCertifiedBot是一个用 Python 编写并部署在 Azure VM 上的Twitter 机器人,它会点赞和转发 #AzureCertified 标签!
源代码基于Miguel Garcia 的《如何使用 Tweepy 在 Python 中制作 Twitter 机器人》 。