canaltp/navitia

一个与Navitia Api(https://api.navitia.io)交互的库


README

Navitia Component是一个PHP库,用于查询Navitia Api(https://api.navitia.io),并控制查询参数。

需求

  • PHP: >=7.4
  • 一个Navitia令牌

注意:如果您还没有Navitia令牌,您必须在这里注册:https://navitia.io/register

选择您的版本

  • NavitiaComponent v1.x.x被用于生产中的旧项目(例如NMM实时)

  • NavitiaComponent v2.x.x与Symfony4等框架兼容

  • NavitiaComponent v3.0.0与Symfony5.4等现代框架兼容,旧公司名为CanalTP

  • NavitiaComponent v3.1.x与Symfony5.4等现代框架兼容,现公司名为Hove

安装

使用composer

composer require "hove/navitia":"^3.1"

旧版本示例(v3.1.x之前,已弃用)

composer require "canaltp/navitia":"~2.0"

如何使用NavitiaComponent?

通过自动装配

在您的应用程序的services.yaml文件中添加以下内容

    navitia_component:
        class: Navitia\Component\Service\ServiceFacade
        factory: [Navitia\Component\Service\ServiceFacade, getInstance]
        calls:
            - [ setCache, ["@cache.app.taggable"]]
            - [ setConfiguration, ["%navitia_config%"]]

然后,将@navitia_component添加到使用NavitiaComponent的服务中,如下所示

    App\Service\Navitia:
        class: App\Service\Navitia
        arguments: ['@navitia_component']

设置配置

您可以使用setConfiguration函数传递一个配置数组。

namespace App\Service;

use Navitia\Component\Service\ServiceFacade;

class Navitia
{
    private ServiceFacade $navitiacomponent;

    function __construct(ServiceFacade $navitiacomponent)
    {
        $this->navitiacomponent = $navitiacomponent;
        // Configuration
        $config = array(
            'url' => 'api.navitia.io',
            'token' => '3b036afe-4242-abcd-4242-99718476c2e0', // Example of token
        );
        $this->navitiacomponent->setConfiguration($config);
    }
}

查询示例

$query = array(
    'api' => 'journeys',
    'parameters' => array(
        'from' => '2.3749036;48.8467927',
        'to' => '2.2922926;48.8583736',
    ),
);

$result = $this->navitiacomponent->call($query); // Returns an object with Api result

配置参数

用例

Navitia组件支持以下API

  • 旅程
  • 覆盖范围
  • 出发

旅程

行程示例

$query = array(
    'api' => 'journeys',
    'parameters' => array(
        'from' => '2.3749036;48.8467927',
        'to' => '2.2922926;48.8583736',
    ),
);

$result = $this->navitiacomponent->call($query);

另请参阅:http://doc.navitia.io/#journeys

覆盖范围

示例,检索有关覆盖范围的元数据

$query = array(
    'api' => 'coverage',
    'parameters' => array(
        'region' => 'sandbox',
    ),
);

$result = $this->navitiacomponent->call($query);

另请参阅:http://doc.navitia.io/#coverage

出发

示例,获取某条线路在指定日期和时间后的所有下一班次

$query = array(
    'api' => 'departures',
    'parameters' => array(
        'region' => 'sandbox',
        'path_filter' => '/lines/line:RAT:M1/departures?from_datetime=20160615T1337'
    ),
);

$result = $this->navitiacomponent->call($query);

另请参阅:http://doc.navitia.io/#departures

调用任何其他API

要使用此组件和您提供的配置查询Navitia的任何其他URL,可以使用以下模式

$query = array(
    'api' => 'coverage',
    'parameters' => array(
        'region' => 'sandbox',                          // Coverage name
        'path_filter' => 'stop_areas?variable=value',   // Url to call
    ),
);

$result = $this->navitiacomponent->call($query);
// Will call http://api.navitia.io/v1/coverage/sandbox/stop_areas?variable=value

使用查询构建器

您可以使用查询构建器

use Navitia\Component\Request\JourneysRequest;
use Navitia\Component\Request\Parameters\JourneysParameters;

$query = new JourneysRequest();

$actionParameters = new JourneysParameters();

$actionParameters
    ->setFrom('2.3749036;48.8467927')
    ->setTo('2.2922926;48.8583736')
    ->setDatetime('20160819T153000')
;

$query->setParameters($actionParameters);

$result = $this->navitiacomponent->call($query);

使用查询构建器获取所有下一班次

use Navitia\Component\Request\Parameters\CoverageDeparturesParameters;
use Navitia\Component\Request\DeparturesRequest;

$query = new DeparturesRequest();
$query->setRegion('sandbox')->setPathFilter('lines/line:RAT:M1');

$actionParameters = new CoverageDeparturesParameters();
$actionParameters->setDuration(1);
$actionParameters->setFromDatetime('20160615T1337');
$actionParameters->setForbiddenUris(['lines', 'modes']);
$actionParameters->setDataFreshness('realtime');

$query->setParameters($actionParameters);

$result = $this->navitiacomponent->call($query);

运行测试

对于这部分,您应该使用docker(需要安装),并使用以下命令启动

make all_tests_dev

许可证

该库位于MIT