Skip to content

lambda ❤️ reddit memes

License

Notifications You must be signed in to change notification settings

lambdamai/reddit_memes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lambda ❤️ reddit memes

форк репозитория

Делаем форк репозитория и клонируем его себе на компьютер

Делаем форк репозитория и клонируем себе на компьютер

создание виртуального окружения

Прочитайте документацию к этому процессу или воспользуйтесь примером ниже

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

тут хорошее объяснение, почему.

Для наших скромных нужд требуется:

  1. получить доступ к сабреддиту на ваш вкус (мы любим /r/ProgrammerHumor)
  2. выгрузить список самых горячих постов (или самых последних)
  3. перемешать список или взять случайный его элемент
  4. убедиться, что в этом посте есть ссылка на изображение (используйте регулярные выражения)
  5. если звезды совпали — создаем словарь в которм ключ - имя файла, а значение - бинарное содержимое
  6. загружаем изображение в вк, используя функцию photos = vk.Photo.upload_wall_photos_for_groups(group_id, attachments.items()) (сами в шоке от названия функции)
  7. создаем пост на стене функцией wall_post()

создание приложения в heroku

Создание приложения Создание приложения

Настройка переменных окружения Интеграция с репозиторием Github

добавление декоратора для запуска по времени

Когда вручную все работает, наступает время автоматизации!

Для этого воспользуемся библиотекой APScheduler. Перенеси код из секции if __name__ == __main__ в функцию post_to_vk(), лишнее удали. Разкомментируй декоратор, определяющий запуск по таймеру типа cron. Настрой время, в которое ты бы хотел делать новые посты.

файлы, нужные для запуска heroku приложения

Для запуска приложения на Heroku понадобится несколько файлов:

  • requirements.txt — зависимости проекта (уже входят в комплект)
  • Procfile — описание запускаемых процессов
  • runtime.txt — задает версию Python на сервере

Версию Python будем использовать самую свежую, python-3.6.3. В Procfile пишем:

clock: python main.py

Это создает процесс clock который будет выполнять команду python main.py

Заливаем наш код в репозиторий, должна начаться автоматическая сборка проекта

👌