Делаем форк репозитория и клонируем его себе на компьютер
Прочитайте документацию к этому процессу или воспользуйтесь примером ниже
python3 -m venv /path/to/new/virtual/environment
source /path/to/new/virtual/environment/bin/activate # если у вас линуксы
C:\path\to\new\virtual\environment\Scrpits\activate.bat # если шиндовс
pip install -r requirements.txt
В проекте используем библиотеку praw
. С документацией можно ознакомиться тут, нам понадобится всего две-три команды.
Нужно иметь аккаунт на reddit.com, в настройках приложений своего профиля создать новое приложение, записать:
- название приложения
user_agent
- секретный ключ
client_secret
- ID приложения
client_id
Или попросить существующие у @Timur M
Все полученные ключи надо записать в файл praw.ini
. Мы знаем, что хранить ключи в репозитории — в высшей степени плохо, поэтому особо ретивые могут запихать их в переменные окружения, если ознакомятся с документацией.
Сделать себе API ключ, пользуясь инструкцией, но лучше попросить готовые (проще). Настройки задаются в том же praw.ini
или в переменных окружения, тут проще.
Написать функцию, которая:
- отправляет сетевой запрос на чтение бинарного кода изображения по ссылке из поста
- вынимает из ссылки имя файла
- возвращает бинарник и имя файла. предлагаем использовать оператор
yield
, о котором можно почитать тут и тут (на русском)
Основной код до момента деплоя на сервер предлагаем писать под конструкцией
if __name__ == "__main__":
# here comes the code
тут хорошее объяснение, почему.
Для наших скромных нужд требуется:
- получить доступ к сабреддиту на ваш вкус (мы любим /r/ProgrammerHumor)
- выгрузить список самых горячих постов (или самых последних)
- перемешать список или взять случайный его элемент
- убедиться, что в этом посте есть ссылка на изображение (используйте регулярные выражения)
- если звезды совпали — создаем словарь в которм ключ - имя файла, а значение - бинарное содержимое
- загружаем изображение в вк, используя функцию
photos = vk.Photo.upload_wall_photos_for_groups(group_id, attachments.items())
(сами в шоке от названия функции) - создаем пост на стене функцией
wall_post()
Когда вручную все работает, наступает время автоматизации!
Для этого воспользуемся библиотекой APScheduler. Перенеси код из секции if __name__ == __main__
в функцию post_to_vk()
, лишнее удали. Разкомментируй декоратор, определяющий запуск по таймеру типа cron
. Настрой время, в которое ты бы хотел делать новые посты.
Для запуска приложения на Heroku понадобится несколько файлов:
requirements.txt
— зависимости проекта (уже входят в комплект)Procfile
— описание запускаемых процессовruntime.txt
— задает версию Python на сервере
Версию Python будем использовать самую свежую, python-3.6.3
. В Procfile
пишем:
clock: python main.py
Это создает процесс clock
который будет выполнять команду python main.py
Заливаем наш код в репозиторий, должна начаться автоматическая сборка проекта