2017 © Pedro Peláez
 

library rzd-api

rzd api

image

visavi/rzd-api

rzd api

  • Tuesday, July 31, 2018
  • by visavi
  • Repository
  • 7 Watchers
  • 24 Stars
  • 110 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 5 Versions
  • 224 % Grown

The README.md

Api сайта rzd.ru

Latest Stable Version Total Downloads Latest Unstable Version License, (*1)

Описание установки, (*2)

Описание интерфейса пользователя, (*3)

Что умеет Api

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

Демонстрация возможностей

Быстрый способ (Docker)

docker run -p 8000:8000 --rm --name rzd-api -v $(pwd):/app-it pavelsr/rzd-api
curl -s 'http://127.0.0.1:8000/train_routes.php?code0=2004000&code1=2000000'

Если вы предпочитаете Github Container Registry вы можете также использовать образ ghcr.io/pavelsr/rzd-api:latest, (*4)

Локальная установка

Скачайте архив, распакуйте и перейдите в директорию, (*5)

Установите необходимые зависимости, (*6)

composer install

И запустите встроенный веб-сервер, (*7)

php -S localhost:8000 -t examples

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

<?php

$config = new Rzd\Config();

// Set language
$config->setLanguage('en');

// Set userAgent
$config->setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1');

// Set referer
$config->setReferer('https://ticket.rzd.ru/');

// Enable debug mode
$config->setDebugMode(true);

// Set proxy
$config->setProxy('https://username:password@192.168.16.1:10');

// Set timeout
$config->setTimeout(10);

//$config не обязателен
$api = new Rzd\Api($config);

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

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

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

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

Выбор маршрута - выбор поезда - выбор вагона, (*8)

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

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

Этапы

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

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

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

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

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

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

Каждый запрос к сайту должен содержать куки примерного вида: * lang=ru - текущий язык * JSESSIONID=0000w74wcMhGMfeoE6ibmsh4i4W:17obq9kpt - уникальный ключ * AuthFlag=false - авторизован ли пользователь на сайте, (*14)

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

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

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

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

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}}, (*17)

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

https://pass.rzd.ru/timetable/public/ru?layer_id=5827&rid={{rid}}, (*18)

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

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

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

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

Маршруты, (*21)

Принимает параметры обязательные параметр при первом запросе * layer_id - подкатегория (5827), (*22)

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

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

Массив поездов содержит * date0 - дата отправления * date1 - дата прибытия * time0 - время отправления * time1 - время прибытия * route0 - код станции отправления С-ПЕТ-ЛАД * route1 - код станции прибытия ТЮМЕНЬ * number - номер поезда * timeInWay - время в пути * brand - Название поезда (Демидовский экспресс) * carrier - тип поезда ФПК (Фирменный), (*25)

  • cars - массив свободных мест купе, плацкарт и люкс
  • cars.freeSeats - кол. свободных мест
  • cars.itype
  • cars.servCls - класс обслуживания (2Ю, 2Ж и т.д.)
  • cars.tariff - стоимость билета
  • cars.pt - баллы
  • cars.typeLoc - полное наименование (Плацкартный, СВ, Купе, Люкс)
  • cars.type - сокращенное наименование (Купе, плац, люкс)
  • cars.disabledPerson - флаг обозначающий места для инвалидов

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

Поезда, (*26)

Принимает параметры обязательные параметр при первом запросе * layer_id - подкатегория (5827), (*27)

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

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

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

Вагоны, (*30)

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

Возвращает следующий массив вагонов * Стандартный ответ из запросов выше * cnumber - номер вагона * type - тип вагона * typeLoc - полное наименование (Плацкартный, СВ, Купе, Люкс) * clsType - 2Л, 2Э * tariff - стоимость билета * tariffServ - сервис сбор, (*32)

  • seats - массив мест (верхние, верхние боковые, нижние, нижние боковые итд)
  • seats.*.places - список свободных мест
  • seats.*.tariff - цены за место
  • seats.type - сокр. наименование мест (up)
  • seats.free - количество мест
  • seats.label - полное наименование мест (Верхние), (*33)

  • schemes схемы вагонов, (*34)

  • html - json массив информация о схеме вагонов
  • image - ссылка на картинку, (*35)

  • insuranceCompany - массив с компаниями страхователями и правилами страхования, (*36)

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

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

Станции, (*37)

Пример запроса https://pass.rzd.ru/ticket/services/route/basicRoute?STRUCTURE_ID=704&trainNumber=054Г&depDate=13.03.2016, (*38)

Принимает параметры Необязательные параметр при повторном запросе * trainNumber - номер поезда 054Г * depDate - дата отправления 13.03.2016, (*39)

Возвращает следующий массив станций * Station - название станции * Code - код станции * ArvTime - время прибытия * WaitingTime - время стоянки * DepTime - время отправления * Distance - пройденная дистанция, (*40)

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

Принимает параметры * stationNamePart - часть названия станции, минимум 2 символа * compactMode - по умолчанию 'y', (*41)

Возвращает массив найденных данных * station - имя станции * code - код станции, (*42)

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

License

The class is open-sourced software licensed under the MIT license, (*44)

The Versions

31/07 2018

dev-master

9999999-dev http://visavi.net

rzd api

  Sources   Download

MIT

The Requires

 

The Development Requires

api ticket train rzd

27/07 2018

v2.1

2.1.0.0 http://visavi.net

rzd api

  Sources   Download

MIT

The Requires

 

The Development Requires

api ticket train rzd

26/07 2018

v2.0

2.0.0.0 http://visavi.net

rzd api

  Sources   Download

MIT

The Requires

 

The Development Requires

api ticket train rzd

09/06 2017
01/06 2017