Рубрики
Без рубрики

Как я построил бота в твиттере на AWS, а затем снова на Azure 😲🤖

Этот бот был подготовлен с помощью этой замечательной статьи Мигеля Гарсии. Предварительные условия ⚙ … Tagged с AWS, Azure, Docker, Python.

Этот бот был подготовлен с помощью этого Отличная статья Мигель Гарсия.

Предварительные условия ⚙

  • Azure VM
  • Аккаунт разработчика Twitter
  • Учетные данные по аутентификации приложения Twitter

Не стесняйтесь проверять Статья Мигель за все эти требования!

Что такое Tweepy 🐣?

Tweepy – это пакет Python с открытым исходным кодом, который дает вам очень удобный способ получить доступ к API Twitter с помощью Python. Tweepy включает в себя набор классов и методов, которые представляют модели Twitter и конечные точки API, и прозрачно обрабатывают различные данные реализации, такие как: кодирование данных и декодирование HTTP -запросов Результаты. Придется иметь дело с деталями низкого уровня, связанными с HTTP-запросами, сериализацией данных, аутентификацией и ограничениями скорости. Это может занять много времени и подвержено ошибке. Вместо этого, благодаря Tweepy, вы можете сосредоточиться на функциональности, которую хотите построить.

Продолжая с #azurecertified bot 🤖

Ниже приведен исходный код для модуля конфигурации. Он содержит 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 Stream, чтобы активно наблюдать за твитами, которые содержат определенные ключевые слова. Для каждого твита, если вы не автор твита, он будет отмечать твит, как это понравилось, а затем ретвитнуть его.

Вы можете использовать этот бот для подачи своей учетной записи контентом, который имеет отношение к вашим интересам.

Бот -исходный код

Ниже вы можете увидеть полный исходный код этого бота. Он использует поток для фильтрации твитов, которые содержат слово «#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"])

Построение изображения Docker 🐳

Чтобы упаковать свой бот или приложение, вы должны создать DockerFile в корневом каталоге проекта. Этот файл содержит набор инструкций, используемых для создания изображения Docker, содержащего ваше приложение. Вот как должна выглядеть структура проекта:

tweepy-bots/
│
├── bots/
│   ├── config.py
│   └── favretweet.py
│
├── requirements.txt
└── Dockerfile

Вы можете использовать следующий Dockerfile, чтобы создать изображение для Fav & Retweet Bot. Он использует Python: 3.7-Alpine в качестве базового изображения. Мы выбрали это изображение в качестве основания, так как оно очень маленькое и содержит Python3.7 и PIP. Затем этот DockerFile копирует код бота и файл Teletins.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

Развертывание в Azure VM

Шаг 1: Экспорт изображения Docker

С компьютера, где вы создали изображение Docker, запустите эти команды, чтобы экспортировать его в файл. Вы собираетесь использовать этот файл позже, чтобы загрузить изображение в свою виртуальную машину Azure:

$ Docker Image Save Fav-retweet-bot: последний -o Fav-retweet-bot.tar

Шаг 2: Установите Docker на свою виртуальную машину Azure

Как только вы подключитесь, запустите следующие команды, чтобы установить Docker на виртуальной машине:

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

Шаг 3: Загрузите изображение Docker вашего бота

С вашего локального компьютера загрузите изображение Docker Bot в свою виртуальную машину, используя SCP. Это может занять некоторое время в зависимости от вашего подключения к Интернету:

scp fav-retweet-bot.tar azureuser@13.196.128.199:/

Теперь подключитесь к виртуальной машине Azure и загрузите изображение Docker AzureUser@Twitterbot: ~ $ Docker Image Load -i Fav-retweet-bot.tar

Шаг 4: Запустите изображение Docker вашего бота

Последний шаг для развертывания бота – запустить изображение Docker в вашей виртуальной машине Azure, передавая его учетные данные аутентификации.

Вы можете сделать это с помощью команды 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, вы можете проверить, что бот работает, и найти свой идентификатор контейнера. Наконец, используя команду Docker Logs и идентификатор контейнера, вы можете проверить вывод от бота, чтобы увидеть, работает ли она правильно:

AzureUser@TwitterBot:~$ docker logs f4aefe89a890
INFO:root:API created
INFO:root:Processing tweet id 1218244916562785538
INFO:root:Processing tweet id 1418486946762214918

Теперь, даже если вы отключитесь от сеанса SSH или отключите свой компьютер, бот будет продолжать работать на вашей виртуальной машине Azure.

Rishabkumar7/azurecertifiedbot

Бот в Твиттере, который ретвитит и любит #azurecertified твиты!

Написано на Python и развернуто на Azure VM, Azurecertiedbot это бот в Твиттере, который любит и ретвитит #azurecertified хэштег!

Исходный код на основе Как приготовить бот в Твиттере в Python с Tweepy Мигель Гарсия.

Оригинал: “https://dev.to/rishabk7/how-i-built-a-twitter-bot-on-aws-and-then-again-on-azure-94m”