Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Добро пожаловать в Кран-ресторан — казуальный симулятор, который превратит вас в настоящего мастера кулинарии! Управляйте краном, ловите нужные ингредиенты и готовьте блюда по рецептам, избегая ошибок, чтобы сохранить рейтинг и получить ценные награды.

Кран-Ресторан

Казуальные, Аркады, Шарики

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Python + Дизайн

С этим тегом используют

Программирование IT Программист Обучение IT юмор Разработка YouTube Интерьер Дизайнер Юмор Логотип Дизайн интерьера Креатив Ремонт Все
9 постов сначала свежее
102
zolotorevich
zolotorevich
1 год назад

Дневник разработки «Pirate Parrot». Часть I: Дизайн и комбайн⁠⁠

Дневник разработки «Pirate Parrot». Часть I: Дизайн и комбайн Python, Программирование, Дизайн, Логотип, Компьютерные игры, Видео, YouTube, Длиннопост

лл: делаем сайт, который находит новые игры на торрентах и постит их описание в Телегу. Рисуем лого, интерфейс и пишем код на Пайтоне.

* * *

Приглашаю окунуться в магический мир разработки программного обеспечения, полный приключений, неизвестности, страданий и сожалений о своих решениях. Мы с вами пройдём путь от идеи «Телеграм-канал с описанием новых игр на торрент-трекерах» до сайта, который их находит и публикует.

Процесс сильно упрощён для простоты понимания, однако, вам всё же потребуются знания школьной программы: что такое переменная, массив, функция, операторы IF и FOR. Ещё нужно знать, что сайты состоят из HTML и работают особо-шумных компьютерах под названием «серверы». Остальное объясню на пальцах.

Это не учебный материал. Некоторые вещи сделаны не оптимально, с ошибками и преднамеренно криво. Если хотите научиться программировать, то лучше купите книгу, запишитесь на курсы или послушайте индусов на YouTube.

Хватит разговоров, пора мешки ворочать. Открываем творение Дурова и пишем пост об одной игре, чтобы знать к какому результату стремиться. Чем чётче цель, тем проще к ней двигаться:

Дневник разработки «Pirate Parrot». Часть I: Дизайн и комбайн Python, Программирование, Дизайн, Логотип, Компьютерные игры, Видео, YouTube, Длиннопост

Чтобы делать такие посты нам потребуются:

• Трейлер игры
• Три скриншота
• Жанры
• Описание
• Минимальные системные требования
• Рейтинг на Метакритике

Собирать всё это будет программа, которая работает на сервере и управляется через веб-сайт, он же «панель управления». Нам предстоит её научить:

• Загружать список игр с Рутрекера.
• Сохранять в базу данных название, описание и жанры игры.
• Скачивать скриншоты.
• Искать и скачивать трейлеры с YouTube.
• Искать и сохранять рейтинг на Metacritic.
• Показывать описание, трейлеры и скриншоты в панели управления.
• Отправлять это всё в Телеграм.

Звучит не сложно. Начнём с названия, логотипа и интерфейса.

Дневник разработки «Pirate Parrot». Часть I: Дизайн и комбайн Python, Программирование, Дизайн, Логотип, Компьютерные игры, Видео, YouTube, Длиннопост

Рабочее название проекта: «Pirate Parrot». Как-то сразу в голову пришло. Звучит настолько попсово, что даже не стал проверять занять ли домены — наверняка заняты — и существуют ли похожие проекты с таким названием — наверняка существуют.

За пару дней раздумий ничего толкового не придумал. Каково же было удивление, что домен «pirateparrot.ru» свободен. Ладно, берём его для сайта-заглушки и ещё один, не скажу какой, для панели управления.

Корабль назвали и ему нужен логотип, а точнее флаг. Пиратский флаг с черепом. Но не простой, а цифровой. Мой любимый торрент-клиент «Transmission» показывает доступность файлов у сидеров в виде цветных блоков. Отличная метафора для проекта: череп из блоков доступности торрента.

Дневник разработки «Pirate Parrot». Часть I: Дизайн и комбайн Python, Программирование, Дизайн, Логотип, Компьютерные игры, Видео, YouTube, Длиннопост

Находим референс в Гугле, сдуваем пыль с графического планшета и рисуем как умеем. Мозайку Фотошоп сделаем сам, нам останется только перенести её в вектор. Да, царапины на клюве плохо видны, но этот и ещё парочку косяков поправим позже. Сейчас главное выпустить «Версию 1.0» как можно быстрее, а не идеально.

Поговаривают, что нейросети заменят дизайнеров и программистов. Ну чтож, робот, удиви меня! Нарисуй этот логотип лучше:

Дневник разработки «Pirate Parrot». Часть I: Дизайн и комбайн Python, Программирование, Дизайн, Логотип, Компьютерные игры, Видео, YouTube, Длиннопост

Н-да… Код, пожалуй, сам напишу.

Займёмся интерфейсом. В интересах времени опущу промежуточные варианты. Не думайте, будто всё получилось с первой попытки:

Дневник разработки «Pirate Parrot». Часть I: Дизайн и комбайн Python, Программирование, Дизайн, Логотип, Компьютерные игры, Видео, YouTube, Длиннопост

• Точка перед пунктом меню — индикатор новых торрентов. Сейчас мы сделаем только игры, а остальные оставим на будущее.

• ARW — переключатель «Await, Rejected, Weekly» или «Ожидают публикации, Отклонённые, Дайджест за неделю».

• Status — главная страница со статистикой и управлением программой.

• Если навести курсор на скриншот, то он появится вместо видео.

• «Original text» показывает текст описания торрента вместо видео и скриншотов.

• Удалять видео и скриншоты нельзя, да это и не нужно.

• Весь текст поста состоит из полей ввода, у которых нет заливки границ. Чтобы поправить, скажем, заголовок, достаточно нажать на него.

• Кнопка без подписи. И так понятно, что она делает.

• Логотип — это индикатор конца списка.

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

Ладно, достаточно желчи, займёмся кодом. На самом деле нам предстоит написать две программы:

1. Комбайн — по расписанию заходит на трекер, проверяет нет ли там чего нового и сохраняет информацию об играх в базу данных.

2. Панель управления — сайт, который читает ту же базу данных, позволяет нам редактировать инфу об игре и отправляет её в Телеграм.

— Зачем две, когда это может сделать одна?
— Горизонтальное масштабирование.

Когда программа обрастает новыми функциями, к примеру загрузкой свежих фильмов, ей нужно больше вычислительных мощностей. Если программа одна, то единственный способ дать ей их — это увеличить число процессоров и ОЗУ сервера, что называется «вертикальное масштабирование». Но память и процессоры не получится наращивать до бесконечности, а арендовать два сервера выйдет дешевле, чем один с аналогичной мощностью — это и называется «горизонтальное масштабирование».

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

Комбайну и панели управления всё равно, что они работают на разных серверах. Мы даже сможем запустить несколько Комбайнов и одну панель управления. Главное — единая база данных. Кстати, самое время её создать:

Дневник разработки «Pirate Parrot». Часть I: Дизайн и комбайн Python, Программирование, Дизайн, Логотип, Компьютерные игры, Видео, YouTube, Длиннопост

• url — ссылка на игру на трекере. Показывать её в Телеге не будем, а то канал забанят. @freedomist уже добаловался со своим ботом :-D

• rawTitle — название игры на трекере. Понадобится для поиска новых игр.

• rawText — весь текст описания игры с трекера.

• title, description, genre — эти поля будем отправлять в Телеграм.

• sysCPU, sysGPU, sysRAM — минимальные системные требования.

• ratingCritics и ratingUsers — рейтинг с Метакритика.

• screenshotsFilename — имена файлов всех скриншотов игры.

• selectedScreenshots — скриншоты, которые мы выбрали для публикации в Телеграм-канале.

• videoURL и videoFilename — трейлер с YouTube.

• status — статус торрента: «ожидает публикации / await», «отклонён / reject», «опубликован / published».

• date — дата добавления.

Прелюдии закончились, открываем редактор кода:

Дневник разработки «Pirate Parrot». Часть I: Дизайн и комбайн Python, Программирование, Дизайн, Логотип, Компьютерные игры, Видео, YouTube, Длиннопост

Если не программировали на Пайтоне, то ничего страшного — тоже недавно с ним познакомился :-) Вот что тут происходит:

На первой строчке мы импортируем файл «classTorrents». Грубо говоря, вместо неё будет код из этого файла, со всеми переменными и функциями, с которыми мы можем работать.

Помимо файлов, в Пайтоне можно импортировать целые программы — «модули», которые написаны другими программистами. Скажем, нам нужно записать что-то в базу данных под управлением MySQL. Мы могли бы написать код, который откроет подключение к этой СУБД, подготовит запрос, отправит и оповестит об успехе или ошибке. Но зачем тратить время? Находим в интернете модуль «mysql», устанавливаем, импортируем, передаём ему данные и логин/пароль об базы. Остальное он сделаем сам. Аналогично поступим со скачиваем видео с YouTube, получением HTML страниц и отправкой сообщений в Телеграм — всё это будут делать модули, бесплатно доступные в сети и написанные кем-то поумней нас с вами :-)

На четвёртой строчке кода мы создали объект класса «RuTrackerGames» из файла «classTorrents». Если не знакомы с «Объектно-ориентированным программированием / ООП», то представьте, что вы инженер и собираете новую модель самолёта. Как-то утром вы подходите к токарю и говорите:

— Иван Николаевич, а сделайте-ка мне десяток титановых болтов, пожалуйста.

Не сложно догадаться, на какие три буквы вас пошлёт мастер. И будет прав. Без чертежа болты никто делать не станет. Классы в ООП — это чертежи, а объекты — это болты. Без чертежа нельзя сделать болт, а с чертежом можно наклепать хоть вагон болтов. Но чертежом нельзя прикрепить крылья к фюзеляжу самолёта, так же и классы не выполняют код, пока не создашь объект.

Классы определяют свойства и методы объектов. Например, свойства болта: цвет, материал, размер и вес. Методы — то, что можно сделать с объектом — закрутить, раскрутить, потерять, сдать в металлолом или положить на чьё-то мнение. Методы в Пайтоне, так же как и функции, начинаются со слова «def»: «def propit_bolt():».

Классы могут наследовать методы и свойства других классов. Скажем, потребовались болты «№45» с левой резьбой. Вы делаете чертёж только резьбы, подписываете «для остальной части болта см. чертёж „Болт №45“» и Иван Николаевич приступает к работе.

Теперь у нас достаточно знаний, чтобы написать класс RuTrackerGames:

Дневник разработки «Pirate Parrot». Часть I: Дизайн и комбайн Python, Программирование, Дизайн, Логотип, Компьютерные игры, Видео, YouTube, Длиннопост

Наследование нам потребуется в будущем. Чтобы собрать игры с трекера «Demonoid», нужно создать класс «DemonoidGames» и написать два метода: получить список новых игр и описание каждой. Запись в базу и пропуск уже добавленных сделают родительские классы «Torrents» и «GamesTorrents». Придёт черёд собирать фильмы — новый класс «MovieTorrents», который наследует логику класса «Torrents». И так далее.

Если вы ещё не переключились на видео с котиками, чтобы дать психике отдохнуть, то напишем пару интересных функций. Скачиваем видео с YouTube:

Дневник разработки «Pirate Parrot». Часть I: Дизайн и комбайн Python, Программирование, Дизайн, Логотип, Компьютерные игры, Видео, YouTube, Длиннопост

Соберётесь использовать модуль «yt_dlp» в своём проекте — делайте его классом, а не функцией, т.к. единственный способ получить имя файла после загрузки, это вызвать функцию «filename_hook», в которую модуль передаст имя. Но чтобы вытащить его оттуда, придётся сделать костыль — объявить глобальную переменную «filename» на строках 22 и 24. Это скользкая дорожка. Всё начинается с безобидных глобальных переменных, и вот ты уже не замечаешь, как лепишь GOTO для выхода из условного оператора.

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

Дневник разработки «Pirate Parrot». Часть I: Дизайн и комбайн Python, Программирование, Дизайн, Логотип, Компьютерные игры, Видео, YouTube, Длиннопост
Дневник разработки «Pirate Parrot». Часть I: Дизайн и комбайн Python, Программирование, Дизайн, Логотип, Компьютерные игры, Видео, YouTube, Длиннопост

Все файлы программы:

• env — папка с модулями.

• app.py — файл запуска программы.

• classTorrents.py — классы Торрентов.

• classWebImage.py — классы для загрузки картинок с сайтов Fastpic, Imageban и др.

• config.py — настройки программы.

• gamesGenres.py — приводит названия жанров игр к единому формату. Например, меняет «First Person Shooter» на «Шутер от первого лица», а «Ролевая игра» на «РПГ». В коде класса «RuTrackerGames» вызов этой функции убран для простоты понимания.

• reportMaster.py — Телеграм-бот для сообщений об ошибках.

• requirements.txt — список подключённых модулей.

• support.py — мелкие функции, вроде скачивания видео, поиска по тексту и удаления мусора из него.

Настало время запустить Комбайн. Открываем терминал и «Поехали!»:

Проверим что он записал в базу данных:

Дневник разработки «Pirate Parrot». Часть I: Дизайн и комбайн Python, Программирование, Дизайн, Логотип, Компьютерные игры, Видео, YouTube, Длиннопост

Супер! Осталось сделать панель управления и оформить Телеграм-канал. Этим займёмся в следующей части ;-)

А пока зацените результат: https://t.me/flint_games

Показать полностью 12 1
[моё] Python Программирование Дизайн Логотип Компьютерные игры Видео YouTube Длиннопост
13
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии