Telegram-бот для получения адреса по локации или координатам (Python)
Привет! Представь ситуацию, когда тебе скинули координаты или локацию, но ты хочешь срочно узнать адрес этого места.
Сегодня попробуем написать Telegram-бота для получения адреса по координатам или локации.
В итоге у тебя получится вот такой бот @SayMyAddressBot.
Что нам для этого потребуется?
- Бот в Telegram;
- Обратный геокодинг от Яндекса. Геокодинг это такой сервис, который позволяет получить из адреса координаты, а нам нужно наоборот, поэтому «обратный геокодинг»;
- Установленный Python и библиотека requests для посылки запросов;
- Установленная библиотека Python-telegram-bot.
Но давай обо всём по порядку!
Создаём бота в Telegram.
1) Ищем в поиске Telegram бота по нику @botfather. Этот бот ответственен за регистрацию всех остальных ботов;
2) Отправляем ему /newbot и начинаем создание бота;
3) Отправляем имя бота (оно может быть любым) и ник бота (обязательно должен оканчиваться на «bot»). Если у тебя выходит ошибка, то значит этот ник занят. Пробуй другой.
4) Получаем токен бота (скопируй этот токен и никому не давай😅).
Скриншот ниже (токен выделен красной рамкой).
Супер! Бот создан и уже доступен внутри Telegram по нику. Можешь вбить в поиске и убедиться. Также ты можешь найти его по ссылке t.me/НикТвоегоБота. Например на скриншоте я зарегистрировал SayMyAddressBot, значит его ссылка t.me/SayMyAddressBot. Сохрани такую ссылку с ником твоего бота. Скоро она нам пригодится.
Отлично. С ботом разобрались.
Обратный геокодинг от Яндекса.
Я надеюсь, что у тебя есть аккаунт на Яндексе. Если нет, то тебе сюда.
Итак. Как работает обратный геокодинг от Яндекса?
Всё очень просто. Нужно отправить GET запрос с координатами и получить в ответ адрес.
Вот пример такого запроса:
https://geocode-maps.yandex.ru/1.x? format=json&lang=ru_RU&kind=house&geocode=37.617585,55.751903&apikey=ТОКЕН
Что мы тут видим?
Запрос:
https://geocode-maps.yandex.ru/1.x/
Параметры:
- format: в каком формате возвращать данные. В данном случае json;
- lang: язык возвращаемых данных. В данном случае ru_RU (русский);
- kind: вид адреса. В данном случае house (точность до дома);
- geocode: координаты (сначала идет долгота, затем широта);
- apikey: токен для доступа.
P.S.: параметров гораздо больше, но нам они не нужны. Подробнее можешь почитать тут.
Просто, правда? Послал запрос с координатами, получил адрес 😊.
Как видишь у нас есть все данные кроме токена. Займемся его получением!
Получаем токен.
1) Заходим на страницу разработчика и входим в кабинет (аккаунт на Яндексе у тебя уже есть).
2) Получилось? Отлично. Далее ты увидишь вот такую страницу.
Жми желтую кнопку «Подключить API»
3) Теперь нужно выбрать какой именно токен нам нужен.
Выбирай «JavaScript API и HTTP геокодер». За ним мы и пришли.
4) Далее заполняем формочку твоими данными.
В поле «Ссылка на ваш сайт» пиши ссылку на своего бота, которую мы сохранили ранее.
Ну и тыкай кнопку «Продолжить».
5) Тебе должно всплыть окошко с сообщением об успешной регистрации.
Жми «Перейти к API».
6) Вот и всё. На открывшейся странице уже лежит наш искомый токен геокодера (выделил красной рамкой). Его тоже сохрани и никому не давай.
Токен активируется через 15 минут после создания. Можешь прямо в браузере (Chrome, Safari или что там у тебя) вбить (не забудь подставить свой токен в конце).
https://geocode-maps.yandex.ru/1.x? format=json&lang=ru_RU&kind=house&geocode=37.617585,55.751903&apikey=ТОКЕН
и получить ответ в json виде:
Пол дела сделано. У нас есть и Telegram бот (с его токеном) и геокодер (с его токеном).
Теперь с помощью Python мы их объединим!
Python у тебя уже установлен? Если нет, то тебе сюда.
Получаем адрес по координатам на Python.
В Python есть библиотека requests и она позволяет посылать запросы (как ты только что делал в браузере). Это нам подходит.
1) Открывай консоль (терминал) и устанавливай requests с помощью команды:
pip install requests
Подробнее тут.
2) Теперь нужно будет написать небольшой код на Python для получения адреса по координатам.
Открывай свою среду разработки или просто текстовый файл (нужно будет сохранить его с окончанием. py, а не. txt). Назовём файл main.py.
И добавляй туда этот код. Он полностью расписан в комментариях.
3) В консоли (терминале) переходим в папку с нашим файлом через команду «cd» (у меня он лежит в папке Documents/Python/).
И запускаем файл с помощью «python3».
Как результат, ты получишь адрес координат из кода.
Мы почти закончили! Осталось совсем немного.
Программируем Telegram бота на Python
Здесь в целом всё точно также, как и в предыдущей части.
Нам необходимо:
- Установить библиотеку python-telegram-bot для управления нашим ботом.
- Написать немного кода.
Поехали!
Установка библиотеки python-telegram-bot
1) Снова открывай консоль (терминал) и устанавливай python-telegram-bot с помощью команды:
pip install python-telegram-bot
Подробнее тут.
2) Пришло время написать код нашего бота. Я снова всё опишу в комментариях (не забудь поставить токен геокодера и токен бота в нужных местах в коде)!
3) Создаем файл main_bot.py и сохраняем этот код в нём.
4) В консоли (терминале) переходим в папку с нашим файлом через команду «cd» (у меня он лежит в папке Documents/Python/).
5) И снова запускаем файл с помощью «python3». Теперь уже это файл нашего готового бота!
Всё! Заходи в своего бота в Telegram (ищи по нику) и используй🤩🥳.
Моего бота можно посмотреть тут @SayMyAddressBot.
P. S. Это моя первая инструкция на портале. Старался сделать так, чтобы было понятно даже совсем начинающим. Спасибо за то, что прочёл до конца!