Получить iframe карты по адресу через yandex maps api
Есть необходимость получить iframe карты по заданному адресу.
У меня есть несколько полей: город, улица, дом. После заполнения последнего, адрес собирается в одну строку, и далее нужно сделать запрос к yandex maps api и получить iframe.
Искал необходимое api/решение, не нашёл, поэтому вопрос:
Есть ли какой-то готовый способ или нужно собрать?
На всякий случай: фронт реализован на Vue.js 2 + Nuxt.js 3.
Ответы (2 шт):
Похоже, что этот функционал есть только в их непубличном API.
https://yandex.ru/maps/api/shortenPath?ajax=1&csrfToken=abc:123&path=/?ll=37.620585%2C55.751461&mode=search&oid=1023322799&ol=biz&z=16.58&s=376169862&sessionId=xyz_456
https://yandex.ru/maps/api/shortenPath?ajax=1&csrfToken=abc:123&path=/org/moskovskiy_kreml/1023322799/?ll=37.620585%2C55.751461&z=16&s=3624378469&sessionId=xyz_456
ll - это координаты
path - url места на maps.yandex.ru
В респонзе - JSON с короткой ссылкой на это место.
{"data": "CCUfRFf9lC"}
Код для iframe всегда одинаковый:
<iframe
src="https://yandex.ru/map-widget/v1/-/**ЗНАЧЕНИЕ_ИЗ_JSON**"
width="560" height="400" frameborder="1"
allowfullscreen="true"
style="position:relative;">
</iframe>
Использование непубличных методов нестабильно, поскольку может в любой момент быть закрыто. И при этом нарушает пользовательское соглашение, потому может быть закрыто персонально для вашего продукта. Не стоит так делать.
А вот схема генерации ссылки для открытия Яндекс Карты есть в их документации. Причём геокодер для такого формата не потребуется. В схеме поиска объекта можно прописать и адрес. В простейшем виде ссылка будет такой:
https://yandex.ru/maps/?text=Реутов,+Калинина,+20
Её можно обернуть в айфрейм, чтобы получить его со стандартным интерфейсом. И это совершенно легальный метод.
<iframe src="https://yandex.ru/maps/?text=Реутов, Калинина, 20" width="100%" height="400""></iframe>
Если хотите урезанного виджета, как по кнопке Поделиться, можно использовать чуть другой формат урла, взятый из кода виджета с поисковой строкой. Но гарантировать, что это будет работать вечно никто не может:
<iframe src="https://yandex.ru/map-widget/v1/?mode=search&text=Реутов, Калинина, 20" width="100%" height="400" frameborder="1" style="position:relative;"></iframe>