发布于 2026-01-06 1 阅读
0

我如何在 AWS 上搭建 Twitter 机器人,然后在 Azure 上再次搭建 😲🤖 AzureCertifiedBot

我如何在 AWS 上搭建 Twitter 机器人,然后再在 Azure 上搭建一个 😲🤖

AzureCertifiedBot

这个机器人是在米格尔·加西亚的这篇精彩文章的帮助下制作的

先决条件⚙

  • Azure 虚拟机
  • Twitter开发者账号
  • Twitter 应用身份验证凭据

请随时查看Miguel 的文章,了解所有这些要求!

Tweepy 是什么🐣?

Tweepy 是一个开源的 Python 包,它提供了一种非常便捷的方式来使用 Python 访问 Twitter API。Tweepy 包含一系列类和方法,分别代表 Twitter 的模型和 API 端点,并透明地处理各种实现细节,例如:
数据编码和解码、
HTTP 请求、
结果分页
、OAuth 身份验证、
速率限制和
数据流。
如果您不使用 Tweepy,则需要处理与 HTTP 请求、数据序列化、身份验证和速率限制相关的底层细节。这既耗时又容易出错。而有了 Tweepy,您就可以专注于构建所需的功能。

继续开发 #AzureCertified 机器人 🤖

以下是配置模块的源代码。它包含 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
Enter fullscreen mode Exit fullscreen mode

这个机器人利用之前介绍过的 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"])
Enter fullscreen mode Exit fullscreen mode

构建 Docker 镜像 🐳

要打包您的机器人或应用程序,您需要在项目根目录中创建一个 Dockerfile 文件。该文件包含一组用于创建包含您的应用程序的 Docker 镜像的指令。
您的项目结构应如下所示:

tweepy-bots/
├── bots/
│   ├── config.py
│   └── favretweet.py
├── requirements.txt
└── Dockerfile
Enter fullscreen mode Exit fullscreen mode

您可以使用以下 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"]
Enter fullscreen mode Exit fullscreen mode

最后一行说明了使用此图像时必须运行的命令。

现在您可以使用以下命令构建镜像:

$ 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
Enter fullscreen mode Exit fullscreen mode

将其部署到 Azure 虚拟机

步骤 1:导出 Docker 镜像

在创建 Docker 镜像的计算机上,运行以下命令将其导出到文件。稍后您将使用此文件将镜像上传到 Azure VM:

$ docker image save fav-retweet-bot:latest -o fav-retweet-bot.tar

步骤 2:在 Azure 虚拟机上安装 Docker

连接成功后,运行以下命令在虚拟机上安装 Docker:

AzureUser@TwitterBot:~$ sudo apt-get update
AzureUser@TwitterBot:~$ sudo apt install docker.io
AzureUser@TwitterBot:~$ sudo adduser ubuntu docker
Enter fullscreen mode Exit fullscreen mode

步骤 3:上传机器人的 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

步骤 4:运行机器人的 Docker 镜像

部署机器人的最后一步是在 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
Enter fullscreen mode Exit fullscreen mode

使用 `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

Enter fullscreen mode Exit fullscreen mode

现在,即使您断开与 SSH 会话的连接或关闭计算机,机器人仍会在 Azure VM 上继续运行。

GitHub 标志 rishabkumar7 / AzureCertifiedBot

一个转发和点赞 #AzureCertified 推文的推特机器人!

文章来源:https://dev.to/rishabk7/how-i-built-a-twitter-bot-on-aws-and-then-again-on-azure-94m