eegusakov/geo-search

一个用于查找位置信息的 PHP 库,包括地理点、名称、地区、国家和时区信息。

v1.0.3 2024-07-23 15:50 UTC

This package is auto-updated.

Last update: 2024-09-23 16:42:03 UTC


README

GitHub GitHub code size in bytes CI GitHub issues

语言:ENG,RUS

Geo Search - 允许您根据传输数据确定对象的地理位置的 PHP 库。

用于搜索的第三方服务 API,因此搜索的输入数据可能因服务而异。以下列出了可用的服务完整列表。

兼容 PSR

任何与 PSR-18 兼容的客户端都适用于提供 HTTP 请求。以下示例将使用 Guzzle 库。

任何与 PSP-16 兼容的客户端都适用于与缓存一起工作。以下示例将使用 SymfonyCache 库。

任何与 PSR-3 兼容的客户端都适用于错误日志(例如 Monolog)。以下示例将使用当前库中包含的 ConsoleLogger。

入门

安装 Geo Search

安装 Geo Search 的推荐方法是使用 Composer

composer require eegusakov/geo-search

服务

注意,要使用每个服务,您需要获取一个 API 访问令牌。要获取它,请按照特定服务的链接操作。

1. WeatherApi

服务的链接: https://www.weatherapi.com/my/

文档链接: https://www.weatherapi.com/api-explorer.aspx#tz

在以下数据上执行搜索

  1. 美国邮政编码,
  2. 英国邮政编码,
  3. 加拿大邮政编码,
  4. IP 地址,
  5. 纬度/经度(十进制度数),
  6. 城市名称;

示例

use GuzzleHttp\Client;
use Eegusakov\GeoSearch\Engines\WeatherApi\WeatherApiSearchEngine;
use Eegusakov\GeoSearch\Engines\WeatherApi\ResponseFromGeoDtoMapper;

$weatherApiSearchEngine = new WeatherApiSearchEngine(
    '<API_TOKEN>',
    new Client(),
    new ResponseFromGeoDtoMapper()
);

$geoByCity = $weatherApiSearchEngine->search('Moscow');

$geoByCoordinates = $weatherApiSearchEngine->search('53,-0.12');

$geoByZipCode = $weatherApiSearchEngine->search('90201');

2. OpenMeteo

服务的链接: https://open-meteo.com/

文档链接: https://open-meteo.com/en/docs/geocoding-api

在以下数据上执行搜索

  1. 城市名称,
  2. 邮政编码;

示例

use GuzzleHttp\Client;
use Eegusakov\GeoSearch\Engines\OpenMeteo\OpenMeteoSearchEngine;
use Eegusakov\GeoSearch\Engines\OpenMeteo\ResponseFromGeoDtoMapper;

$openMeteoSearchEngine = new OpenMeteoSearchEngine(
  new Client(),
  new ResponseFromGeoDtoMapper()
);

$geoByCity = $openMeteoSearchEngine->search('Moscow');

$geoByZipCode = $openMeteoSearchEngine->search('10001');

其他功能

1. 同时使用多个服务

此库允许您同时使用多个服务,并获取第一个返回非空响应的服务的结果。

use Eegusakov\GeoSearch\Engines\ChainSearchEngine;
use Eegusakov\GeoSearch\Engines\OpenMeteo\OpenMeteoSearchEngine;
use Eegusakov\GeoSearch\Engines\OpenMeteo\ResponseFromGeoDtoMapper as OpenMeteoResponseFromGeoDtoMapper;
use Eegusakov\GeoSearch\Engines\WeatherApi\ResponseFromGeoDtoMapper as WeatherApiResponseFromGeoDtoMapper;
use Eegusakov\GeoSearch\Engines\WeatherApi\WeatherApiSearchEngine;
use GuzzleHttp\Client;

$chainSearchEngine = new ChainSearchEngine(
    new WeatherApiSearchEngine(
        '<API_TOKEN_1>',
        new Client(),
        new WeatherApiResponseFromGeoDtoMapper()
    ),
    new WeatherApiSearchEngine(
        '<API_TOKEN_2>',
        new Client(),
        new WeatherApiResponseFromGeoDtoMapper()
    ),
    new OpenMeteoSearchEngine(
        new Client(),
        new OpenMeteoResponseFromGeoDtoMapper()
    )
);

$geo = $chainSearchEngine->search('Moscow');

2. 忽略错误的能力

当需要忽略错误并继续到下一个请求时,此功能相关。

ErrorHandler 处理所有错误并将它们写入日志,该库包括一个基本的记录器,它将信息简单地输出到控制台(ConsoleLogger)。

任何与 PSR-3 兼容的客户端都适用于记录。

use GuzzleHttp\Client;
use Eegusakov\GeoSearch\Engines\MuteSearchEngine;
use Eegusakov\GeoSearch\Handlers\ErrorHandler;
use Eegusakov\GeoSearch\Loggers\ConsoleLogger;
use Eegusakov\GeoSearch\Engines\WeatherApi\WeatherApiSearchEngine;
use Eegusakov\GeoSearch\Engines\WeatherApi\ResponseFromGeoDtoMapper;

$muteSearchEngine = new MuteSearchEngine(
    new WeatherApiSearchEngine(
        '<API_TOKEN>',
        new Client(),
        new ResponseFromGeoDtoMapper()
    ),
    new ErrorHandler(
        new ConsoleLogger()
    )
);

$geo = $muteSearchEngine->search('Moscow');

3. 缓存响应结果的能力

任何与 PSP-16 兼容的客户端都适用于与缓存一起工作。以下示例将使用 SymfonyCache

use Eegusakov\GeoSearch\Engines\WeatherApi\ResponseFromGeoDtoMapper;
use Eegusakov\GeoSearch\Engines\WeatherApi\WeatherApiSearchEngine;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
use Eegusakov\GeoSearch\Engines\CacheSearchEngine;
use Symfony\Component\Cache\Psr16Cache;
use GuzzleHttp\Client;

$cacheSearchEngine = new CacheSearchEngine(
    new WeatherApiSearchEngine(
        '<API_TOKEN>',
        new Client(),
        new ResponseFromGeoDtoMapper()
    ),
    new Psr16Cache(
        new FilesystemAdapter()
    ),
    60
);

$geo = $cacheSearchEngine->search('Moscow');

4. 组合第 1、2 和 3 项的能力

use GuzzleHttp\Client;
use Symfony\Component\Cache\Psr16Cache;
use Eegusakov\GeoSearch\Handlers\ErrorHandler;
use Eegusakov\GeoSearch\Loggers\ConsoleLogger;
use Eegusakov\GeoSearch\Engines\MuteSearchEngine;
use Eegusakov\GeoSearch\Engines\CacheSearchEngine;
use Eegusakov\GeoSearch\Engines\ChainSearchEngine;
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
use Eegusakov\GeoSearch\Engines\OpenMeteo\OpenMeteoSearchEngine;
use Eegusakov\GeoSearch\Engines\WeatherApi\WeatherApiSearchEngine;
use Eegusakov\GeoSearch\Engines\OpenMeteo\ResponseFromGeoDtoMapper as OpenMeteoResponseFromGeoDtoMapper;
use Eegusakov\GeoSearch\Engines\WeatherApi\ResponseFromGeoDtoMapper as WeatherApiResponseFromGeoDtoMapper;

$cacheChainMuteSearchEngine = new CacheSearchEngine(
    new ChainSearchEngine(
        new MuteSearchEngine(
            new WeatherApiSearchEngine(
                'API_TOKEN_1',
                new Client(),
                new WeatherApiResponseFromGeoDtoMapper()
            ),
            new ErrorHandler(
                new ConsoleLogger()
            )
        ),
        new MuteSearchEngine(
            new OpenMeteoSearchEngine(
                new Client(),
                new OpenMeteoResponseFromGeoDtoMapper()
            ),
            new ErrorHandler(
                new ConsoleLogger()
            )
        )
    ),
    new Psr16Cache(
        new FilesystemAdapter()
    ),
    60
);

$geo = $cacheChainMuteSearchEngine->search('Moscow');

合作

请阅读CONTRIBUTING以获取更多关于我们行为准则和向我们发送合并请求的流程信息。

许可证

本项目遵循MIT许可证 - 详细信息请参阅LICENSE文件。