Как я автоматически обновляю свой профиль Twitter с помощью Python.


Введение

Я считаю автоматизацию задач одной из самых интересных вещей в программировании. В последнее время я думал о том, как использовать API для автоматизации некоторых вещей, и мне пришла в голову идея заставить изображение баннера моего профиля Twitter автоматически меняться время от времени. Это было бы похоже на доступ к функции Twitter, которой нет ни у кого, — возможность использовать слайд-шоу в качестве баннера вместо одного изображения.

Для получения изображений я буду использовать API NASA Astronomy Picture of the Day. Этот API ежедневно предоставляет разные изображения, что делает его подходящим для этой конкретной цели. Кроме того, используя этот API, я знаю, что мой баннер в Twitter не будет повторять никаких изображений. Вы можете использовать изображения из других API или свои собственные.

Получение доступа к API

Перед началом работы вам понадобится доступ к API Twitter и API NASA.

API Twitter

Чтобы получить доступ к API Twitter, необходимо зайти на портал разработчиков Twitter. Обязательно войдите на портал с той же учетной записью, с которой вы хотите, чтобы ваш баннер менялся автоматически. Я не буду описывать шаг за шагом, что вам нужно сделать, чтобы получить доступ к API Twitter, но вот руководство. Вам нужно будет подать заявку на получение повышенного доступа к API (шаг четыре), поскольку запрос на обновление профиля является частью конечных точек версии 1.1. Получить повышенный доступ несложно. Вам придется объяснить, как вы будете использовать API, чтобы они знали, что вы следуете их условиям поведения.

API NASA

Далее вам понадобится доступ к открытым API NASA. API NASA можно использовать бесплатно. Можно использовать API без ключа API, используя в качестве ключа «DEMO_KEY».
Например:
https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY

Единственным ограничением является то, что с демо-ключом вы можете делать только 30 запросов в час и 50 запросов в день на один IP-адрес, в то время как с вашим API-ключом вы можете делать до 1000 запросов в час. Демо-ключ обеспечивает достаточное количество запросов для работы проекта, поскольку я делаю только один запрос в день. Но я все равно решил использовать свой API-ключ, потому что в процессе написания и тестирования кода я буду делать несколько запросов в час. Кроме того, его легко получить.

Чтобы получить доступ к API NASA:
Перейдите на сайт api.nasa.gov.
Прокрутите страницу вниз, пока не найдете форму под названием Generate API Key.
Заполните свою личную информацию и нажмите на кнопку signup. Сразу после этого вы должны получить ключ API.

Реализация

Необходимые условия

Вам понадобятся три библиотеки.
Tweepy для более удобного использования API Twitter,
requests для получения информации из NASA API через HTTP-запрос,
python-dotenv, которую я использовал для хранения и доступа к своим закрытым ключам без их публичного раскрытия.
Вы можете установить эти библиотеки вручную или, если вы клонировали мой репозиторий на Github, установить через файл requirements.txt.

pip install tweepy
pip install requests
pip install python-dotenv
Вход в полноэкранный режим Выход из полноэкранного режима
pip install requirements.txt
Войти в полноэкранный режим Выход из полноэкранного режима

Если вы используете python-dotenv, вам необходимо создать файл .env и записать в него ключи API и токен доступа. Пример:

TWITTER_API_KEY="YOUR_TWITTER_API_KEY"
TWITTER_API_KEY_SECRET="YOUR_TWITTER_API_KEY_SECRET"
TWITTER_ACCESS_TOKEN="YOUR_TWITTER_ACCESS_TOKEN"
TWITTER_ACCESS_TOKEN_SECRET="YOUR_TWITTER_ACCESS_TOKEN_SECRET"

NASA_API_KEY="YOUR_NASA_API_KEY"
Вход в полноэкранный режим Выход из полноэкранного режима

Получение содержимого из API NASA

import requests
from dotenv import load_dotenv
import os
load_dotenv()

api_key = os.getenv('NASA_API_KEY')

json = requests.get(f'https://api.nasa.gov/planetary/apod?api_key={api_key}').json()

if json['media_type'] == 'image':
    title = json['title']
    imageURL = json['hdurl']
    content = Content(title, imageURL)
Вход в полноэкранный режим Выход из полноэкранного режима

В приведенном выше коде я отправляю HTTP-запрос и получаю JSON, содержащий информацию о сегодняшней астрономической картине дня. Вот пример того, как выглядит сегодняшний JSON с использованием демонстрационного ключа. Из него я получаю название изображения и URL. Есть два URL-адреса. Разница в том, что hdurl имеет более высокое разрешение.
Я проверяю, является ли значение 'media-type' 'image', потому что иногда API возвращает видео вместо изображения. В этом случае я пропущу этот день и не буду обновлять баннер.

Загрузите изображение

img_data = requests.get(url).content
if not os.path.exists('tmp'): os.makedirs('tmp')
with open('tmp/banner.jpg', 'wb') as handler:
    handler.write(img_data)
Войдите в полноэкранный режим Выйти из полноэкранного режима

Если папка не существует, я создаю папку ‘tmp’ в основной директории, куда я буду сохранять изображение баннера. Я получаю изображение по URL-адресу, который я получил от NASA API.

Авторизация через API Twitter

import tweepy
from dotenv import load_dotenv
import os
load_dotenv()

api_key = os.getenv("TWITTER_API_KEY")
api_key_secret = os.getenv("TWITTER_API_KEY_SECRET")
access_token = os.getenv("TWITTER_ACCESS_TOKEN")
access_token_secret = os.getenv("TWITTER_ACCESS_TOKEN_SECRET")

auth = tweepy.OAuthHandler(api_key, api_key_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
Вход в полноэкранный режим Выход из полноэкранного режима

Используя Tweepy для обработки аутентификации, я передаю свой API-ключ и секрет объекту OAuthHandler от Tweepy, устанавливаю свой маркер доступа, а затем создаю экземпляр API.

Обновление профиля

text = f'Banner photo: {content.title}nfrom: https://apod.nasa.gov/apod/astropix.html'
api.update_profile_banner(filename = 'tmp/banner.jpg')
api.update_profile(description = text)
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь, когда я создал экземпляр API с помощью Tweepy, получил содержимое из API NASA и загрузил изображение, мне осталось только обновить баннер. Я также обновляю биографию, чтобы отобразить название изображения.

Развертывание и настройка планировщика

Запустив этот код, баннер вашего профиля и биография будут обновлены. Вам нужно будет запускать его ежедневно, чтобы ваш профиль обновлялся ежедневно. Я развернул код на Heroku и использовал планировщик для запуска основного скрипта каждый день. Heroku позволяет вам иметь до 5 бесплатных проектов, поэтому мне не пришлось платить, чтобы использовать эту альтернативу.

Сначала создайте новое приложение.

На вкладке развертывания приложения выберите способ развертывания проекта. Я связал свое приложение с репозиторием Github. Тем не менее, вы также можете использовать Heroku CLI для развертывания своего проекта, если он не находится на Github.

Под вкладками настроек есть поле для добавления ваших конфигурационных параметров. Вы должны добавить туда ключи API, маркеры доступа и секреты. Эти переменные станут доступными, как если бы они находились в файле .env.

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

$ python main.py
Вход в полноэкранный режим Выход из полноэкранного режима

Далее вам нужно перейти на страницу аддонов и найти аддон под названием Heroku scheduler. Откройте страницу планировщика и нажмите на кнопку установить. Вам нужно будет выбрать проект, в котором вы хотите использовать этот аддон.

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

Наконец, вернитесь на вкладку «Обзор приложений». Вы должны увидеть планировщик Heroku под установленными аддонами. Откройте его и нажмите на кнопку «Создать новое задание». Затем вам нужно будет ввести, какую команду вы хотите запустить и с каким интервалом она будет выполняться.

Заключение

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

Вот репозиторий GitHub:

https://github.com/viniciusenari/twitter-profile-updater

Оцените статью
devanswers.ru
Добавить комментарий