suilven / uk-covid-govt-api-client
英国政府COVID API客户端
dev-master
2020-09-23 22:27 UTC
Requires
- php: ~7.1
- league/climate: ^3.5
- nesbot/carbon: ^2.40
- phpunit/phpunit: ^7 || ^8 || ^9
- vanilla/garden-cli: ^2.2
Requires (Dev)
- ergebnis/composer-normalize: ^2.5
- php-parallel-lint/php-console-highlighter: ^0.5.0
- php-parallel-lint/php-parallel-lint: ^1.2
- php-vcr/phpunit-testlistener-vcr: ^3.2
- phpstan/extension-installer: ^1.0
- phpstan/phpstan-strict-rules: ^0.12.5
- slevomat/coding-standard: ^6.4
- suilven/php-travis-enhancer: ^1.0
- vimeo/psalm: ^3.16
This package is auto-updated.
Last update: 2024-09-24 08:14:49 UTC
README
背景
英国政府提供了一组API用于访问COVID数据。文档质量较差,请参考https://coronavirus.data.gov.uk/developers-guide,如果缺少结构参数,API调用将重定向到上面的文档。
我不确定数据更新的频率和确切时间,但希望这能对PHP社区有所帮助。
安装
现有PHP环境
如果您已经有了现有的PHP环境,可以按照以下步骤安装
composer require suilven/uk-covid-govt-api-client
Docker
提供了一个Docker环境,主要用于运行单元测试
sudo docker-compose up -d phpcli
sudo docker-compose exec /bin/bash
composer install
用法
获取区域类型
区域类型是必需的,默认为国家级别。可以设置如下
use Suilven\CovidAPIClient\Factory\AreaTypeFactory;
use Suilven\CovidAPIClient\Filter\AreaType;
$factory = new AreaTypeFactory();
$areaType = $factory->getAreaType(AreaType::NATION);
public const OVERVIEW = 'overview';
public const NATION = 'nation';
public const REGION = 'region';
public const NHS_REGION = 'nhsRegion';
public const UPPER_TIER = 'utla';
public const LOWER_TIER = 'ltla';
AreaType的有效值如下
AreaType::OVERVIEW
AreaType::NATION
AreaType::REGION
AreaType::NHS_REGION
AreaType::UPPER_TIER
AreaType::LOWER_TIER
上层和下层区域名称的有效值可以在docs目录中找到。
添加过滤器
$factory = new AreaTypeFactory();
$areaType = $factory->getAreaType(AreaType::UPPER_TIER);
$client = new APIClient();
$filter = new Filter();
$filter->setAreaType($areaType);
$filter->setAreaName('Blackburn with Darwen');
$result = $client->getData([$filter]);
可以设置一个日期、区域代码或区域名称,如上所述。
获取结果
数组中的每个记录都是一个 Suilven\CovidAPIClient\Model<SingleEntry
对象。
$record = $result->getRecords();
获取单个结果的数据
$record->getNewCasesByPublishDate();
$record->getNewDeaths28DaysByDeathDate();
$record->getCumCasesByPublishDate();
$record->getCumDeaths28DaysByDeathDate();
$record->getCumCasesByPublishDate();
$this->assertEquals('S12000027', $record->getAreaCode();
$this->assertEquals('Shetland Islands', $record->getAreaName();
$this->assertEquals('2020-09-21', $record->getDate())
评论
这是一个功能性的但较为简略的实现,尽管经过了充分的测试。
我仍然不完全理解API背后的数据是如何更新的,这有点像一个黑盒。