Как получить список станций Московского метрополитена по API

Станции Кольцевой линии Московского метрополитена

Существует большое количество способов получить список станций Московского метро. Их можно разделить на 2 категории: ручные и автоматизированные.

С первой категорией всё понятно: заходим на официальный сайт Московского метро и получаем схему или можно посмотреть в статье на википедии, где, скорее всего, станции обновляются оперативно.

В этой статье я собрал несколько автоматизированных способов получения всех станций Московского метро. Некоторые из них предельно простые и используют один запрос к API, другие чуть посложнее и предполагают парсинг веб—страниц.

API Superjob

Сервис поиска работы Superjob предлагает метод API для получения списка станций:
https://api.superjob.ru/2.0/suggest/town/4/metro/all/

Цифра 4 после town в запросе — это идентификатор города. Так что этот метод годится не только для метро в Москве, но и для других городов, где есть метро. Узнать идентификатор города можно с помощью запроса:
https://api.superjob.ru/2.0/towns/?all=1&genitive=1

Ответ приходит вот в JSON с вот такой простой структурой:

Хозяйке на заметку: если нужны склонения городов, то можно взять из этого JSON.

Запрос возвращает станции метро в JSON:

На момент написания статьи (январь 2017) метод отдавал 220 станций. В списке отсутствуют станции Московского центрального кольца. Еще один очевидный минус этого метода — отсутствие координат станций.
Полная документация API Superjob доступна по ссылке.

API HeadHunter

Еще один сервис для поиска работы HeadHunter предоставляет API, в котором есть удобный метод для получения справочника по станциям метро:
https://api.hh.ru/metro/1

Цифра 1 указывает на идентификатор города в HeadHunter. В документации можно ознакомиться с методом, позволяющим получить дерево всех регионов, если вдруг понадобится найти станции метро для другого города.

Метод возвращает структуру в JSON—формате, в которой на верхнем уровне иерархии находится список линий метро lines:

Отдельный плюс — это указание цвета ветки в атрибуте hex_color.
Внутри каждой ветки в массиве station лежат станции, принадлежащие этой ветке:
И здесь несказанно радует наличие географических координат, а также атрибут order, содержащий порядковый номер станции в линии.

По состоянию на январь 2017 метод отдаёт 240 станций метро, включая станции Московского центрального кольца.

Еще одна интересная особенность метода — можно не указывать город и сделать запрос https://api.hh.ru/metro/. В этом случае ответом будет список всех городов, которые добавлены в HeadHunter и в которых есть метрополитен. А уже внутри каждого города будет массив lines. Удобно!

Портал открытых данных Правительства Москвы

На портале открытых данных Москвы есть справочник под названием «Станции Московского метрополитена»:
https://data.mos.ru/classifier/7704786030-stantsii-moskovskogo-metropolitena

Эти же данные можно получить, обратившись к API портала data.mos.ru:
http://api.data.mos.ru/v1/datasets/1488/rows

В данных отсутствуют географические координаты станции, но эту проблему можно решить подружив данные с геокодером Яндекса (рассказ о его использовании чуть ниже). В результатах, которые отдает data.mos.ru есть указание административных округов и районов, в которых расположены станции. Еще одна любопытная деталь, которой нет в других источниках — наличие строящихся станций Московского метрополитена.

Всего список насчитывает 296 станций, из которых 236 — действующие станции метро.

API 2Гис

API 2Гис не доступно публично. Официально, чтобы им пользоваться необходим ключ доступа, который предоставляется по запросу. Но дело в том, что веб—интерфейс 2Гис сам обращается к тому же API, поэтому в запросах от браузера можно найти GET-запросы вот такого вида:
https://catalog.api.2gis.ru/2.0/suggest/list?key=ruczoy1743®ion_id=36&lang=ru&q=foobar
Здесь key — ключ доступа к API, который судя по всему имеет достаточно длительный срок жизни. Поэтому пользуйтесь на здоровье.

Я не нашел в документации API 2Гис метода, который позволял бы найти все станции метро одним запросом. Но есть замечательный метод, позволяющий найти транспортный маршрут:
https://catalog.api.2gis.ru/2.0/transport/route/search?key=ruczoy1743&q=Сокольническая&subtype=metro,monorail®ion_id=32
В параметре subtype задается тип маршрута, который нужно выводить в результатах, а именно метро и монорельс; в region_id указываем идентификатор города.

В ответ приходит результат поиска по маршрутам:

Зная ID маршрута, можно получить список остановок, выполнив запрос:
https://catalog.api.2gis.ru/2.0/transport/route/get?id=4504205217760068&fields=items.region_id&key=ruczoy1743

Собственно, это то, что нужно:

Замечу, что станции тут располагаются в массиве platforms в порядке их следования.

В таблице я собрал все идентификаторы линий и подготовил 15 запросов для получения списка станций по каждой из линий метро.

В базе 2Гис на январь 2017 года содержится 236 станции Московского метро.

Сайт mosmetro + геокодер Яндекса

Этот способ самый «костыльный» из всех способов и его я рассмотрю только для того, чтобы показать как можно работать с геокодером Яндекса для поиска станций метро.

Во—первых, нам понадобится список станций метро, который можно взять со страницы «Расписание поездов» на официальном сайте Московского метрополитена.

Названия всех станций — это тексты ссылок в блоке с классом «schedulestations». Их можно достать, написав простейший парсер HTML—страницы.

Вторым шагом работы нашего «костыля» будет обращение с названием каждой из станций к геокодеру Яндекса:
https://geocode-maps.yandex.ru/1.x/?geocode=метро%20Третьяковская&results=100&format=json

(Обратите внимание на приписку «метро» к названию станции, это нужно, чтобы отсеять лишние результаты, например, «улица Третьяковская»)

Результаты поиска — объекты GeoObject, в которых содержатся данные о найденных по запросу станциях метро. Атрибут kind указывает на тип объекта. Станции метро имеют тип metro, кроме станций монорельса, у них тип station. Нужно помнить, что для одной станции может быть несколько линий, поэтому объектов GeoObject может быть больше одного.

XML от Циан

Классифайд по недвижимости Циан предоставляет список в виде XML:
https://www.cian.ru/metros.php

К сожалению, не указаны ветки.

XML от Авито

Сайт объявлений Авито использует вот такой XML-справочник с местоположениями:
http://autoload.avito.ru/format/Locations.xml

Этот справочник включает сущности типа subway — это станции метро.

API Яндекс.Метро

У Яндекс.Метро есть слабодокументированное API — https://metro.yandex.ru/api/. Подозреваю, что API скорее для внутреннего пользования. Оно выгодно отличается от других способов получения станций тем, что можно получить не просто станции, но всю схему Московского метро в SVG с помощью метода get-scheme-geometry: https://metro.yandex.ru/api/get-scheme-geometry?id=1&lang=ru. Отдельно станции можно получить с помощью метода get-stations: https://metro.yandex.ru/api/get-stations?id=1&lang=ru. Еще можно получить метаданные методом get-scheme-metadata: https://metro.yandex.ru/api/get-scheme-metadata?id=1&lang=ru. В метаданных можно найти информацию о пересадках и различные примечания, например, информацию о вестибюлях, закрытых на ремонт.

Файлы

Если вам не нужно API, а достаточно JSON, CSV или XLSX — их есть у меня:

Файлы актуальны на январь 2017 года, данные получены с помощью API HeadHunter. Постараюсь обновлять регулярно. Об ошибках, недочетах, или если вдруг файлы станут недоступны сообщайте в комментах к посту.

Знаете еще какие—то способы получения станций Московского (и не только Московского) метро? Делитесь в комментариях.

Поделиться
Отправить
Запинить
Ваш комментарий
адрес не будет опубликован

ХТМЛ не работает

Ctrl + Enter