alexeydg/rzd-api

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

This package is not auto-updated.

Last update: 2024-09-21 17:12:16 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 表示网站已为我们提供一个唯一的标识符和 cookie,OK 表示已获取所需的所有数据。在其他所有响应中,Error 或 FAIL 表示数据获取错误

获取 cookie

每个对网站的请求都必须包含以下类型的 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}}

第二个请求将使用已获得的唯一标识符,它包含前一个请求的数据和 cookies。因此,为了优化,我们可以不发送第一个请求中指定的某些参数

已实现的请求

需要实现通过 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 方法相同,但包含两个数组,第一个数组为去程,第二个数组为返程

trainCarriages - 获取车厢列表、空余座位、车厢布局、票价、类型和服务等级

Вагоны

在重复查询时为可选参数

  • dir - 0 仅单向,1 - 往返
  • code0 - 发车站代码
  • code1 - 到达站代码
  • dt0 - 发车日期(2016年3月28日)
  • time0 - 发车时间(15:30)
  • tnum0 - 车厢号(072Е)

返回以下车厢数组

  • 以上请求的标准返回结果

  • cnumber - 车厢号

  • type - 车厢类型

  • typeLoc - 完整名称(卧铺、软卧、硬卧、软座)

  • clsType - 2L, 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个站点)

许可证

该类是开源软件,根据 MIT 许可证 许可