Пишем Telegram бота на Python 3
Вставка
- Опубліковано 29 січ 2017
- Мои курсы:
Boosty:
boosty.to/omolchanov/posts/99...
Patreon:
/ karty-vsekh-41011404
Пишу простого Telegram бота на Python 3 - при вводе команды бот делает запрос на биржу криптовалют Yobit.net и берет данные о стоимости последней сделки купли-продажи пары BTC/USD (т.е. стоимость одного BTC в долларах США)
Работаем с чистым API Telegram без использования сторонних библиотек типа telepot и прочих.
Очень подробно. Подходит для новичков.
Нужна библиотека requests:
pip install requests
** ИСХОДНЫЙ КОД **
Основных проектов доступен в Patreon:
/ iskhodnyi-kod-26640469
***
------
🔷 Для донатов. Всегда очень признателен за это:
www.donationalerts.ru/r/omolc...
Касты про вебхуки и загрузку бота на хостинг:
• 0. Создание Telegram б... Часть 0 Демка
• 1. Создание Telegram б... Часть 1 Подготовка
• 2. Создание Telegram б... Часть 2 Остальное
очень доходчиво но я накидался пока смотрел
Отличный темп, тембр голоса и комментарии для новичков. Успевал писать код и смотреть.
Не думал, что уроки по программиованию могут доствалять удовольствие от просмтора.
Как всегда - отличное видео ! Все предельно понятно и просто. Прошу - продолжайте в том же духе.
Олег, спасибо за ваш труд. очень понравился урок. Я на питоне не программировал, но с вашей подачей все становится понятно) Не забрасывайте это дело!)
Как всегда Олег на высоте. Я ваш подписчик и здесь и на патреон и каждый месяц с вами и каждый урок. И не отпишусь, зная что ваши уроки бесценны. Продолжайте пожалуйста не смотря ни на что. Удачи вам и развития. Я ВК на стену кидаю ваши ролики, подписан на патреон и здесь и постараюсь как смогу расширить вам аудиторию. Лайк, репост, подписка и колокольчик. Удачи всем, ребята.
Спасибо большое вам за поддержку и за добрые слова. Всего вам хорошего.
Здорово. Спасибо, что отозвались на мою просьбу. Делайте больше видео по Python 3!!!
Да, Сергей, именно благодаря вам он и появился. Забыл только вас упомянуть в ролике :)
Вывожу значение биткойна в консоль, вижу число в 10 раз больше чем в видео. Думал ошибка, а нет, все верно.
ofis Auros теперь меньше
@@KABman теперь немного побольше)0
@@dthamine1931 немножко))
Видео просто супер! Большое спасибо, надеюсь будет продолжение по разработке Telegram ботов)
Спасибо за урок, Олег! И за подробное объяснение процесса работы!
Никогда не было настолько понятно! Автору огромное спасибо!!!
Вааааа!!! Это лучше видео по телеграмм ботам. Спасибо за такой подход в объяснении! Подписался!!!!
Отличный урок - жаль нет продолжения по ботам.
Отличное видео. Видно, что человек специалист своего дела. Спасибо.
Олег, огромная благодарность за урок!
Олег, могу сказать что ты один из самых грамотных программистов, чей код я читал
Хай! Спасибо за видео, мне понравился подход и сами пояснения к коду. Порадовал видео ответ про исходный код, полностью с ним согласен.
Также хочу докинуть в копилку просьб видоса, про бота на webhook. В принципе, в инете довольно много примеров, но там много тонкостей, которые негде уточнить, та и выглядят они немного пугающе.
В общем, надеюсь продолжение последует :)
Спасибо, ждем новых материалов
Олег, когда продолжение??? Без модулей, на чистом питоне? Как делать вебхуки и т.д., куча вопросов.. продолжайте снимать пожалуйста.
Спасибо за качественное подробное объяснение.
автор молодец!
продолжай в том же духе
Очень классное видео, помогло, респект создателю👍🏿👍🏿👍🏿
Лютая годнота!
Урок по хукам просто необходим! :-)
Спасибо.
С Webhook-ами сложнее. Телеграм шлет POST запрос с данными, а мы должны его принять и обработать. Словом, для этого нужно на бэкенде использовать что-то вроде Django/Flask...
Но я не хочу сейчас начинать эту тему не имея скринкастов по Django и Flask... Поэтому видео до сих пор нет.
Талант к преподаванию, не останавливайся!
Спасибо! Очень доходчиво и информативно!
Очень позновательно!Спасибо за ролик!
Огромноетебе спасибо
Спасибо, отличный урок!
Однозначно подписка. Доходчиво и понятно!
Полезные у тебя видео на канале , надеюсь ты будешь снимать ещё
Спасибо большое за урок !
Cпасибо тебе за урок!
Очень помогло, спасибо
Спасибо, очень интересное видео.
Все очень доходчиво, максимально разжевано. Только хотелось бы внести небольшую ремарку. В случае, если мы ничего не вводим, то в телегу будут постоянно уходить get запросы, т.к. выполнение доходит до последнего блока else и... не доходя до sleep, начинается новая итерация. Насколько понимаю - последний блок else здесь лишний.
Спасибо за видео!
Спасибо за видео)
Все по полочкам, большое спасибо.
UPD: Если у кого-то при запросе к yobit выкидывает ошибку 403, пропишите headers в запросе. Как-то так:
headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:73.0) Gecko/20100101 Firefox/73.0'}
url = 'yobit.net/api/2/btc_usd/ticker'
r = requests.get(url,headers=headers)
Спасибо, тоже столкнулся с 403.
Спасибо за туториал очень помог кстати биткоин 5740 usd 24.04.2019
классное видео. запишите видео с webhook или inline
Отличный урок, вы очень помогли)
Скажите, пожалуйста, что за расширение используется для компиляции кода в новой вкладке(ctrl+1).
Для этого я использую плагин SublimeREPL.
О том, как его настроить я записывал каст. Посмотрите, пожалуйста, в плейлистах.
Огромное спасибо за видео).
Но есть одна проблема, решения которой не могу найти. Возможно ли создание команды (к примеру /hello), которая будет отправлять текст (/hello) и в то же время подставлять новый текст в поле набора, но БЕЗ его отправки?
Биткоин по 925 долларов.........
Привет из октября 2021, BTC/USDT 50 000
А видео просто огонь. Очень хорошее объяснение. Спасибо!
Добрый день. Подскажите пожалуйста как сделать кнопку (или сообщение) такую же как у бота rutracker? Т.е. при нажатии на которую копируется её содержимое (магнет ссылка).
_Добрый день, Олег. Скажите, можно ли сделать бота, который загружал бы в канал фотографии?_
Отличный материал! Про webhook как я понимаю видео не будет?
Почему же не будет. Будет. Но не сразу.
Большое спасибо автору!!! Начало 2019 биток 4322
Жаль, что Вы больше не выпускаете видео, у Вас талант разжевывать все новичкам!
У него есть англоязычный канал - red eye coder club
@@sergeyanalyst7134 спасибо большое, поищу!
Привет, а можно создать бота для поиска турпутевок? Типо вбиваешь запрос на страну и рейтинг гостиницы и выдает результаты гостиниц?
а что делать, если в строчке text = answer['text'] (42:38), пишет ошбку,типо понятие text нигде не используется
можно вместо глобальной переменной - создать изменяемый тип данных (например список) и менять его из функции и в принципе global дважды объявлять не нужно, можно только в самой функции, а в целом очень интересно и познавательно. Спасибо за ваше видео)
еще как вариант создать глобальный словарь, который хранил бы это общее состояние
спасибо!
Ееее! Мятный линукс! Я только сейчас заметил, что не все Ютуб кодеры на окнах сидят
Добрый вечер, Спасибо Вам за этот вебинар. Благодаря этому видео я написал себе первого бота ))) Только у меня возникла проблема. Мой бот входит в аккаунт юзера на одном сайте и тыкает там по ссылкам, если одновременно ботом пользуются несколько человек, то все сбивается. Многопоточность я не использовал ввиду того что мало проинформирован. Не знаю как решить эту проблему, некоторые советуют гуглить в сторону FMS , но мне показалось это трудно реализовать. Посоветуйте пожалуйста, очень жду ответа.
Подскажи, пожалуйста где можно взять документацию с примерами, а то кучу сайтов перерыл и не могу понять как отправить видео, фото или банальный стикер. Если ты знаешь как можешь подсказать пожалуйста, я буду очень сильно признателен)
Все очень круто! Только можно как-то не использовать глобальную переменную?
Привет.
Как сделать что бы бот не ложился от стикеров?
Здравствуйте Олег.
я попытался получить прогноз погоды, и в консоль Pycharm выводятся значения .... но в телеграмм передаётся как "None" сможете помочь?
Петру Егорову! Запустил как у тебя по мануалу --- Дошёл вот до сюда : Прежде чем пытаться подключиться, вам нужно выполнить несколько дополнительных команд
В терминале введите следующие команды:
sudo ausearch -c 'openvpn' --raw | audit2allow -M my-openvpn и сразу беда, у меня Manjaro Linux в терминале
вываливается ошибка : command audit2allow not found ---- пробывал устанавливать policycoreutils не помогло
какой есть аналог audit2allow ---- вроде всё перелопатил не нашёл --- если можно помоги советом
Днём всё работало, а вечером
внезапно всё поломалось, при запуске бота на исполнение появилось OSError: [Errno 107] Transport endpoint is not connected
В чём причина такой ошибки?
Олег, Вы какой ВПН использовали? Для обхода блокировок
никакой... у меня все работало и сейчас прекрасно работает
круто
Привет, сделай пожалуйста новое видео по созданию асинхронного бота для телеги или вк
Привет,спасибо за видео.Есть вопрос, почему то когда получаю пакет обновлений json там в графе text: не отображаются сообщения на русском,а вместо них непонятные символы.Подскажи пожалуйста как это можно исправить?
Какой у вас Python?
Попробуйте явно указать кодировку:
json.dump(d, file, indent=2, ensure_ascii=False).encode('utf-8')
Как вытянуть графики с бирж?
А... Можно бота для Дискорда написать таким же образом?
почему в Pycharm не запускает скрипт(типа как тут СTRL+1
57:06 Олег, вот вы здесь сказали в каком случае лучше писать классы, не могли бы вы развить эту тему и описать, когда и для чего писать классы, ну и советы по написанию были бы к месту. Давно не делаете видосы, наверное заняты?
Да, я занят, к сожалению.
Классы нужно делать, когда есть какие-то общие состояния. Если у вас возникает желание сделать какую-нибудь глобальную переменную, то это означает, что у вас появилось какое-то общее состояние, которое нужно где-то и как-то хранить. Класс тут будет весьма кстати.
Если общих состояний нет, то классы - нафиг не нужны.
Это в общем и целом.
Но все также зависит от контекста задачи и от самого проекта.
почитал предыдущие комментарии и решил подключить к боту прокси. Но возникла проблема: нигде не могу найти прокси с протоколом HTTPS. Подскажите, пожалуйста, кто знает, где найти. Видел, что HTTP тоже подходит, но у меня все же не работает и выдает ошибку:
[WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение
Скажите пж это подходит для начинающих?
Здравствуйте! Делаете ли вы ботов на заказ?)
Как сделать реф. систему
Написал бота ,с помощью библиотеки telegram ,выложил на heroku ,но спустя 1 минуту бот перестаёт отвечать на сообщения.Подскажите,пожалуйста,как исправить?
За год, нашел ошибку?
Привет! А как на Sublime text установить библиотеку requests? У меня говорит ModuleNotFoundError: No module named 'requests'
Sublime Text совершенно здесь не причем. Это библиотека Python.
Загляните в описание к видео - там все есть.
Отличное видео, привет из апреля 2017 где биткоин стоит 1225)
эх вспомнить бы сейчас тюльпановый пузырь 1636 года
2732
09.08.2017 3.3204$
Суббота, 26/08/2017 1 BTC = 4 364.46891 USD
пару дней назад перевалил за 5000, правда чуть чуть обратно откатился потом :-)))
Скажите, почему после всех манипуляций с кодом, Ваш бот начал выдавать одно и тоже значение 929??? Куда делась волатильность рынка? Бот случайно не запомнил какое-то последнее валидное значение и "херячит" его на каждый запрос? У меня тоже самое получается. Почему так?
потому что CoinMarketCap - это не биржа. И никаких ежесекундных обновлений цен на нем никогда не было и не будет. По-моему, это очевидно.
Олег, когда про вебхуки росскажите?)
Как только - так сразу
Сильно ждем!!
Помоги пожалуйста.При проверке на 1:03:29 выдает ошибку:
File "bot.py", line 35
message_text = last_object['message']['text']
^
TabError: inconsistent use of tabs and spaces in indentation
все отступы перепроверил по несколько раз и также несколько раз сверился с вашим образцом по правильности написания,все в точности совпадает.Как решить эту проблему и может ли эта ошибка быть из за самого интерпритатора?
нужно еще раз все проверить.
Выделить весь текст, использовать команду типа Convert to spaces (она есть во многих редакторах), еще раз проверить отступы в логических блоках - 4 пробела на отступ.
Большое спасибо,помогло.
как справа столбец добавить ?
у меня ничего не выходит когда url распечатываем
После функции сделай на нее запрос:
get_updates()
держу в курсе) 2k19 август) 10к стоит биток)
Уже 50
Телеграм бот для вывода спаршенных товарос с Розетки: ua-cam.com/video/TzisLqUEU6g/v-deo.html
Я столкнулся с ошибкой на 47:51 минуте.
Ругается на json.
Если убрать из строки .json() и оставить r=requests.get(url), по пишет ответ 403.
А с r=requests.get(url).json() выводит следующее:
Traceback (most recent call last):
File "D:\work\Python\telegram bot\yobit.py", line 12, in
get_btc()
File "D:\work\Python\telegram bot\yobit.py", line 6, in get_btc
response = requests.get(url).json()
File "C:\Python36-32\lib\site-packages
equests\models.py", line 892, in json
return complexjson.loads(self.text, **kwargs)
File "C:\Python36-32\lib\json\__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "C:\Python36-32\lib\json\decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python36-32\lib\json\decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
[Finished in 1.0s]
Почему когда я отменяю кодировку строкой - ensure_ascii=False - значение text"Êóòîâîé". С чем это связано ? )
У вас Windows?
День добрый. Спасибо за видео, только есть вопрос. Я написал скрипт который парсит объявления с сайта и отправляет в телеграмм. Только загвоздка в том что он отправляет нижнее объявление а не верхнее, точнее нужно 6-ое объявление. Плюс что надо изменить в коде , чтоб он отправлял автоматически каждые 2 секунды,если появилось новое сообщение, ато он не хочет этого делать, только если перезапускать скрипт или написать что нибудь в телеграме pastebin.com/pAYTMgcE
эта версия бота не годится для продакшена и я об этом прямо говорил в этом видео.
В описании к видео есть более или менее нормальная версия бота.
1. У вас есть список L из четырех элементов. Как получить 2-й элемент?
2. Бот должен работать по запросу пользователя.
Можешь показать видео с кнопками ReplyKeyboardMarkup? пожалуйста
отбой, сделал, спасибо
Ребята, если кто на линуксе работает, то запускайте sublime через sudo на терминале или дайте ему права суперпользователя, иначе не создаст вам файл "updates.json".
А как на телефоне?
Все уже нашел, спасибо
Если у кого не создается файл updates.json на Windows, когда вы запускаете с консоли бота, зайдите в командной строке в папку с проектом и оттуда запускайте командой
cd C:/местоПапкиСБотом/ и потом запускаем по имени bot.py
А как можно сделать, чтоб бот парсил не биржу криптовалют , а постоянно парсил новые объявления на сайте? Например взять сайт на котором люди выкладывают объявления по продаже какой нибудь продукции и как только появилось новое объявление , автоматом приходило оповещение в телеграмм.
Если коротко, то точно также. Берете пишете парсер нужного сайта, потом пишете бота, потом вместе соединяете. И готово.
А если не коротко, то в комментариях это не опишешь.
Видео бы было первым =)
Когда смотрю на цены 925 долорав глаза заливает слезами. ЗА видио спасибо. Если еще будет что подобное то советую записать про виртуальную среду то иногда вылетает ошибка
Я не понял ваш совет.
@@zaemiel Запиши видео как правильно делать виртуальную среду, для чего это нужно и так далее.
уже есть такое видео
как сделать чтобы в правом окошке Sublime результаты исполнения программ Python высвечивались?
F7 || CTRL + B || CMD + B
Как панель вправо двинуть не знаю, но подозреваю, что через конфиг Build system.
веть можно добавить другие команды?или только btc
можно добавить все, что захотите. Это всего лишь демонстрация принципа
збс!
Если у кого под Windows будет ошибка при создании json.dump следующего содержания: "UnicodeEncodeError: 'charmap' codec can't encode character '\U0001f489' in position 7: character maps to ", то нужно явно указать для открытия файла "encoding='utf-8'", то есть должна быть запись вида "with open("updates.json", "w", encoding="utf-8") as file:"
Всё шло прекрасно до 39:52 когда автор вызвал сообщение бота из телеграмма. последняя введенная строка send_message(chat_id, "Что ты хочешь на ужин?") После этого сессия проходит без ошибок, но ничего не выводится и сообщение не приходит. Не могу понять, в чём ошибка.
Всё заработало. Ошибка, как обычно, в недосмотре одного символа. Пришлось всё проверить посимвольно глазами )
Здравствуйте!
Спасибо за урок. Я новичок в этом деле. Не могу разобраться: с того момента, как прописали
with open('updates.json','w') as file:
json.dump(d, file, indent=2, ensure_ascii=False) и я отправил боту в чат сообщение на русском, то в файл updates.json записались следующие строки:
{
"message": {
"date": 1507724006,
"text":
и далее уже ничего не записывается. В чем проблема может быть? Если через консоль запускать, то выдает ошибку
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-7: ordinal not in range(128)
Добрый вечер,
1. Какая у вас операционная система?
2. Какой у вас редактор?
3. Работает ли код в консоли?
4. На какую строку ссылается traceback, где ошибка? Приведите, пожалуйста, кусок этого кода.
1. Windows 7 Professional 32bit
2. Sublime Text Version 3.0 Build 3143
3,4. Пишет следующее:
C:\Python27>python.exe C:\Python27\bot.py
Traceback (most recent call last):
File "C:\Python27\bot.py", line 32, in main()
File "C:\Python27\bot.py", line 28, in main
data = json.dump(d, file, indent=2, ensure_ascii=False)
File "C:\Python27\lib\json\__init__.py", line 190, in dump
fp.write(chunk)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-7: ordinal not in range(128)
если в коде заменить json.dump(d, file, indent=2, ensure_ascii=False) на
json.dumps(d, file, indent=2, ensure_ascii=False).encode('utf-8'), то всё работает
Хорошо, что разобрались. Это отлично.
Python 2.7 по дефолту не знает, что такое Unicode, поэтому вылезло такое исключение, пока вы ему явно не указали, что это юникодная строка.
у меня ошибка была из-за того, что по умолчанию стояла версия питона 2.7. Переключение на версию 3 помогло решить проблему. ОС: Ubuntu 18.04
у меня сайт sendmessage не работает помогите!!
у меня почему-то выдает ошибку
{"ok":false,"error_code":400,"description":"Bad Request: message text is empty"}
как это исправит ? помогите если можете )
Это чисто твоя ошибка ,перечитай код
Не надо было писать else: continue, так как ты пропускаешь вызов sleep() и бот жестко спамит сервера telegram, рискую получить таймаут
Привет! Олег, дай пожалуйста ссылку на код или выложи прям сюда.
его нету
Сам пользуюсь дистрибутивом Mint. Подскажите в чём может быть проблема что не устанавливается модуль telegram aipi? В терминале ввожу след команду: pip install pytelegrambotapi - выдаёт ошибку. Также пробую следующие команды: pip3 install pytelegrambotapi, и с sudo тоже пытался, но всегда выдаёт ошибку. И pip обновлял, ничего не помогает.
Окей, какую же ошибку вам выдает?
Он же вам прямо говорит, что не так и что нужно...
Сейчас не могу сказать, не у домашнего пк. Сегодня попробую через виртуальное окружение ещё поставить. У многих такая проблема была, решили виртуалкой. Если опять не поставится отпишу в комент.
Фокус в том, что вы не знаете, в чем проблема.
А не знаете потому, что не читаете ошибку.
Выдвинув идею об установке в виртуальном окружении - вы пытаетесь решить проблему абсолютно вслепую, просто наугад.
И это вообще не способ.
Я глобально не могу ничего ставить без использования команды sudo.
sudo pip3 install ...
Я знаю это на практике, потому что читаю сообщения об ошибках и исключениях.
Вообщем такая ситуация. При установке путём команды: pip install pytelegrambotapi . Всё установилось.
А вот если я прописываю pip3 install pytelegrambotapi выбрасывает следующее ошибку: Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-2bhybdx3/pytelegrambotapi/
Не может выполнить команду... а как это поправить не понимаю.
Я не знаю.
Чтобы ответить на ваш вопрос мне нужно гуглить ошибку.