Эй, надеюсь, вы остаетесь положительным и тестированием негативным в пандемии 🙌 🏻
Давайте проверим шаг за шагом, как сделать приложение Python Serverless, которое обновляет ваш баннер Twitter или вы можете сделать что угодно, это имеет огромный потенциал.
Мы будем использовать сервис под названием ДЕТА Поскольку их Tagline говорит: «Создайте свои приложения в часы, разверните их в считанные секунды. «Мы будем делать то же самое: D Кстати, теперь это совершенно бесплатно, так что не стесняйтесь использовать его 🔥
Это все началось с этого твита моей
потом это
Мы будем покрывать последнее краткое приложение Tweet здесь, если вы тоже хотите понятие, дайте мне знать в комментариях ниже
Итак, давайте распустим его шаг за шагом и сделайте приложение.
Давайте сделаем список требований
- Учетная запись Developer Twitter
- Детский счет
- 10-15 минут вашего времени 😌
Учетная запись Developer Twitter
Подать заявку на учетную запись Developer Twitter, если вы еще этого не сделали, они займут некоторое время для проверки, но после того, как вы будете приятно идти.
Шаг 1 – Создайте новое приложение Twitter
Перейти к Проекты и приложения вкладка и создать новое приложение
Шаг 2 – Назовите ваше приложение
Шаг 3 – Ключи потребителей и секрет
Это важный, вы получите свои ключи и токены, поэтому обратите внимание на их.
Шаг 4 – Разрешения
После того, как вы перейдете к панели инструментов проекта. Перейдите к разрешениям приложений, нажмите «Изменить и» сделать приложение Читать и писать
Отказ
Шаг 5 – Доступ к токену и секрет доступа
Шаг вы все ждали, чтобы получить токены.
К концу этого процесса мы будем иметь
Две ключи от шага 3
- Thumber_key.
- Thumber_Secret.
Две ключи от шага 5
- Access_token.
- Access_token_secret.
Детенция
Документы Из ДЕТА Удивительно, вы можете проверить, что если у вас есть какие-либо проблемы с приложением.
Шаг 0 – Установить ДЕТА
Установите ДЕТА на основе вашей ОС.
TL; DR для Mac и Linux
curl -fsSL https://get.deta.dev/cli.sh | sh
Для окон
iwr https://get.deta.dev/cli.ps1 -useb | iex
Тогда, пожалуйста, сделайте ДЕТА ВХОДА
В вашем предпочтительном терминале.
Существует известная проблема с сафари и храбрым браузером, поэтому, пожалуйста, используйте Chrome при выполнении этого шага.
Шаг 1 – Создать новый проект
Мы будем создавать новый ДЕТА Микро
Чтобы создать новый Micro с Python, запустите следующую команду.
Deta New – python banner_update
Здесь banner_update
это имя приложения.
Чтобы постоянно проверять обновления и развернуть их в облако ДЕТА
предлагает команду, это называется Детские часы
.
Откройте новый терминал и запустите Детские часы
и оставить его в сторону, пока не закончим проект: D
Шаг 2 – Установите зависимости
Создать требования .txt
Файл в корневом каталоге и иметь необходимые пакеты, перечисленные в файле.
Вы можете использовать следующие пакеты для этого приложения.
requests fastapi python-dotenv tweepy Pillow
Шаг 3 – Переменные среды
Создать .env.
Файл Ваш .env
Файл должен выглядеть что-то похожее на это
CONSUMER_KEY="your key" CONSUMER_SECRET="your secret" ACCESS_TOKEN="your token" ACCESS_TOKEN_SECRET="your secret"
Создать .detaonhore
Файл и добавить ! .env.
к этому.
ДЕТА игнорирует .env
Файл по умолчанию.
Шаг 4 Код Python
Вы можете отправиться в Заголовки меня и создать базу для вашего баннера Twitter.
Я создал свою базу, и это выглядит так
Скачать шрифт по вашему выбору .ttf
формат. Нам нужен шрифт для написания на изображении.
Весь код выглядит что-то подобное, не волнуйтесь, давайте перейдем на него шаг за шагом.
from deta import App from fastapi import FastAPI from dotenv import load_dotenv from os.path import join, dirname import os import tweepy import shutil import tempfile from PIL import Image, ImageDraw, ImageFont # Connecting to twitter service AUTH = tweepy.OAuthHandler( os.environ.get("CONSUMER_KEY"), os.environ.get("CONSUMER_SECRET") ) AUTH.set_access_token( os.environ.get("ACCESS_TOKEN"), os.environ.get("ACCESS_TOKEN_SECRET") ) api = tweepy.API(AUTH,parser=tweepy.parsers.JSONParser()) upload_api = tweepy.API(AUTH) consolas_font = ImageFont.truetype("fonts/Consolas.ttf", 48) dotenv_path = join(dirname(__file__), ".env") load_dotenv(dotenv_path) app = App(FastAPI()) # Helpers def text_wrap(text, font, max_width): lines = [] # If the width of the text is smaller than image width # we don't need to split it, just add it to the lines array # and return if font.getsize(text)[0] <= max_width: lines.append(text) else: # split the line by spaces to get words words = text.split(' ') i = 0 # append every word to a line while its width is shorter than image width while i < len(words): line = '' while i < len(words) and font.getsize(line + words[i])[0] <= max_width: line = line + words[i] + " " i += 1 if not line: line = words[i] i += 1 # when the line gets longer than the max width do not append the word, # add the line to the lines array lines.append(line) return lines @app.get("/") def http(): return "Hello DEV Community" @app.lib.run() @app.lib.cron() def driver(e=None): data = api.followers() followers = data['users'][:3] shutil.copy('base.png', '/tmp/') img = Image.open('/tmp/base.png') image_editable = ImageDraw.Draw(img) initial_x = 42 initial_y = 64 image_size = img.size for follower in followers: screen_name =follower["screen_name"] description = follower["description"] message = f"{screen_name} : {description}" lines = text_wrap(message, consolas_font, image_size[0] * 0.48) for val in lines: image_editable.text( (initial_x, initial_y), val, font=consolas_font, fill=(255, 255, 255) ) initial_y = initial_y + 48 initial_y = initial_y + 48 edited_temp = tempfile.NamedTemporaryFile(suffix=".png") img.save(edited_temp.name) upload_api.update_profile_banner(edited_temp.name) return followers
Это по существу, запускает быструю службу API в капюшоне, так что это также можно использовать для развертывания ваших API и забыл о масштабировании, потому что он не будет меньше, они позаботятся обо всем: D
Конструкция кода 1.
# Connecting to twitter service AUTH = tweepy.OAuthHandler( os.environ.get("CONSUMER_KEY"), os.environ.get("CONSUMER_SECRET") ) AUTH.set_access_token( os.environ.get("ACCESS_TOKEN"), os.environ.get("ACCESS_TOKEN_SECRET") ) api = tweepy.API(AUTH,parser=tweepy.parsers.JSONParser()) upload_api = tweepy.API(AUTH) consolas_font = ImageFont.truetype("fonts/Consolas.ttf", 48) dotenv_path = join(dirname(__file__), ".env") load_dotenv(dotenv_path) app = App(FastAPI())
Здесь мы инициализируем Twitter API, быстрые API, шрифт и переменные среды для загрузки.
Поломка кода 2.
# Helpers def text_wrap(text, font, max_width): lines = [] # If the width of the text is smaller than image width # we don't need to split it, just add it to the lines array # and return if font.getsize(text)[0] <= max_width: lines.append(text) else: # split the line by spaces to get words words = text.split(' ') i = 0 # append every word to a line while its width is shorter than image width while i < len(words): line = '' while i < len(words) and font.getsize(line + words[i])[0] <= max_width: line = line + words[i] + " " i += 1 if not line: line = words[i] i += 1 # when the line gets longer than the max width do not append the word, # add the line to the lines array lines.append(line) return lines
Это функция помощника, которая помогает нам разбить линии в данном пространстве. Я нашел его онлайн, пытаясь найти источник, чтобы дать кредит, но не нашел его. Обновит, как только я найду это.
Половина кода 3.
@app.lib.run() @app.lib.cron() def driver(e=None): data = api.followers() followers = data['users'][:3] shutil.copy('base.png', '/tmp/') img = Image.open('/tmp/base.png') image_editable = ImageDraw.Draw(img) initial_x = 42 initial_y = 64 image_size = img.size for follower in followers: screen_name =follower["screen_name"] description = follower["description"] message = f"{screen_name} : {description}" lines = text_wrap(message, consolas_font, image_size[0] * 0.48) for val in lines: image_editable.text( (initial_x, initial_y), val, font=consolas_font, fill=(255, 255, 255) ) initial_y = initial_y + 48 initial_y = initial_y + 48 edited_temp = tempfile.NamedTemporaryFile(suffix=".png") img.save(edited_temp.name) upload_api.update_profile_banner(edited_temp.name) return followers
@ app.lib.run ()
и @ app.lib.cron ()
специфичны для детей, и вы можете посмотреть их здесь Беги Смягчать
TL; DR версия CRON и RUN запущена – это запустить конкретную часть приложения Cron – это запустить часть для каждого заданного интервала времени, например, запускать функцию один раз в 2 минуты.
data.followers ()
Возвращает объект JSON ваших последователей.
подписчики [«пользователи» [: 3]
Возвращает последние три подписчика и сохраняет их в списке подписчиков.
shutil.copy('base.png', '/tmp/') img = Image.open('/tmp/base.png') image_editable = ImageDraw.Draw(img)
Это будет немного сложно понять, поэтому, пожалуйста, внимательно прочитайте.
Так что вы не можете прочитать файл с Напишите
Разрешения в корневой папке, но ImagedRaw
требует от нас, чтобы открыть файл в Напишите
Режим, потому что ему нужно нарисовать изображение => Написание на изображении. Но у нас всегда есть /tmp/
Папка, где мы можем иметь разрешения на запись, потому что она часто очищается. Итак, мы копируем наше базовое изображение в /TMP
папка с забил
библиотека. Затем откройте изображение с Ума
initial_x = 42 initial_y = 64 image_size = img.size for follower in followers: screen_name =follower["screen_name"]; description = follower["description"]; message = f"{screen_name} : {description}" lines = text_wrap(message, consolas_font, image_size[0] * 0.48) for val in lines: image_editable.text( (initial_x, initial_y), val, font=consolas_font, fill=(255, 255, 255) ) initial_y = initial_y + 48 initial_y = initial_y + 48
Здесь мы итарируемся через 3 последних подписчиков, которые мы имеем и сохраняем их имя пользователя и био, написав их на базовом изображении, мы используем image_editable.text
Команда и после каждой строки мы обновляем ось Y курсора.
edited_temp = tempfile.NamedTemporaryFile(suffix=".png") img.save(edited_temp.name) upload_api.update_profile_banner(edited_temp.name) return followers
Шаг 5 Код Python
Заставьте приложение пройти один раз в две минуты. Откройте новый терминал и просто введите
Deta Cron установить «2 минуты»
Да, это так просто запустить работу CRON в DETA.
Woohoo, поздравляю о добывании до конца поста.
Не стесняйтесь пометить меня в Twitter, когда это сделано, я постараюсь быть вашим первым тестером, вы можете найти меня @Gillarohith
Также, пожалуйста, прокомментируйте, если вы застряли где угодно, или вы можете связаться со мной в Twitter, мои DMS открыты.
Спасибо, Rohith Gilla
Оригинал: “https://dev.to/gillarohith/develop-and-deploy-a-server-less-python-application-that-updates-twitter-banner-in-real-time-21hg”