eegusakov / geo-search
一个用于查找位置信息的 PHP 库,包括地理点、名称、地区、国家和时区信息。
Requires
- php: ^8.0
- laminas/laminas-diactoros: ^3.0
- psr/http-client: ^1.0
- psr/log: ^3.0
- psr/simple-cache: ^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.21
- phpunit/phpunit: ^9.6
README
语言: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
在以下数据上执行搜索
- 美国邮政编码,
- 英国邮政编码,
- 加拿大邮政编码,
- IP 地址,
- 纬度/经度(十进制度数),
- 城市名称;
示例
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
在以下数据上执行搜索
- 城市名称,
- 邮政编码;
示例
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文件。