Skip to content

Commit 3ec5544

Browse files
committed
feat: added air pollution resource
1 parent 23906c4 commit 3ec5544

9 files changed

+166
-169
lines changed

src/Entity/AirPollution/AirPollution.php

+8-76
Original file line numberDiff line numberDiff line change
@@ -2,89 +2,21 @@
22

33
namespace ProgrammatorDev\OpenWeatherMap\Entity\AirPollution;
44

5-
class AirPollution
6-
{
7-
private \DateTimeImmutable $dateTime;
8-
9-
private AirQuality $airQuality;
10-
11-
private float $carbonMonoxide;
12-
13-
private float $nitrogenMonoxide;
14-
15-
private float $nitrogenDioxide;
16-
17-
private float $ozone;
18-
19-
private float $sulphurDioxide;
20-
21-
private float $fineParticulateMatter;
22-
23-
private float $coarseParticulateMatter;
5+
use ProgrammatorDev\OpenWeatherMap\Entity\Coordinate;
246

25-
private float $ammonia;
7+
class AirPollution extends AirPollutionData
8+
{
9+
private Coordinate $coordinate;
2610

2711
public function __construct(array $data)
2812
{
29-
$this->dateTime = \DateTimeImmutable::createFromFormat('U', $data['dt'], new \DateTimeZone('UTC'));
30-
$this->airQuality = new AirQuality($data['main']);
31-
$this->carbonMonoxide = $data['components']['co'];
32-
$this->nitrogenMonoxide = $data['components']['no'];
33-
$this->nitrogenDioxide = $data['components']['no2'];
34-
$this->ozone = $data['components']['o3'];
35-
$this->sulphurDioxide = $data['components']['so2'];
36-
$this->fineParticulateMatter = $data['components']['pm2_5'];
37-
$this->coarseParticulateMatter = $data['components']['pm10'];
38-
$this->ammonia = $data['components']['nh3'];
39-
}
40-
41-
public function getDateTime(): \DateTimeImmutable
42-
{
43-
return $this->dateTime;
44-
}
45-
46-
public function getAirQuality(): AirQuality
47-
{
48-
return $this->airQuality;
49-
}
50-
51-
public function getCarbonMonoxide(): float
52-
{
53-
return $this->carbonMonoxide;
54-
}
55-
56-
public function getNitrogenMonoxide(): float
57-
{
58-
return $this->nitrogenMonoxide;
59-
}
60-
61-
public function getNitrogenDioxide(): float
62-
{
63-
return $this->nitrogenDioxide;
64-
}
65-
66-
public function getOzone(): float
67-
{
68-
return $this->ozone;
69-
}
70-
71-
public function getSulphurDioxide(): float
72-
{
73-
return $this->sulphurDioxide;
74-
}
13+
parent::__construct($data['list'][0]);
7514

76-
public function getFineParticulateMatter(): float
77-
{
78-
return $this->fineParticulateMatter;
79-
}
80-
81-
public function getCoarseParticulateMatter(): float
82-
{
83-
return $this->coarseParticulateMatter;
15+
$this->coordinate = new Coordinate($data['coord']);
8416
}
8517

86-
public function getAmmonia(): float
18+
public function getCoordinate(): Coordinate
8719
{
88-
return $this->ammonia;
20+
return $this->coordinate;
8921
}
9022
}

src/Entity/AirPollution/AirPollutionLocationList.php src/Entity/AirPollution/AirPollutionCollection.php

+8-8
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,30 @@
33
namespace ProgrammatorDev\OpenWeatherMap\Entity\AirPollution;
44

55
use ProgrammatorDev\OpenWeatherMap\Entity\Coordinate;
6-
use ProgrammatorDev\OpenWeatherMap\Util\EntityListTrait;
6+
use ProgrammatorDev\OpenWeatherMap\Util\EntityTrait;
77

8-
class AirPollutionLocationList
8+
class AirPollutionCollection
99
{
10-
use EntityListTrait;
10+
use EntityTrait;
1111

1212
private Coordinate $coordinate;
1313

14-
/** @var AirPollution[] */
15-
private array $list;
14+
/** @var AirPollutionData[] */
15+
private array $data;
1616

1717
public function __construct(array $data)
1818
{
1919
$this->coordinate = new Coordinate($data['coord']);
20-
$this->list = $this->createEntityList(AirPollution::class, $data['list']);
20+
$this->data = $this->createEntityList(AirPollutionData::class, $data['list']);
2121
}
2222

2323
public function getCoordinate(): Coordinate
2424
{
2525
return $this->coordinate;
2626
}
2727

28-
public function getList(): array
28+
public function getData(): array
2929
{
30-
return $this->list;
30+
return $this->data;
3131
}
3232
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
<?php
2+
3+
namespace ProgrammatorDev\OpenWeatherMap\Entity\AirPollution;
4+
5+
class AirPollutionData
6+
{
7+
private \DateTimeImmutable $dateTime;
8+
9+
private AirQuality $airQuality;
10+
11+
private float $carbonMonoxide;
12+
13+
private float $nitrogenMonoxide;
14+
15+
private float $nitrogenDioxide;
16+
17+
private float $ozone;
18+
19+
private float $sulphurDioxide;
20+
21+
private float $fineParticulateMatter;
22+
23+
private float $coarseParticulateMatter;
24+
25+
private float $ammonia;
26+
27+
public function __construct(array $data)
28+
{
29+
$this->dateTime = \DateTimeImmutable::createFromFormat('U', $data['dt']);
30+
$this->airQuality = new AirQuality($data['main']);
31+
$this->carbonMonoxide = $data['components']['co'];
32+
$this->nitrogenMonoxide = $data['components']['no'];
33+
$this->nitrogenDioxide = $data['components']['no2'];
34+
$this->ozone = $data['components']['o3'];
35+
$this->sulphurDioxide = $data['components']['so2'];
36+
$this->fineParticulateMatter = $data['components']['pm2_5'];
37+
$this->coarseParticulateMatter = $data['components']['pm10'];
38+
$this->ammonia = $data['components']['nh3'];
39+
}
40+
41+
public function getDateTime(): \DateTimeImmutable
42+
{
43+
return $this->dateTime;
44+
}
45+
46+
public function getAirQuality(): AirQuality
47+
{
48+
return $this->airQuality;
49+
}
50+
51+
public function getCarbonMonoxide(): float
52+
{
53+
return $this->carbonMonoxide;
54+
}
55+
56+
public function getNitrogenMonoxide(): float
57+
{
58+
return $this->nitrogenMonoxide;
59+
}
60+
61+
public function getNitrogenDioxide(): float
62+
{
63+
return $this->nitrogenDioxide;
64+
}
65+
66+
public function getOzone(): float
67+
{
68+
return $this->ozone;
69+
}
70+
71+
public function getSulphurDioxide(): float
72+
{
73+
return $this->sulphurDioxide;
74+
}
75+
76+
public function getFineParticulateMatter(): float
77+
{
78+
return $this->fineParticulateMatter;
79+
}
80+
81+
public function getCoarseParticulateMatter(): float
82+
{
83+
return $this->coarseParticulateMatter;
84+
}
85+
86+
public function getAmmonia(): float
87+
{
88+
return $this->ammonia;
89+
}
90+
}

src/Entity/AirPollution/AirPollutionLocation.php

-22
This file was deleted.

src/Entity/AirPollution/AirQuality.php

+14-5
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,16 @@
22

33
namespace ProgrammatorDev\OpenWeatherMap\Entity\AirPollution;
44

5-
use ProgrammatorDev\OpenWeatherMap\Entity\AirPollution\Util\AirQualityQualitativeNameTrait;
6-
75
class AirQuality
86
{
9-
use AirQualityQualitativeNameTrait;
10-
117
private int $index;
128

139
private string $qualitativeName;
1410

1511
public function __construct(array $data)
1612
{
1713
$this->index = $data['aqi'];
18-
$this->qualitativeName = $this->getAirQualityQualitativeName($this->index);
14+
$this->qualitativeName = $this->findQualitativeName($this->index);
1915
}
2016

2117
public function getIndex(): int
@@ -27,4 +23,17 @@ public function getQualitativeName(): string
2723
{
2824
return $this->qualitativeName;
2925
}
26+
27+
private function findQualitativeName(int $index): string
28+
{
29+
// levels based on https://openweathermap.org/api/air-pollution
30+
return match ($index) {
31+
0 => 'Undefined',
32+
1 => 'Good',
33+
2 => 'Fair',
34+
3 => 'Moderate',
35+
4 => 'Poor',
36+
5 => 'Very Poor'
37+
};
38+
}
3039
}

src/Entity/AirPollution/Util/AirQualityQualitativeNameTrait.php

-21
This file was deleted.

src/OpenWeatherMap.php

+6-5
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use ProgrammatorDev\OpenWeatherMap\Exception\UnauthorizedException;
1313
use ProgrammatorDev\OpenWeatherMap\Exception\UnexpectedErrorException;
1414
use ProgrammatorDev\OpenWeatherMap\Language\Language;
15+
use ProgrammatorDev\OpenWeatherMap\Resource\AirPollutionResource;
1516
use ProgrammatorDev\OpenWeatherMap\Resource\GeocodingResource;
1617
use ProgrammatorDev\OpenWeatherMap\Resource\WeatherResource;
1718
use ProgrammatorDev\OpenWeatherMap\UnitSystem\UnitSystem;
@@ -36,6 +37,11 @@ public function weather(): WeatherResource
3637
return new WeatherResource($this);
3738
}
3839

40+
public function airPollution(): AirPollutionResource
41+
{
42+
return new AirPollutionResource($this);
43+
}
44+
3945
public function geocoding(): GeocodingResource
4046
{
4147
return new GeocodingResource($this);
@@ -49,11 +55,6 @@ public function geocoding(): GeocodingResource
4955
// public function oneCall(): OneCallEndpoint
5056
// {
5157
// return new OneCallEndpoint($this);
52-
// }
53-
//
54-
// public function airPollution(): AirPollutionEndpoint
55-
// {
56-
// return new AirPollutionEndpoint($this);
5758
// }
5859

5960
private function configureOptions(array $options): array

0 commit comments

Comments
 (0)