suilven/uk-covid-govt-api-client

英国政府COVID API客户端

dev-master 2020-09-23 22:27 UTC

This package is auto-updated.

Last update: 2024-09-24 08:14:49 UTC


README

Build Status Scrutinizer Code Quality codecov.io

Latest Stable Version Latest Unstable Version Total Downloads License Monthly Downloads Daily Downloads composer.lock

GitHub Code Size GitHub Repo Size GitHub Last Commit GitHub Activity GitHub Issues

codecov.io

背景

英国政府提供了一组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背后的数据是如何更新的,这有点像一个黑盒。