Skip to content

alexeydg/rzd-api

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Api сайта rzd.ru

Latest Stable Version Total Downloads Latest Unstable Version License

Описание установки

Описание интерфейса пользователя

Что умеет Api

  • Получает маршруты в одну точку
  • Получает маршруты туда-обратно
  • Получает список вагонов выбранного поезда
  • Получает список станций в пути следования выбранного маршрута
  • Получает список кодов станций (Поиск по первым символам города)
  • Авторизация на сайте pass.rzd.ru
  • Получет данные профиля пользователя

Пример запроса

<?php
// Добавляем прокси
$config = new Rzd\Config();
$config->setProxy([
    'server' => '192.168.0.1',
    'port'   => '8080',
]);

// Изменяем userAgent
$config->setUserAgent('Mozilla 5');

// Изменяем referer
$config->setReferer('rzd.ru');

$api = new Rzd\Api($config);

// В примере выполняется поиск маршрута САНКТ-ПЕТЕРБУРГ - МОСКВА (только с билетами) на завтра
$params = [
    'dir'        => 0,
    'tfl'        => 3,
    'checkSeats' => 0,
    'code0'      => '2004000',
    'code1'      => '2000000',
    'dt0'        => 'дата на завтра d.m.Y',
];

$routes = $api->trainRoutes($params);

Процесс приобретения билетов на сайте pass.rzd.ru разделен на несколько этапов

Открытая часть

Выбор маршрута - выбор поезда - выбор вагона

Закрытая часть

  • Информация о пассажирах - Проверка заказа - Оплата заказа - Подтверждение заказа

Этапы

  • В первом этапе пользователь указывают станцию отправления и станцию прибытия поезда, а также дату желаемой поездки. В этот момент на сайте pass.rzd.ru происходит отправка ajax-запроса, с которым мы и будем работать, запрос возвращает сформированный JSON пакет с ответом, в нем и находится требуемая нами информация или сообщение об ошибке

  • Во втором этапе мы можем выбрать необходимый нам поезд и получить полную информацию о свободных местах

  • В третьем этапе необходимо выбрать места и заполнить данные необходимые на оплаты и регистрации на сайте

Допустимые запросы через Curl (POST и GET) Для обхода защиты сайта необходимо предварительно отправить запрос для получения cookies и номера идентификатора RID (REQUEST_ID) Вторым запросом подставляем уникальный идентификатор RID и отправляем cookie

Ответы с сайта

Статус ответа содержится в переменной result RID - означает что сайт выдал нам уникальный идентификатор и куки OK - получен полный ответ с запрошенными нами данными Во всех остальных ответах Error или FAIL означает ошибку получения данных

Получение cookie

Каждый запрос к сайту должен содержать куки примерного вида:

  • lang=ru - текущий язык
  • JSESSIONID=0000w74wcMhGMfeoE6ibmsh4i4W:17obq9kpt - уникальный ключ
  • AuthFlag=false - авторизован ли пользователь на сайте

Пример запроса

Все запросы идут на адрес http://pass.rzd.ru/timetable/public/ru?layer_id=подкатегория&ключ=значение

Где подкатегория это

  • 5827 - выбор маршрута (Получения списка поездов)
  • 5764 - детальная информация выбранному по поезду, список вагонов
  • 5804 - просмотр маршрута со всеми остановками

Первый запрос

https://pass.rzd.ru/timetable/public/ru?layer_id=5827&dir=0&tfl=3&checkSeats=1&code0={{code_from}}&dt0={{date}}&code1={{code_to}}&dt1={{date}}

Второй и следующие запросы

https://pass.rzd.ru/timetable/public/ru?layer_id=5827&rid={{rid}}

Второй запрос выполняется с уже полученным нами уникальным идентификатором который хранит в себе данные предыдущего запроса и куками Поэтому в целях оптимизации можно не отправлять некоторые параметры указанные нами в первом запросе

Реализованные запросы

Необходимо реализовать отдачу данных через ajax-запросы, в текущих примерах это не реализовано

trainRoutes - получает маршруты поездов, количество свободных мест, цены итд в нем в один конец

Маршруты

Принимает параметры обязательные параметр при первом запросе

  • layer_id - подкатегория (5827)

необязательные параметр при повторном запросе

  • dir - 0 только в один конец, 1 - туда-обратно
  • tfl - тип поезда (1- все, 2 - дальнего следования, 3- электрички)
  • checkSeats - 1, 0 - поиск в поездах только если есть свободные места
  • code0 - код станции отправления
  • code1 - код станции прибытия
  • dt0 - дата отправления

Возвращает массив поездов и свободных мест

  • from - название станции отправления (САНКТ-ПЕТЕРБУРГ)
  • where - название станции прибытия (КИРОВ ПАСС)
  • date - дата отправления (27.03.2016)
  • fromCode - код станции отправления (2004000)
  • whereCode - код станции прибытия (2060600)

Массив поездов содержит

  • date0 - дата отправления

  • date0 - дата прибытия

  • time0 - время отправления

  • time1 - время прибытия

  • route0 - код станции отправления С-ПЕТ-ЛАД

  • route1 - код станции прибития ТЮМЕНЬ

  • number - номер поезда

  • timeInWay - время в пути

  • brand - Название поезда (Демидовский экспресс)

  • carrier - тип поезда ФПК (Фирменный)

  • cars - массив свободных мест купе, плацкарт и люкс

  • cars.freeSeats - кол. свободных мест

  • cars.itype

  • cars.servCls

  • cars.tariff - стоимость билета

  • cars.pt - баллы

  • cars.typeLoc - полное наименование (Плацкартный, СВ, Купе, Люкс)

  • cars.type - сокращенное наименование (Купе, плац, люкс)

  • time0 - время отправления

  • tnum0 - номер поезда

trainRoutesReturn - получает маршруты поездов, количество свободных мест, цены итд, туда-обратно

Поезда

Принимает параметры обязательные параметр при первом запросе

  • layer_id - подкатегория (5827)

необязательные параметр при повторном запросе

  • dir - 0 только в один конец, 1 - туда-обратно
  • tfl - тип поезда (1- все, 2 - дальнего следования, 3- электрички)
  • checkSeats поиск в поездах без свободных мест
  • code0 - код станции отправления
  • code1 - код станции прибытия
  • dt0 - дата отправления
  • dt1 - дата возвращения

Ответы точно такие же как и в методе trainRoutes, только содержит 2 массива, в первом - туда, во-втором - обартно

trainCarriages - получает список вагонов, свободные места, схема вагона, стоимость билетов, тип и класс обслуживания

Вагоны

необязательные параметр при повтрном запросе

  • dir - 0 только в один конец, 1 - туда-обратно
  • code0 - код станции отправления
  • code1 - код станции прибытия
  • dt0 - дата отправления (28.03.2016)
  • time0 - время отправления (15:30)
  • tnum0 - номер вагона (072Е)

Возвращает следующий массив вагонов

  • Стандартный ответ из запросов выше

  • cnumber - номер вагона

  • type - тип вагона

  • typeLoc - полное наименование (Плацкартный, СВ, Купе, Люкс)

  • clsType - 2Л, 2Э

  • tariff - стоимость билета

  • tariffServ - сервис сбор

  • seats - массив мест

  • seats.type - сокр. наименование мест (up)

  • seats.free - количество мест

  • seats.label - полное наименование мест (Верхние)

  • schemes схемы вагонов

  • html - json массив схемы вагонов занято, свободно, нижнее, верхнее, туалет итд (Парсить нужно отдельным методов, если будет время сделаю)

  • image - ссылка на картинку

  • insuranceCompany - массив с компаниями страхователями и правилами страхования

  • shortName - наименование организации

  • offerUrl - ссылка на файл с правилами, обычно PDF файл

trainStationList - получение списка всех станций в текущем маршруте движения

Станции

Пример запроса http://pass.rzd.ru/timetable/public/ru?layer_id=5804&train_num=072%D0%95&date=13.03.2016 Обращение через незащищенный протокол http://

Формат получения данных XML

Принимает параметры обязательные параметр при первом запросе

  • layer_id - подкатегория (5804)

необязательные параметр при повтрном запросе

  • train_num - номер поезда 072Е
  • date - дата отправления 13.03.2016

Возвращает следующий массив станций

  • Station - название станции
  • Code - код станции
  • ArvTime - время прибытия
  • WaitingTime - время стоянки
  • DepTime - время отправления
  • Distance - пройденная дистанция

stationCode - Получение списка кодов станций

Принимает параметры

  • stationNamePart - часть названия станции, минимум 2 символа
  • lang - язык, по умолчанию 'ru',
  • compactMode - по умолчанию 'y'

Возвращает массив найденных данных

  • station - имя станции
  • code - код станции

К примеру при значении stationNamePart = 'ЧЕБ' будут возващены все станции начинающиеся на ЧЕБ (11 станций)

License

The class is open-sourced software licensed under the MIT license

About

Api сайта rzd.ru

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • PHP 100.0%