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

DEV Digitalocean Hackhoton: Geobot, Geography Python Twitter Bot – TUT 02

[Фото Dulcey Lima на Unsplash, модифицировано (урожай)] Первый взнос этой серии мы просто строим … Теги с догаконом, Python, Twitter, учебником.

[ Фото Dulcey Lima на Unsplash модифицированный (урожай)]

Первый взнос этой серии мы просто построили приложение Phying Python и развернули его на платформу приложения.

Сегодня мы будем лежать основы того, что нужно следовать.

План действий

Как учит историю человека месяца, у меня было некоторое время (рождественские праздники), и у нас есть проект для развития. Мне нужен план! Это то, что случилось, добросовестно сообщалось … более или менее!

Это было то, что я думал:

Ну … Мы не знаем как еще, что мы строим в конце, оставь один план!

Хорошо, проект звучит так: мы создадим бот (в этом случае в Twitter BOT, чтобы сохранить фокусировку только на одной платформе, но мы могли бы также портировать ее). Этот бот ориентирован на географию, то есть он должен производить карты.

Основным функционированием является это: вы упоминаете бот в Twitter, а бот отвечает на твит с твитом изображения, содержащего карту.

Основы это, мы можем продлить его по желанию (и мы будем).

Что касается плана (примерно):

  1. Создайте API сервера с одинаковыми характеристиками бота (как для тестирования функций, кроме бота, а также для композиции)

  2. Добавьте бот на сервер (или более одного)

Мы будем использовать инкрементную методологию разработки функций, например, на сегодняшний день мы всегда будем всегда использовать сервер для пригодных для использования и используемого бота, добавляя функциональные возможности, которые мы идем.

Неважно, что мы еще не показываем изображения, но важно, чтобы мы сохраняем соединение интерфейса Server-Bot.

Нам нужен бот (и учетная запись Twitter Developer)

Согласно вышесказанному, у нас есть сервер, который показывает нам сообщение: нам нужен бот, который делает то же самое.

Давайте создадим новый репо для этого, с обычным:

mkdir geobotshow
cd geobotshow
python3 -m venv venv
curl -L -o .gitignore https://raw.githubusercontent.com/github/gitignore/master/Python.gitignore
git init

Мы будем использовать Tweepy Для этого проекта. Сначала давайте активируемся, то мы устанавливаем все Это нужно

source venv/bin/activate
pip install tweepy requests
pip freeze > requirements.txt

Tweepy использует ОАУТ для аутентификации в Twitter. Вам нужно до 4 ключей, чтобы использовать его. Время, чтобы получить это!

Чтобы создать новое приложение Twitter для вашего бота, перейдите к Страница разработчика Twitter и Применить (в правом верхнем углу).

Затем я выбрал на странице приветствия хоббистскую причину того … Я строю бот!

Затем спросит ли это, я! Ну, дух!

ОК, шучу, просто выберите страну и другие варианты (если применимо). Далее он попросит вас объяснить, для чего вам нужен счет.

” Как вы будете использовать Twitter API или данные Twitter? »

Продолжай и напиши свои причины! Мои были вроде: «Создайте полезную географию бота» (хорошо, возможно, я потратил несколько дополнительных слов для принятия концепции, не менее 200 часов!).

Хорошо, иди и ответь на все вопросы. Выключите те, которые не применяются (например, показывать твиты за пределами твиттера и совместного использования с государственными организациями … Если вы не находятся из правительства, следуя по этому поводу: в этом случае я заявляю, что я не имею ничего общего со всем написанным в этом Post Series !!!)

После этого вы должны просмотреть, а принять соглашение и представить.

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

Когда вы делаете, вы будете перенаправлены на страницу создания приложений:

Теперь ты можешь окончательно Получить ключи Да!

Теперь вы должны скопировать их. Я предлагаю вам создать .env Файл в вашем проекте, со следующим:

TWITTER_API_KEY=***
TWITTER_API_SECRET_KEY=***
TWITTER_BEARER_TOKEN=***

Токен предъявителя лучше спасен где-то, хотя мы не собираемся его использовать.

Если вы скопировали .gitignore Как я показал в первом руководстве, он уже игнорируется Git, в противном случае вы должны добавить .env.env. к вашему .gitignore.

Теперь перейдите на страницу приложения и отредактируйте «разрешения приложений»

Установите его как Читать и писать Отказ Тогда сохраните.

Нам нужно пойти в приложение Ключи и токены

Внизу нам нужно создать Доступ к токене и секрет Отказ

Теперь мы можем обновить наше .env С 2 новыми полями:

TWITTER_ACCESS_TOKEN=***
TWITTER_ACCESS_SECRET=***

Наконец, нам понадобятся эти переменные, доступные в виртуальной среде.

Сначала мы деактивируем окружающую среду (если активно), затем добавьте команды загрузки на активировать сам файл

deactivate
echo "set -a; source $(pwd)/.env; set +a" >> venv/bin/activate

Теперь мы можем повторно активировать окружающую среду и проверять, были ли переменные установлены

source venv/bin/activate
echo $TWITTER_API_KEY
***

Вы должны напечатать ваш ключ API

Проверьте Tweepy Communications

Мы должны проверить, что все идет хорошо. На терминале Получите оболочку Python:

python
Python 3.8.6 (default, Sep 25 2020, 09:36:53) 
[GCC 10.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Теперь мы можем импортировать Tweepy и проверить доступ:

>>> import tweepy
>>> auth = tweepy.OAuthHandler(TWITTER_API_KEY, TWITTER_API_SECRET_KEY)
>>> auth.set_access_token(TWITTER_ACCESS_TOKEN, TWITTER_ACCESS_SECRET)
>>> api = tweepy.API(auth)
>>> api.verify_credentials()

В приведенном выше заменяйте ключевые имена с фактическими значениями (или импортируйте их из .env ).

В основном мы сначала создаем объект авторизации, затем мы устанавливаем для него токены доступа.

Мы передаем ключи к объекту API, а затем мы используем verify_credentials () Метод для проверки того, что он работает как ожидалось.

Вы должны увидеть терминал, затопленный информацией, и это означает, что он работает. К началу вы должны получить информацию о настоящем имени и имени экрана, но если вы не заметите их среди всех остальных, попробуйте следующее:

>>> user = api.get_user('')
>>> print(user.screen_name)

>>> print(user.name)

Замените в вышеупомянутую ручку Twitter внутри API.GET_USER () , и вы должны увидеть правильную информацию напечатанную.

Теперь вы можете Quit () Shell Python (просто напишите это имя функции и нажмите Enter).

Мы можем реализовать бот сейчас

Нам нужен файл конфигурации для загрузки конфигураций для бота Twitter; Мы называем это config_tweepy.py.

import tweepy
import logging
import os

logger = logging.getLogger()

def get_api():
    api_key = os.getenv("TWITTER_API_KEY")
    api_secret = os.getenv("TWITTER_API_SECRET_KEY")
    access_token = os.getenv("TWITTER_ACCESS_TOKEN")
    access_secret = os.getenv("TWITTER_ACCESS_SECRET")

    auth = tweepy.OAuthHandler(api_key, api_secret)
    auth.set_access_token(access_token, access_secret)
    # Set some useful alerts
    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 connecting to the Account", exc_info=True)
        raise e
    logger.info("Connected to the API")
    return api

Теперь мы поставим его в использовании внутри бота под названием Tweet.bot.py :

import time
import os
import logging
import tweepy
import requests

from config_tweepy import get_api

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger()

def check_mentions(api, since_id):
    logger.info("Retrieving mentions")
    new_since_id = since_id
    for tweet in tweepy.Cursor(api.mentions_timeline,
        since_id=since_id).items():
        new_since_id = max(tweet.id, new_since_id)
        if tweet.in_reply_to_status_id is not None:
            continue
        logger.info(f"Answering to {tweet.user.name}")
        logger.info(f"{tweet.text}")

        # getting the API response
        response = requests.get(os.getenv("API_HTTPS"))

        # reply to mention
        api.update_status(
            status=f"@{tweet.user.screen_name} {response.text}",
            in_reply_to_status_id=tweet.id,
        )
        logger.info(f"Since_id: {new_since_id}")
    return new_since_id

def main():
    api = get_api()
    since_id = int(os.getenv("BOT_SINCEID"))
    while True:
        since_id = check_mentions(api, since_id)
        logger.info("Waiting...")
        time.sleep(30)

if __name__ == "__main__":
    main()

Как вы можете сделать вывод из вышеперечисленного, нам нужно два дополнительных переменных ENV,

API_HTTPS=https://.ondigitalocean.app/
BOT_SINCEID=1

Первый удерживает URL вашего сервиса, чтобы получить данные от (вы можете проверить это легко под названием вашего приложения Do App).

Второй проводит своего рода пагинацию твитов ID, так что оно отслеживает то, что он уже ответил, чтобы не начать всегда отвечать с самого начала. Начнем с 1, и он автоматически обновляется. Также проверьте на нем, так как он отправляется в журналы: таким образом, если приложение вылетает или обновляется, мы можем возобновить с последнего, и не начать назад с самого начала

Время запустить:

python3 tweet.bot.py

Мы можем твитнуть что-то, что упоминание нашего бота, чтобы проверить, если это работает

@geobotshow test

И через некоторое время мы должны увидеть в консоли журнала действия:

INFO:root:Retrieving mentions
INFO:root:Answering to Davide Del Papa
INFO:root:@geobotshow test 4
INFO:root:Since_id: 1342897400902508546
INFO:root:Waiting...

И это должно показать также в вашей графике

Я предлагаю спасти С отгрузки и заменить собственное сценарий, так что каждый раз он снова начинается, сценарий не пытается ответить на старые упоминания

Я предлагаю также отменить некоторые из logger.info () Так как в производстве мы не понадобится их. Кроме того, нам нужно войти в файл с:

logging.basicConfig(filename='tweet.bot.log', level=logging.INFO)

Это должно быть достаточно для следующего.

Развернуть его

Когда мы довольны тем, что все работает правильно, мы можем развернуть его для платформы приложения

Сначала давайте совершить

git add -A
git commit -m 'First Commit'

Чтобы развернуть, нам нужно перейти на главную страницу нашего приложения и выбрать Компоненты Вкладка:

Нам нужно Создать новый компонент и выбираем Работник

Вам нужно еще раз, чтобы выбрать репозиторий (Если он не показывает, просто обновляйте разрешения, нажав на ссылку ниже выпадающего выбора репозитория: измените его, измените его назад и сохраните)

Тогда вы снова выберете ветку и область развертывания.

После этого он обнаружил службу Python, но не сможет обнаружить команду запущенного: просто Редактировать команда запуска как раньше:

python3 tweet.bot.py

Более того, нам нужно будет вставить переменные среды!

Как не так, чтобы загрузить файл, мы должны добавить их вручную

Обязательно выбрать [x] шифрование где это уместно, так что он добавит уровень безопасности.

Настало время выбрать план, и снова мы можем выбрать самый маленький размер.

Тогда мы должны ждать развертывания

Теперь мы можем попробовать это онлайн и увидеть все бегущее гладко

Мы также можем проверить файл журнала в консоли

Выводы

Мы настроили работник, чтобы бежать как бот

Единственная проблема, которую мы имеем с этой конфигурацией, состоит в том, что она займет две контейнеры на цифровой камере: один для обслуживания и один для работника.

Однако эта конфигурация довольно гибкая.

Оставайтесь настроиться на следующие эпизоды.

Оригинал: “https://dev.to/davidedelpapa/dev-digitalocean-hackathon-geobot-a-geography-python-twitter-bot-tut-02-20j9”