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

Пикабу Игры +1000 бесплатных онлайн игр

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

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

Детектив - логические головоломки

Головоломки, Казуальные, Логическая

Играть
Болты и гайки - это головоломка, в которой вам нужно откручивать болты с досок! Ваша задача - выбрать правильный болт для откручивания, чтобы вы могли открутить все доски! Соревнуйтесь с друзьями и коллегами!

Болты и Гайки

Казуальные, Головоломки, Логическая

Играть
Это увлекательная головоломка с большим количеством уникальных уровней.

Блок пазл. Новый уровень

Казуальные, Головоломки, Логическая

Играть

Копай Дыру в России

Симуляторы, Приключения, Экшены

Играть
Управляйте маятником, чтобы построить самую высокую (и устойчивую) башню из падающих сверху постов. Следите за временем на каждый бросок по полоске справа: если она закончится, пост упадет мимо башни.

Башня

Аркады, Строительство, На ловкость

Играть

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

  • CharlotteLink CharlotteLink 1 пост
  • Syslikagronom Syslikagronom 7 постов
  • BydniKydrashki BydniKydrashki 7 постов
Посмотреть весь топ

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

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

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

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

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

API

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

Программирование IT Python Искусственный интеллект ВКонтакте Нейронные сети Разработка Все
130 постов сначала свежее
7
dendymc
dendymc
1 год назад

Telegram-бот PLAY365: меняем розыгрыши призов в чатах⁠⁠

Привет, Пикабу!

Сегодня я хочу рассказать вам о проекте, над которым я и мой друг работали последние 6 месяцев. Называется он PLAY365 – и это игровой бот для групповых чатов Telegram.

Telegram-бот PLAY365: меняем розыгрыши призов в чатах Бот, Telegram, Игры, Розыгрыш, Интерактив, API, Проект, Развлечения, Креатив, Длиннопост

Логотип PLAY365

Почему мы решили его создать? Все очень просто: розыгрыши всяких призов в больших чатах обычно проходят очень скучно. Все записываются в один большой список/группу/бота, а после окончания записи – админ запускает рандомайзер (рандстафф.ру, рандомус.ру, боты рандома, просто пальцем в небо сам и т.д.), который и выбирает номер победителя из списка. В качестве подтверждения результатов админ либо выкладывает скрин/видео итогов рандомайзера, либо дает ссылку на страничку с розыгрышем. И на наш взгляд, такой подход – мало того, что скучный, так еще и не всегда честный - рандомайзер можно бесконечно перекручивать под нужное число. К тому же, от участника не требуется вообще никакой активности: запишись в список и мониторь результаты.
Даже вышедший недавно официальный метод розыгрышей в Telegram использует такой же подход, разве что теперь можно для записи в список установить обязательные для подписки каналы, а честность рандома обеспечена самим Telegram:

Telegram-бот PLAY365: меняем розыгрыши призов в чатах Бот, Telegram, Игры, Розыгрыш, Интерактив, API, Проект, Развлечения, Креатив, Длиннопост

Самый главный его минус - необходимость приобретать Telegram Premium для выставления в качестве приза! Хоть опцию добавить свой приз к подписке предусмотрели, и на том спасибо...

Поэтому пришла идея: сделать что-то интересное, честное, интерактивное, требующее участия участника, и обязательно – в самом Telegram, чтобы не переходить на сторонние платформы и сайты.

После обсуждения общей концепции, самой первой была придумана игра «Баскетбол». Если в Telegram отправить в чат эмодзи баскетбольного мяча (🏀), то будет отыграна анимация броска мяча в кольцо, у которой есть 5 вариаций: 3 из них покажут, что мяч промахнулся, 2 – что попал, т. е. шансы на попадание – 40%, причем случайность определяется самим Telegram и на нее никак нельзя повлиять. Мы решили использовать это и сделали скрипт, который проводит игру в три раунда: в первом раунде игрок должен забить хотя бы 1 раз из 3 бросков чтобы пройти дальше, во втором – 2 из 3, в третьем – 3 из 3. Если игрок не попадает нужное количество раз – он выбывает. Чей сейчас ход, сколько кто набрал очков и так далее - все считает бот самостоятельно.

Telegram-бот PLAY365: меняем розыгрыши призов в чатах Бот, Telegram, Игры, Розыгрыш, Интерактив, API, Проект, Развлечения, Креатив, Длиннопост

Вот так "Баскетбол" выглядит в чате

Потом мы начали думать, как реализовать запись на игру, и вспомнили об inline-клавиатуре в Telegram API, которая позволяет создавать кнопки в сообщениях от бота. После серии экспериментов, сделали такой порядок:

  1. Админ запускает игру, например Баскетбол, командой /basket

  2. Бот объявляет старт записи на игру сообщением в чат, под сообщением есть три кнопки:

    1. «Присоединиться» - добавит игрока в список участников, при повторном нажатии – удалит его из списка;

    2. «Статус» - сообщит игроку, есть ли он в списке или нет;

    3. «Как играть» - выведет краткие правила текущей игры во всплывающем окне.

Telegram-бот PLAY365: меняем розыгрыши призов в чатах Бот, Telegram, Игры, Розыгрыш, Интерактив, API, Проект, Развлечения, Креатив, Длиннопост

Запись на игру

Telegram-бот PLAY365: меняем розыгрыши призов в чатах Бот, Telegram, Игры, Розыгрыш, Интерактив, API, Проект, Развлечения, Креатив, Длиннопост

Всплывающее окно "Как играть"

После того, как нужное админу количество участников записалось на игру – он стартует ее командой /next, и дальше бот все делает сам – бросает мяч за игроков, считает очки, сообщает о вылетевших и победителе:

Telegram-бот PLAY365: меняем розыгрыши призов в чатах Бот, Telegram, Игры, Розыгрыш, Интерактив, API, Проект, Развлечения, Креатив, Длиннопост

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

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

После реализации ключевых функций дело пошло как по маслу, и мы добавили еще 7 игр:

  1. Киллер (/killer) - каждый раунд бот выбирает случайного киллера из списка игроков и даёт ему список из 10 потенциальных жертв. Киллер пишет в чат номер жертвы для "убийства", если не успел - сам выбывает. Побеждает последний оставшийся в живых. Кстати, иногда киллер может промахнуться!

  2. Бинго (/bingo) - игроки загадывают числа из заданного интервала, а потом бот постепенно оглашает случайные числа из него. Задача – отследить совпадение всех своих чисел со случайными и успеть написать "Бинго". Кто ошибся – выбывает.

  3. Рулетка (/roulette) - бот выбирает случайного игрока, и тот должен успеть написать что угодно в чат. Кто промедлил - выбывает. Побеждает последний оставшийся или ответивший в свою очередь.

  4. Заряд (/charge) - игроки как можно быстрее "заряжают батарейку" своими сообщениями в чате. Кто первый наберёт нужное количество - победил.

  5. Больше-меньше (/updown) - Игроки отгадывают число из числового интервала. Каждый раунд бот пишет текущий интервал и даёт случайному игроку возможность написать число из него. После ответа игрока бот говорит - больше загаданное число написанного или меньше, и скорректирует интервал. Игра продолжается, пока кто-то не назовёт точное число.

  6. Пандора (/pandora) - игроки по очереди выбирают ключи, чтобы открывать ящики. В ящиках - разные бонусы или штрафы. Задача - найти Грааль, кто нашёл – сразу побеждает.

  7. Кинг-Конг (/kong) - В каждом раунде один игрок выбирается в качестве мишени Кинг-Конга. Цель может спрятаться или рискнуть подразнить Кинг-Конга, чтобы уменьшить или увеличить шанс поимки следующего игрока (и себя самого). Побеждает последний оставшийся непойманный игрок.

Также, для каждой игры добавили настройки – сколько длится ожидание ответа игрока, сколько раундов будет в игре, может ли промахиваться киллер и так далее:

Telegram-бот PLAY365: меняем розыгрыши призов в чатах Бот, Telegram, Игры, Розыгрыш, Интерактив, API, Проект, Развлечения, Креатив, Длиннопост

Настройки игры "Бинго"

Потом у нас появились мини-игры, одна из них – классическая «Ферма»: нужно выращивать растения разной редкости, поливать и удобрять их, а после того, как они вырастут – собирать и продавать за Респекты (внутриигровую валюту). Более редкие растения приносят больше Респектов.

Telegram-бот PLAY365: меняем розыгрыши призов в чатах Бот, Telegram, Игры, Розыгрыш, Интерактив, API, Проект, Развлечения, Креатив, Длиннопост

Ферма - теперь и в Telegram!

Респектами можно делиться, покупать на них новые растения, а также менять их на токены, которые, в свою очередь, можно потратить на покупку уникальности – например, сделать так, что в списке игроков твое имя будет отображаться не как @username, а как заданный тобой текст (например, ПоБеДиТеЛь777).

Telegram-бот PLAY365: меняем розыгрыши призов в чатах Бот, Telegram, Игры, Розыгрыш, Интерактив, API, Проект, Развлечения, Креатив, Длиннопост

Токены также можно приумножить (или потерять) в премиум-рулетке

Чтобы админы могли модерировать игры – добавили /ban (запретит игроку записываться на игры в течение определенного срока), /mute (запретит игроку писать сообщения в чат), /kick (удалит игрока из текущей игры). Каждую функцию можно отменить:

Telegram-бот PLAY365: меняем розыгрыши призов в чатах Бот, Telegram, Игры, Розыгрыш, Интерактив, API, Проект, Развлечения, Креатив, Длиннопост

Если просто ввести /ban, без указания длительности - срок будет расти динамически

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

Это позволяет проводить игры только для старожилов или активных участников чата:

Telegram-бот PLAY365: меняем розыгрыши призов в чатах Бот, Telegram, Игры, Розыгрыш, Интерактив, API, Проект, Развлечения, Креатив, Длиннопост

Такое окно появится, если попробовать присоединиться к игре с лимитом

И в итоге, когда все было сделано и мы начали тестировать бота – неожиданно для себя мы уперлись в ограничения Telegram API по количеству отправляемых ботом сообщений: бот «падал» даже при нескольких, запущенных одновременно, играх. Чтобы это обойти и дать возможность всем играть нормально, сначала мы хотели создать много ботов, чтобы в чате мог быть только какой-то один, но это показалось слишком сложным и плохо масштабируемым при большом спросе на бота. Поэтому был придуман другой подход – сперва админ создает своего бота через @BotFather, получает его API-Token (пример такого токена - 1234567890:abcdefghijABCDEfghiJKLMNopqrSTUVwxyz), и потом связывает своего бота с системой PLAY365, отправив API-Token нашему основному боту, @play365_bot:

Telegram-бот PLAY365: меняем розыгрыши призов в чатах Бот, Telegram, Игры, Розыгрыш, Интерактив, API, Проект, Развлечения, Креатив, Длиннопост

Главное меню основного бота

После этого админу становится доступен весь функционал PLAY365 в созданном им боте, который он и добавит в свой чат. Такой подход позволяет нам (и админу) вообще не беспокоиться об ограничениях Telegram.

Чтобы окупать сервера и дальнейшее создание игр и фич – мы прикрутили к боту монетизацию посредством подписки:

Telegram-бот PLAY365: меняем розыгрыши призов в чатах Бот, Telegram, Игры, Розыгрыш, Интерактив, API, Проект, Развлечения, Креатив, Длиннопост

Еще мы добавили себе возможность применять промокоды, которые планируем иногда публиковать. Для Пикабу, например, это PIKABU365, который бесплатно применит тариф NEWBIE на 1 месяц к вашему боту.

В целом, проект получился очень насыщенный, с действительно большим количеством функционала: например, я не описал тут возможность добавления игроков-ботов в игры, логи игр, статистику игроков, добавление модераторов, плейсхолдеры для текстовой рекламы в сообщении с записью на игру и в объявлении победителя, призыв участников чата на игру... Всё это мы постарались описать на сайте-инструкции проекта, ссылка в самом конце поста. Если же есть любые вопросы/предложения/идеи - не стесняйтесь писать их тут, в комментариях, или напрямую к нам в саппорт, ссылка также в самом конце.

Отдельно хочу ответить на один из самых частых вопросов (пусть и задаваемый в разных вариациях) - это НЕ СКАМ, НЕ РУЛЕТКА, тут НЕЛЬЗЯ ВЫВОДИТЬ ДЕНЬГИ, это НЕ АЗАРТНАЯ ИГРА, НЕ СТАВКИ!
Это просто игровой бот, который делает общение в чатах чуточку интереснее и веселее.

Ссылки:
Официальный сайт проекта: play365.super.site
Основной бот в Telegram: t.me/play365_bot
Техподдержка и вопросы: t.me/play365_support

Спасибо за внимание и хороших игр!

Показать полностью 13
[моё] Бот Telegram Игры Розыгрыш Интерактив API Проект Развлечения Креатив Длиннопост
5
11
mrven
mrven
1 год назад
Лига Геймеров

Как я сделал паблик со случайными играми из Steam⁠⁠

В очередной раз, когда я бессмысленно бродил по Steam, меня посетила идея - сделать (в первую очередь для себя) паблик, который периодически будет выбирать случайную игру и постить в ВК пост с кратким описанием, рейтингом, скриншотами и трейлерами. Таким образом, можно не отрываясь от обычного браузинга соц.сетей получать идеи "на поиграть", да и в целом подтянуть свою эрудицию в мире игр.

Как я сделал паблик со случайными играми из Steam Игры, Steam, ВКонтакте, Telegram, API, Новости игрового мира, Игровые обзоры, Длиннопост

И так. Идея есть, а как реализовать? Первое, что приходит на ум - взять Steam API и с помощью него получать списки "Лидеров продаж", "Новинок" и всей библиотеки Steam, затем случайно выбирать игру из этих списков и постить.

Получение информации от Steam

Уже на этапе изучения API возникли сложности:

  • Steam умеет отдавать только список всех игр в магазине

  • Нельзя получить рейтинг игры

  • Нельзя получить теги игры

Ну что ж. В целом выглядит неприятно, но вполне решаемо. У Steam есть отдельные страницы для "Лидеров продаж" и "Новинок", что позволяет парсингом страницы получить все ссылки на игры с этих страниц. Так решаем первую проблему.

Вторая и треться проблема решаются аналогично, но ищем уже рейтинг и теги непостредственно на странице интересующей нас игры.

Хотелось бы ещё получать информацию о совместимости со Steam Deck, но они не дают эту информацию ни в API ни на странице игры. Очень странно.

Выбор игры

Как же выбирать игру из списка? Если мы будем роллить рандомно игры (особенно из всей библиотеки), то будет попадаться один шлак. Поэтому надо задать какие-то рамки, но и сильно зарезать выбор не хотелось. Поэтому фильтров для выбора всего 3:

  1. У игры есть отзывы

  2. Эти отзывы положительные

  3. Игра не была ещё опубликована в паблике

Постинг по таймеру

Т.к. в первую очередь паблик делал для себя, то тут должен быть элемент неожиданности "А что же запоститься в этот раз??". Поэтому вариант запуска скрипта руками отпадает.

СОбственно был арендован дешёвый VPS, на котором по таймеру запускается скрипт.

Ну и раз уже всё сделано для ВК, то и Telegram грех не добавить. Тем более из-за того, что это родственные продукты,то и API у них схожие и особых проблем добавление кросспостинга не создаёт.

Как я сделал паблик со случайными играми из Steam Игры, Steam, ВКонтакте, Telegram, API, Новости игрового мира, Игровые обзоры, Длиннопост

Немного технических подробностей

Для написания скрипта использовал Python с голыми requests, Beautiful Soap для парсинга страниц и wget для скачивания скриншотов и трейлеров. На сервере скрипт запускается по времени через Crontab.

Спасибо за внимание. Если тема паблика/канала вам показалась интересной - добро пожаловать!

Показать полностью 2
[моё] Игры Steam ВКонтакте Telegram API Новости игрового мира Игровые обзоры Длиннопост
6
15
alsukharev
alsukharev
1 год назад
Лига фрилансеров

Выключить ПК по звонку⁠⁠

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

Задача оказалась не сложная. Выбрали ip телефонию, настроили в ней webhook (отправка данных на url адрес) на событие инициализации звонка. На этом адресе разместили php скрипт который сверял номер с которого свершали звонок. Далее с помощью api телефонии сбрасывали звонок и отправляли get запрос на ip адрес компьютера, где вызывалась команда на выключение. Php скрипт при успешном ответе отправлял смс (по api сервиса отправки смс) о том, что ПК выключен.

Как думаете, для чего это нужно было клиенту?

[моё] API PHP Ip-телефония Текст
41
8
AlberTikys
AlberTikys
1 год назад
Конструкторский отдел

Макрос для сохранения чертежа в PDF⁠⁠

Друзья конструктора, доброго субботнего дня.

Полдня бился за то, чтобы найти работающий макрос для SOLIDWORKS, который сохранял чертеж в PDF. Но добился своего (Save Drawing as PDF, если интересно).

А теперь задачка. Как сохранять файл в подпапку, в которой лежит чертёж? Прошерстил всё, что можно (подборка макросов Sw_Plus не помогла), не нашёл готового варианта.

К примеру, чертеж лежит в папке "C://Пупа", а надо сохранить PDF в папку "С://Пупа/PDF". Ну или чтоб макрос сам создавал эту подпапку, тогда ваще идеальный вариант.

В написании макросов не силён, закидайте тапками.

Для информации, SOLIDWORKS 2020, базовые макросы использую активно.

Ссылка на макрос: https://drive.google.com/file/d/18kE_eWY2U4k_VqIsUC9E6YgdcSd...

[моё] Solidworks Инженер-конструктор Макрос API Vba Без рейтинга Сила Пикабу Текст
9
1
DELETED
1 год назад

Классическая форма логина Яндекс.Паспорта при перенаправлении с эмбеда Музыки⁠⁠

Классическая форма логина Яндекс.Паспорта при перенаправлении с эмбеда Музыки Яндекс, Яндекс Музыка, Ностальгия, 2000-е, API, Аутентификация, Логин, Длиннопост

Если здесь присутствуют разработчики из Яндекса, прошу не убирать винтажную логинку а-ля "Войти в почту" ну хотя бы из такого отшиба сайта... плиз...

Показать полностью 1
Яндекс Яндекс Музыка Ностальгия 2000-е API Аутентификация Логин Длиннопост
1
13
user7286853
user7286853
1 год назад
Программирование на python
Серия Как я разрабатывал @lifestyle_tracker_bot

Как я разрабатывал чат-бот для Telegram, отслеживающий питание и тренировки. Часть 2 — Вы хотите кушац?⁠⁠

Ссылка на 1 часть, где мы говорили о тренировках:

Как я разрабатывал чат-бот для Telegram, отслеживающий питание и тренировки

Как я разрабатывал чат-бот для Telegram, отслеживающий питание и тренировки. Часть 2 — Вы хотите кушац? IT, Python, Telegram, Чат-бот, Программирование, Telegram бот, API, Длиннопост

Теперь настало время поговорить о второй составляющей чат-бота - дневник питания (он же калькулятор калорий).

Что по БД?

В отличие от БД с физическими упражнениями здесь есть из чего выбрать. Существует куча баз продуктов питания с доступом по API, к примеру:

  • Open Food Facts

  • Fatsecret

  • FoodData Central от Министерства сельского хозяйства США + можно скачать саму БД

  • Nutritionix

Остановиться было решено на... Nutritionix, так как она обладает одной интересной фишкой - распознавание всех продуктов из одного запроса. То есть, мы можем просто послать на сервис строку вида "3 вареных яйца и банка пива", а сервис выудит все перечисленные продукты их количество/вес/объем и отправит в ответе информацию по каждой позиции. Например:

Как я разрабатывал чат-бот для Telegram, отслеживающий питание и тренировки. Часть 2 — Вы хотите кушац? IT, Python, Telegram, Чат-бот, Программирование, Telegram бот, API, Длиннопост

При этом если мы не укажем конкретный вес/объем продукта, то сервис просто возьмет стандартное значение: 1 вареное яйцо - 50 грамм или 1 кусочек хлеба - 29 грамм. Кому интересно - можете затестить данный функционал сервиса по ссылке ниже:

https://www.nutritionix.com/natural-demo

Кстати, подобный функционал у Nutritionix есть и для тренировок - ввел объем выполненного упражнения (например, пробежал 30 минут) и получил количество потраченных калорий, но, сейчас не об этом.

Помимо калорий, белков, жиров у углеводов сервис предоставляет и другие составляющие продукта - минералы, витамины, алкоголь, вода, соль, сахар и другие - всего 161 позиция.

Но, как вы заметили, сервис принимает запросы только на английском языке. Как это нас остановит? Никак. Что же тогда делать? Переводить...

Трудности (нет) перевода

Перевести простейшее предложение вида "2 помидора, ложка оливкового масла и зубчик чеснока" не будет сложной задачей для любого популярного переводчика, поэтому давайте воспользуемся функционалом одного из них. Для этого давайте выберем какой-нибудь онлайн-переводчик и Python-библиотеку под него, например googletrans для Google Переводчика.

Шаг 1. Устанавливаем библиотеку

pip install googletrans

Шаг 2. Переводим

from googletrans import Translator

def translate_from_rus_to_eng(text):

translator = Translator()

translated = translator.translate(text, src='ru', dest='en')

return translated.text

Ключи к успеху

Итак, пользователь что-то ввел, мы это перевели, а теперь настало время отправить запрос к Nutritionix. Однако, для начала нам нужно получить парочку ключей для взаимодействия с сервисом. Для этого переходим по данной ссылке, регистрируемся и копируем Application ID и Application Key.

Как я разрабатывал чат-бот для Telegram, отслеживающий питание и тренировки. Часть 2 — Вы хотите кушац? IT, Python, Telegram, Чат-бот, Программирование, Telegram бот, API, Длиннопост

Код крутится - бот мутится

У нас есть д̶в̶а̶ ̶п̶а̶к̶е̶т̶и̶к̶а̶ ̶т̶р̶а̶в̶ы̶,̶ ̶с̶е̶м̶ь̶д̶е̶с̶я̶т̶ ̶п̶я̶т̶ь̶ ̶а̶м̶п̶у̶л̶ ̶м̶е̶с̶к̶а̶л̶и̶н̶а̶,̶ ̶5̶ ̶п̶а̶к̶е̶т̶и̶к̶о̶в̶ ̶д̶и̶э̶т̶и̶л̶а̶м̶и̶д̶а̶ ̶л̶и̶з̶е̶р̶г̶и̶н̶о̶в̶о̶й̶ ̶к̶и̶с̶л̶о̶т̶ы̶ ̶и̶л̶и̶ ̶Л̶С̶Д̶,̶ ̶с̶о̶л̶о̶н̶к̶а̶,̶ ̶н̶а̶п̶о̶л̶о̶в̶и̶н̶у̶ ̶н̶а̶п̶о̶л̶н̶е̶н̶н̶а̶я̶ ̶к̶о̶к̶а̶и̶н̶о̶м̶,̶ ̶и̶ ̶ц̶е̶л̶о̶е̶ ̶м̶о̶р̶е̶ ̶р̶а̶з̶н̶о̶ц̶в̶е̶т̶н̶ы̶х̶ ̶а̶м̶ф̶е̶т̶а̶м̶и̶н̶о̶в̶,̶ ̶б̶а̶р̶б̶и̶т̶у̶р̶а̶т̶о̶в̶ ̶и̶ ̶т̶р̶а̶н̶к̶в̶и̶л̶и̶з̶а̶т̶о̶р̶о̶в̶,̶ ̶а̶ ̶т̶а̶к̶ ̶ж̶е̶ ̶л̶и̶т̶р̶ ̶т̶е̶к̶и̶л̶ы̶,̶ ̶л̶и̶т̶р̶ ̶р̶о̶м̶а̶,̶ ̶я̶щ̶и̶к̶ ̶«̶Б̶а̶д̶в̶а̶й̶з̶е̶р̶а̶»̶,̶ ̶п̶и̶н̶т̶а̶ ̶ч̶и̶с̶т̶о̶г̶о̶ ̶э̶ф̶и̶р̶а̶,̶ ̶и̶ ̶1̶2̶ ̶п̶у̶з̶ы̶р̶ь̶к̶о̶в̶ ̶а̶м̶и̶л̶н̶и̶т̶р̶и̶т̶а̶ 2 ключа для API и переведенный запрос, так что - давайте кодить.

Все запросы (POST) будем посылать на следующий URL, сохранив его в переменную:

natural_url = https://trackapi.nutritionix.com/v2/natural/nutrients

  1. В начале подключаем библиотеку requests и собираем заголовки из Content-Type, Application ID и Application Key:

    import requests

    # Заголовки

    headers = { "Content-Type": "application/json",

    "x-app-id": '672c6c24',

    "x-app-key": '6f4ba779b23cefe6adf151de7860fc87' }

  2. Собираем тело запроса, который включает переведенный запрос и параметра timezone (оставим по дефолту US/Eastern, пока это неважно):

# Тело запроса

body = { "query": query,

"timezone": "US/Eastern" }

3. Отсылаем POST-запрос на сервер Nutritionix, куда включаем URL, заголовки и тело запроса, а его ответ сохраняем в переменную response:

# Выполнение POST-запроса

response = requests.post(natural_url, json=body, headers=headers)

4. Проверяем что запрос удался и вернул код 200 (OK), переводим его в JSON и получаем значение по ключу 'foods', где как раз и лежит список словарей с информацией по каждому продукту:

if response.status_code == 200:

data = response.json() foods = data["foods"]

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

class NutritionixFood: def __init__(self, food:dict) -> None:

self.food_name = food.get('food_name')

self.brand_name = food.get('brand_name') self.serving_qty = food.get('serving_qty')

self.serving_weight_grams = food.get('serving_weight_grams')

self.nf_calories = food.get('nf_calories')

self.nf_total_fat = food.get('nf_total_fat')

self.nf_saturated_fat = food.get('nf_saturated_fat')

self.nf_cholesterol = food.get('nf_cholesterol')

self.nf_total_carbohydrate = food.get('nf_total_carbohydrate')

self.nf_dietary_fiber = food.get('nf_dietary_fiber')

self.nf_sugars = food.get('nf_sugars')

self.nf_protein = food.get('nf_protein')

self.nf_potassium = food.get('nf_potassium')

self.nf_p = food.get('nf_p')

self.full_nutrients = food.get('full_nutrients')

self.photo_url = food.get('photo', {}).get('highres')

self.barcode = food.get('upc')

5. Осталось только воспользоваться генератором списка и передать каждый словарь из списка словарей в конструктор класса NutritionixFood. В итоге мы получим список объектов данного класса.

result = [NutritionixFood(food) for food in foods]

Готово! Весь код можете просмотреть на гитхаб:

https://github.com/Molot999/Nutritionix

Теперь осталось только объединить это с библиотекой telebot:

  1. Запросить ввод текста с перечислением съеденного

  2. Перевести текст на английский

  3. Отправить текст через API Nutritionix

  4. Получить ответ сервера

  5. "Конвертировать" ответ сервера в список объектов класса NutritionixFood

  6. Вывести список продуктов пользователю, переведя названия продуктов с английского на русский:

Как я разрабатывал чат-бот для Telegram, отслеживающий питание и тренировки. Часть 2 — Вы хотите кушац? IT, Python, Telegram, Чат-бот, Программирование, Telegram бот, API, Длиннопост

Дьявол кроется в деталях

Как я говорил выше, кроме основных составляющих пищи, которые в основном нас и интересуют (КБЖУ), данный сервис предоставляет еще кучу других. Некоторые из них, например сахар или калий, хранятся в атрибутах класса в готовом виде (nf_sugars и nf_potassium соответственно), но основная часть содержится в атрибуте full_nutrients со списком словарей, каждый из которых имеет следующие ключи:

  • ID нутриента

  • Его количество

Например, для запроса "3 boiled eggs" мы получим следующее:

[ {"attr_id": 203, "value": 18.87}, {"attr_id": 204, "value": 15.915}, {"attr_id": 205, "value": 1.68}, {"attr_id": 207, "value": 1.62}, {"attr_id": 208, "value": 232.5}, {"attr_id": 221, "value": 0}, {"attr_id": 255, "value": 111.93}, {"attr_id": 262, "value": 0}, {"attr_id": 263, "value": 0}, {"attr_id": 268, "value": 973.5}, {"attr_id": 269, "value": 1.68}, {"attr_id": 291, "value": 0}, {"attr_id": 301, "value": 75}, {"attr_id": 303, "value": 1.785}, {"attr_id": 304, "value": 15}, {"attr_id": 305, "value": 258}, {"attr_id": 306, "value": 189}, {"attr_id": 307, "value": 186}, {"attr_id": 309, "value": 1.575}, {"attr_id": 312, "value": 0.0195}, {"attr_id": 313, "value": 7.2}, {"attr_id": 315, "value": 0.039}, {"attr_id": 317, "value": 46.2}, {"attr_id": 318, "value": 780}, {"attr_id": 319, "value": 222}, {"attr_id": 320, "value": 223.5}, {"attr_id": 321, "value": 16.5}, {"attr_id": 322, "value": 0}, {"attr_id": 323, "value": 1.545}, {"attr_id": 324, "value": 130.5}, {"attr_id": 326, "value": 3.3}, {"attr_id": 328, "value": 3.3}, {"attr_id": 334, "value": 15}, {"attr_id": 337, "value": 0}, {"attr_id": 338, "value": 529.5}, {"attr_id": 401, "value": 0}, {"attr_id": 404, "value": 0.099}, {"attr_id": 405, "value": 0.7695}, {"attr_id": 406, "value": 0.096}, {"attr_id": 410, "value": 2.097}, {"attr_id": 415, "value": 0.1815}, {"attr_id": 417, "value": 66}, {"attr_id": 418, "value": 1.665}, {"attr_id": 421, "value": 440.7}, {"attr_id": 430, "value": 0.45}, {"attr_id": 431, "value": 0}, {"attr_id": 432, "value": 66}, {"attr_id": 435, "value": 66}, {"attr_id": 454, "value": 0.9}, {"attr_id": 501, "value": 0.2295}, {"attr_id": 502, "value": 0.906}, {"attr_id": 503, "value": 1.029}, {"attr_id": 504, "value": 1.6125}, {"attr_id": 505, "value": 1.356}, {"attr_id": 506, "value": 0.588}, {"attr_id": 507, "value": 0.438}, {"attr_id": 508, "value": 1.002}, {"attr_id": 509, "value": 0.7695}, {"attr_id": 510, "value": 1.1505}, {"attr_id": 511, "value": 1.1325}, {"attr_id": 512, "value": 0.447}, {"attr_id": 513, "value": 1.05}, {"attr_id": 514, "value": 1.896}, {"attr_id": 515, "value": 2.466}, {"attr_id": 516, "value": 0.6345}, {"attr_id": 517, "value": 0.7515}, {"attr_id": 518, "value": 1.404}, {"attr_id": 601, "value": 559.5}, {"attr_id": 606, "value": 4.9005}, {"attr_id": 607, "value": 0}, {"attr_id": 608, "value": 0}, {"attr_id": 609, "value": 0.0045}, {"attr_id": 610, "value": 0.0045}, {"attr_id": 611, "value": 0.0045}, {"attr_id": 612, "value": 0.0525}, {"attr_id": 613, "value": 3.5235}, {"attr_id": 614, "value": 1.242}, {"attr_id": 617, "value": 5.5875}, {"attr_id": 618, "value": 1.782}, {"attr_id": 619, "value": 0.0525}, {"attr_id": 620, "value": 0.2235}, {"attr_id": 621, "value": 0.057}, {"attr_id": 626, "value": 0.465}, {"attr_id": 627, "value": 0}, {"attr_id": 628, "value": 0.045}, {"attr_id": 629, "value": 0.0075}, {"attr_id": 630, "value": 0.0045}, {"attr_id": 631, "value": 0}, {"attr_id": 645, "value": 6.1155}, {"attr_id": 646, "value": 2.121}, ]

Чтобы сопоставить attr_id с реальным "веществом" необходимо обратиться к справочной таблице:

Как я разрабатывал чат-бот для Telegram, отслеживающий питание и тренировки. Часть 2 — Вы хотите кушац? IT, Python, Telegram, Чат-бот, Программирование, Telegram бот, API, Длиннопост

Здесь нас интересуют лишь самые основные колонки: A (ID), D (Название) и E (единица измерения). Для простоты взаимодействия можно скопировать данную таблицу в Excel, а уже из него спарсить все это дело в таблицу БД. На всякий случай оставил тег USDA (может когда-то пригодится) и добавил колонку ru_name, в которую потом можно будет "запихнуть" русское название нутриента, прогнав колонку name, к примеру, через тот же самый googletrans.

Как я разрабатывал чат-бот для Telegram, отслеживающий питание и тренировки. Часть 2 — Вы хотите кушац? IT, Python, Telegram, Чат-бот, Программирование, Telegram бот, API, Длиннопост

Кстати, в этой же справочной таблице на 2 листе есть ссылка на документ от FDA (Агентство Министерства здравоохранения и социальных служб США), где прописаны нормы потребления нутриентов. Здесь в основном нас интересует колонка 3 (взрослые и дети >= 4 лет),ну а кого-то 6 (беременные и кормящие женщины).

Как я разрабатывал чат-бот для Telegram, отслеживающий питание и тренировки. Часть 2 — Вы хотите кушац? IT, Python, Telegram, Чат-бот, Программирование, Telegram бот, API, Длиннопост

Вернемся к коду и создадим класс, представляющий каждый нутриент:

class NutritionixNutrient: def __init__(self, usda_tag, name, unit, ru_name) -> None:

self.usda_tag = usda_tag

self.name = name

self.ru_name = ru_name

self.unit = unit self.value = None

И начинаем проходиться по тому самому списку словарей

[ {"attr_id": 203, "value": 18.87}, {"attr_id": 204, "value": 15.915}, {"attr_id": 205, "value": 1.68}, {"attr_id": 207, "value": 1.62}, {"attr_id": 208, "value": 232.5}, ... ]

Подобным образом:

# Получаем список словарей из объекта NutritionixFood

full_nutrients = food.get('full_nutrients')

# Создаем пустой список для объектов NutritionixNutrient

food_nutrients = []

# Проходимся по каждому словарю из списка словарей

for nutrient in full_nutrients:

# Получаем из БД инфо о нутриенте по attr_id и пихаем ее в конструктор класса #NutritionixNutrient food_nutrient=NutritionixNutrient(db.get_nutritionix_nutrient_info(nutrient_info.get('attr_id')))

# Отдельно устанавливаем количество нутриента

food_nutrient.value = nutrient_info.get('value')

# Добавляем объект класса NutritionixNutrient в список

food_nutrients.append(food_nutrient)

# А тут проводим какие-либо манипуляции с food_nutrients

Как я разрабатывал чат-бот для Telegram, отслеживающий питание и тренировки. Часть 2 — Вы хотите кушац? IT, Python, Telegram, Чат-бот, Программирование, Telegram бот, API, Длиннопост

В итоге получим список объектов класса NutritionixNutrient, каждый из которых содержит информацию о конкретном нутриенте из продукта. А имея информацию обо всех нутриентах, потребленных в течение определенного периода уже можно сделать выводы о его диете (много соли, мало витамина B и т.д.) и дать соответствующие рекомендации, опираясь на вышеописанные нормы FDA или национальные.

Затестить функционал по добавлению продуктов питания можете в данном чат-боте совершенно бесплатно.

Кстати, а почему бы не облегчить жизнь пользователю и дать ему возможность просто записать голосовое сообщение со всем съеденным? Поговорим об это в части №3...

Показать полностью 7
[моё] IT Python Telegram Чат-бот Программирование Telegram бот API Длиннопост
5
SonKan
SonKan
1 год назад

Как исправить ошибку с Квотами?⁠⁠

Я сидел на Ютубе и на днях начало вылезать ошибка " Resource has been exhausted (e.g. check quota). " , я на это не обращал сильно внимания ведь бывают моменты когда телефон глючит, и всё нормально думал.
Позже я заметил что это всё чаще и чаще случается, и я не знаю в чём проблема, и я начал Гуглить.
Вот собственно проблема:

Как исправить ошибку с Квотами? YouTube, Youtube Vanced, Проблема, Интернет, Google, API, Длиннопост

В интернете писали что такая проблема возникает при написании многих комментариев, что-то подобное, типо слишком много запросов, но я не знаю почему именно у меня такая проблема...
( Официальный сайт от Гугла почитал, в реддите там было тоже на английском, но везде писали про спам комментариев что человек делал, или же программу, по этому и лимит исчерпан ).
Я просто хочу отписаться от каналов Ютуб, мне это надо ( просто пользуюсь уже аккаунтом больше года и на многих кого подписался, и понял что надо отписаться обратно сейчас от многих, хотябы от 300 , чтобы был подписан хотябы на 100 блогеров )
Я не использую там программы которые бы спамили или что-то подобное, Ютуб для меня просто для просмотра роликов, так почему возникает проблема??
У меня есть две версии Ютуб, Premium ( типо взлом ), и обычная, может проблема в этом?
или же проблема в том что в обоих приложениях у меня есть много скаченных видео оффлайн, вот:

Как исправить ошибку с Квотами? YouTube, Youtube Vanced, Проблема, Интернет, Google, API, Длиннопост
Как исправить ошибку с Квотами? YouTube, Youtube Vanced, Проблема, Интернет, Google, API, Длиннопост

Плейлистов и подписок у меня также много ( по этому и начал очищать подписки и скоро надо за плейлисты взяться ) вот:

Как исправить ошибку с Квотами? YouTube, Youtube Vanced, Проблема, Интернет, Google, API, Длиннопост

Больше не понимаю.. конечно через время снова по тихоньку можно пользоваться, но почему так появляется эта ошибка если я не использую так много запросов?? Не могу же я так много их использовать.
Те кто сталкивались с этой проблемой или просто знают как её решить то пожалуйста помогите.

Показать полностью 3
[моё] YouTube Youtube Vanced Проблема Интернет Google API Длиннопост
11
4
ChooChooLoco
ChooChooLoco
1 год назад
Искусственный интеллект
Серия Эра Нейротика

Midjourney без Дискорда (почти)⁠⁠

Продолжая развлекаться с нейросетями - поставил АПИшку к Midjourney (https://github.com/novicezk/midjourney-proxy).

Важно: это только АПИ, смысл её - в переадресации запросов к дискорд-боту Midjourney, адаптер, короче. Тестовый период и/или подписка - завязаны на дискорд-аккаунт. И похоже, что триала сейчас нет, или он крайне ограничен.

Midjourney без Дискорда (почти) IT, Гайд, Midjourney, API, Длиннопост

Ещё минусы:

  • Вся документация, примеры, встроенный "свагер" - на чистейшем... китайском? Иероглифами, короче.

  • Токен надо доставать через браузер, предварительно залогинившись в Дискорд.

Плюсы: она работает 🫡 И это удобней, чем листать ответы бота в дискорде, продираясь через тысячи сообщений.

Ставить как обычно - склонировать/скачать с гитхаба. Сделал docker-compose для удобства, собрать/обновить контейнер можно аналогично сборке freeGPT (docker-compose build).

Midjourney без Дискорда (почти) IT, Гайд, Midjourney, API, Длиннопост

Текстом можно скопипастить тут.

Где взять настройки

Токен (user-token): зайти на сервер Midjourney в Дискорде, в браузере в консоли разработчика (F12) - вкладка Сеть/Network. В заголовках запроса будет Authorization.

guild-id: Номер сервера (из адресной строки - первый набор цифр)

channel-id: Номер канала (из адресной строки - второй набор цифр)

Если регистрируется свежий аккаунт - предварительно через Дискорд нужно принять ToS Midjourney:

Midjourney без Дискорда (почти) IT, Гайд, Midjourney, API, Длиннопост

Время учить иероглифы?

Посмотреть свагер и подёргать запросы можно тут: localhost:1339/mj/doc.html#/home

С иероглифами документация выглядит даже забавно где-то 🙃 К счастью, иконки и цвета кнопочек остались общепонятными.

Запрос генерации

Midjourney без Дискорда (почти) IT, Гайд, Midjourney, API, Длиннопост

Посмотреть очередь генерации

Midjourney без Дискорда (почти) IT, Гайд, Midjourney, API, Длиннопост

С новым аккаунтом не прокатило, предлагает подождать и повторить позже. Разве что где-то найти бюджетную тестовую подписку.

Показать полностью 4
IT Гайд Midjourney API Длиннопост
3
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии