alexeydg/rzd-api

v2.3 2018-09-13 12:18 UTC

This package is not auto-updated.

Last update: 2024-05-04 15:32:12 UTC


README

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