Pull to refresh

Comments 51

А смысл узнавать погоду из IP бота? Боту можно и так фиксированные координаты задать, а IP юзера так узнать нельзя, да и малополезно, ибо в мобильной сети он вовсе не привязан к реальным координатами, да и в немобильной не всегда

Действительно, смысла мало. Но если Вы хорошо прочитали статью, то могли понять, что это пет-проект. Обычно целью таких маленьких проектов является обучение чему-то новому. Я не деплоил бота и не собираюсь, потому что так же, как и Вы, не вижу в этом смысла. Уже давно существуют удобные сервисы.

P.S. Вас уже кто-то заминусил, это не я, чесслово.

пет проект это что-то другое. У вас просто какой-то бот, который вам даже самому не нужен...

Очень даже нужен. Получил заслуженную конструктивную критику. Узнал много новой информации. Понял, что лучшее решение для такого бота - это отправление геолокации, потому что телеграм не выдает IP пользователей.

Даже если б выдавал, во-первых, это изначально не очень точно привязано к местоположению, ибо провайдер в крупном городе вполне может не заморачиваться и выдавать пригородам адреса из того же диапазона, что и городу. А в мобильной сети всё ещё хуже, ибо в роуминге внешний IP всё равно выдаётся из домашнего региона.

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

В данном случае, ему нужно было сделать именно бота, именно для погоды но непонятно для кого. Отсюда "пофиг" на погрешности, "пофиг" на какие-то второстепенные хотелки - все равно никто не будет использовать. Пофиг на запуск самого бота, потому что запускать он его не собирается, а это тоже важно. Пет проект должен быть в первую очередь рабочим, а не написан в тетрадке.

Поэтому данную штуку можно назвать как просто тестовое приложение, но никак не пет проект, который сделан с душой.

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

Что такое пет-проекты

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

Да, мой проект не решает никакой моей проблемы. Честно, у меня плохо с фантазией, и я не могу придумать проблему, которую не решил бы какой-то уже готовый сервис. В первую очередь была поставлена цель - просто сделать, просто обучиться чему-то новому. И Вы представляете, Я НЕ ЗНАЛ о многих важных нюансах.

Я не вижу смысла в нашей дискуссии. Ваша позиция понятна. Пет-проект - что-то новое, решающее проблему, сделанное с душой.

aiogram - асинхронный, так?
а вызов urlopen - синхронный, так?

ну aiohttp у тебя в зависимостях, так же можно запустить через run_in_executor

У openweather API есть ключик, что бы температуру получать в цельсиях.

Температура и так вроде дается в цельсиях, или я что-то не догоняю?

Помоему там можно выбрать так, чтобы была температура по Фаренгейту

Можно, но стандартным запросом получается ответ с цельсиями.

По-умолчанию, без дополнительных флагов, в Кельвинах. Посмотрите пример ответа в статье. И по документации

main.temp Temperature. Unit Default: Kelvin, Metric: Celsius, Imperial: Fahrenheit.

Действительно. В конфиге в запросе прописано &units=metric, забыл упомянуть

Для пет-проекто, годно) Автору спасибо

Пару месяцев назад решил написать бота на Python, наткнулся на видео инструкцию, вот там почти тоже самое, только ещё рандомайзер добавлен кнопкой и "привет, как дела?".

Не смотрел видео инструкций по созданию ботов, смотрел документацию aiogram и stackoverflow по надобности. Не отрицаю, что может быть много похожих проектов.

Предлагаю сделать вот такое приложение на питоне. Мне крайне интересно, сколько у вас на это времени уйдёт

Hidden text

Здесь всё берётся из OWM (кроме шкалы, она отрисована вручную). При этом, окно не перехватывает клики, если его закрепить. Т.е. пропускает их и если нужно можно кликнуть сквозь.

UFO just landed and posted this here

Да нормально он подходит для GUI на десктопе, откуда такие байки?

Electron тоже плохо подходит, кушает много ресурсов, использует отдельные инстансы хромиума, но сколько на нем написано приложений: всеми любимый VS Code, Discord, десктопные приложения заметочников Evernote и Notion.
P.S. Есть достойная альтернатива электрону - Tauri.

Вероятно, вы не особо имеете опыт в разработке крупных и средних графических программ. Иначе, вы бы не задавались подобным вопросом)

UFO just landed and posted this here

Эммм, pywin32? Да и какой нибудь Tkinter даже подойдет, если дополнительно установить флаги через тот же win api.

В этом и суть. Я всё реализовал штатными средствами. Не прибегая к winapi вручную. Почти всё реализовано вообще через дизайнер. Без написания лишнего кода.
В этом и есть смысл фразы "подходящий". Tkinter реализует просто минимум. При это ещё и максимально не удобно и ограничено.

Тут более подходит для питона Qt. Хоть как-то можно более-менее удобно что-то делать. Только всё равно основная часть - кодом. Шаблонным и рутинным кодом.

UFO just landed and posted this here

Разве MIT? Лицензия LGPL, поприятнее PyQt GPL, но все же не такая свободная, как MIT.

А, да, LGPL. Но использовать вне GPL проектов всё равно можно, если не изменять код библиотеки

Я только на PySide и писал приложения. Смотрел еще в сторону Kivy, но не нашел похожего на Qt Designer инструмента. Возможно, плохо искал.

UFO just landed and posted this here

Qt designer. Правда, совмещать код с формой приходится вручную.

UFO just landed and posted this here

как там с зависимостями?

pyqt притащит всё что ему нужно.

Для примера сделал экзешник простенького калькулятора на PySide6 с помощью Nuitka.

nuitka --onefile --follow-imports --enable-plugin=pyside6 --windows-disable-console --windows-icon-from-ico=
.\ui\icons\calculator_black.png .\main.py
Приложение

Размер

С другим проектом вышел примерно такой же размер. В обоих приложениях используются только встроенные библиотеки и PySide6.

С PyInstaller не пробовал, но уверен, что выйдет гораздо хуже.

Интересное предложение, но пока у меня есть другие проекты для реализации. С помощью какого инструмента делали GUI?

UFO just landed and posted this here

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

UFO just landed and posted this here

Благодарю, но вчера уже посмотрел этот вопрос :)

Но если телефон по каким причинам её отдать не сможет (заблокировал, или находишься условно в метро и он не может отдать), то в это время не получится взаимодействовать с ботом (как то так было, как мне помнится). Причем бывает просто глюк, что помогает забрать и выдать права телеге, иногда отлипает только после перезагрузки.
  1. В данном руководстве для получения погоды используется синхронный клиент. Соответственно, пока бот ждёт ответа от сервиса погоды, асинхронное приложение БЛОКИРУЕТСЯ и не обрабатывает другие сообщения. Используйте асинхронный клиент для избежания блокировок. В aiogram мы используем aiohttp.

  2. Запросы к API лучше кэшировать. Если у вас пользователь дёргает погоду 30 раз в секунду, то нагружать API не имеет смысла, просто отдайте пользователю предыдущий результат.

  3. Сервис погоды может быть временно недоступен и ваше приложение к этому не готово. Используйте backoff и допишите сценарий отказа пользователю.

  4. В aiogram мы добавили много удобных шорткатов, например отвечать на callback query можно так: callback_query.answer()

  5. Держать config.py в репозитории - не очень хорошая практика. Если хочется именно такой формат конфигурации оставить, то в репозиторий приложите пример (с другим именем), а ваш пользователь уже скопирует его в config.py. Сам config.py добавьте в ignore, чтобы он не попадал в git.

Благодарю за комментарий. Пытался найти что-то вроде callback_query.answer(), но проморгал. Насчет синхронного клиента меня уже поправляли, каюсь, согрешил :)

Как бы Вы сами реализовали кэширование и конфигурацию? С помощью каких инструментов?

Увидел, что в callback_query.answer() для кэширования есть параметр cache_time, но не увидел параметра reply_markup. В этом случае можно показывать оповещение с помощью show_alert=True.

Ответ на callback_query не подразумевает наличие клавиатуры, не путайте с ответом на сообщение

Кэшировать можно в память или в специальные хранилища (при необходимости), как вариант - aiocache.

Для конфига я чаще всего использую pydantic.

Благодарю, приму к сведению.

Sign up to leave a comment.

Articles