X-Git-Url: https://git.rapsys.eu/airbundle/blobdiff_plain/43c97432dd0c11bcaa1ed3cf207694aa0f6634a3..c31b21bb5ae6a3c8509ebd7b253067c04b1d87cc:/Command/WeatherCommand.php?ds=sidebyside

diff --git a/Command/WeatherCommand.php b/Command/WeatherCommand.php
index f89f684..b499390 100644
--- a/Command/WeatherCommand.php
+++ b/Command/WeatherCommand.php
@@ -1,9 +1,19 @@
-<?php
+<?php declare(strict_types=1);
+
+/*
+ * This file is part of the Rapsys AirBundle package.
+ *
+ * (c) Raphaël Gertz <symfony@rapsys.eu>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
 
 namespace Rapsys\AirBundle\Command;
 
 use Doctrine\Bundle\DoctrineBundle\Command\DoctrineCommand;
 use Doctrine\Persistence\ManagerRegistry;
+
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
 use Symfony\Component\Filesystem\Exception\IOException;
@@ -40,6 +50,7 @@ class WeatherCommand extends DoctrineCommand {
 			75006 => 'https://www.accuweather.com/fr/fr/paris-06-luxembourg/75006/hourly-weather-forecast/179147_pc?day=',
 			75007 => 'https://www.accuweather.com/en/fr/paris-07-palais-bourbon/75007/hourly-weather-forecast/179148_pc?day=',
 			75009 => 'https://www.accuweather.com/en/fr/paris-09-opera/75009/hourly-weather-forecast/179150_pc?day=',
+			75010 => 'https://www.accuweather.com/en/fr/paris-10-entrepot/75010/hourly-weather-forecast/179151_pc?day=',
 			75012 => 'https://www.accuweather.com/en/fr/paris-12-reuilly/75012/hourly-weather-forecast/179153_pc?day=',
 			75013 => 'https://www.accuweather.com/en/fr/paris-13-gobelins/75013/hourly-weather-forecast/179154_pc?day=',
 			75015 => 'https://www.accuweather.com/en/fr/paris-15-vaugirard/75015/hourly-weather-forecast/179156_pc?day=',
@@ -54,6 +65,7 @@ class WeatherCommand extends DoctrineCommand {
 			75006 => 'https://www.accuweather.com/fr/fr/paris-06-luxembourg/75006/daily-weather-forecast/179147_pc',
 			75007 => 'https://www.accuweather.com/en/fr/paris-07-palais-bourbon/75007/daily-weather-forecast/179148_pc',
 			75009 => 'https://www.accuweather.com/en/fr/paris-09-opera/75009/daily-weather-forecast/179150_pc',
+			75010 => 'https://www.accuweather.com/en/fr/paris-10-entrepot/75010/daily-weather-forecast/179151_pc',
 			75012 => 'https://www.accuweather.com/en/fr/paris-12-reuilly/75012/daily-weather-forecast/179153_pc',
 			75013 => 'https://www.accuweather.com/en/fr/paris-13-gobelins/75013/daily-weather-forecast/179154_pc',
 			75015 => 'https://www.accuweather.com/en/fr/paris-15-vaugirard/75015/daily-weather-forecast/179156_pc',
@@ -97,7 +109,7 @@ class WeatherCommand extends DoctrineCommand {
 	}
 
 	///Process the attribution
-	protected function execute(InputInterface $input, OutputInterface $output) {
+	protected function execute(InputInterface $input, OutputInterface $output): int {
 		//Kernel object
 		$kernel = $this->getApplication()->getKernel();
 
@@ -246,20 +258,20 @@ class WeatherCommand extends DoctrineCommand {
 
 				//Load simplexml
 				//XXX: trash all xmlns= broken tags
-				$sx = new \SimpleXMLElement(str_replace(['xmlns=', 'xlink:href='], ['xns=', 'href='], $tidy));
+				$sx = new \SimpleXMLElement(str_replace(['xmlns=', 'xlink:href='], ['xns=', 'href='], (string)$tidy));
 
 				//Process daily
 				if ($day == 'daily') {
 					//Iterate on each link containing data
 					foreach($sx->xpath('//a[contains(@class,"daily-forecast-card")]') as $node) {
 						//Get date
-						$dsm = trim($node->div[0]->h2[0]->span[1]);
+						$dsm = trim((string)$node->div[0]->h2[0]->span[1]);
 
 						//Get temperature
-						$temperature = str_replace('°', '', $node->div[0]->div[0]->span[0]);
+						$temperature = str_replace('°', '', (string)$node->div[0]->div[0]->span[0]);
 
 						//Get rainrisk
-						$rainrisk = trim(str_replace('%', '', $node->div[1]))/100;
+						$rainrisk = trim(str_replace('%', '', (string)$node->div[1]))/100;
 
 						//Store data
 						$data[$zipcode][$dsm]['daily'] = [
@@ -274,19 +286,19 @@ class WeatherCommand extends DoctrineCommand {
 					#/html/body/div[1]/div[5]/div[1]/div[1]/div[1]/div[1]/div[1]/div/h2/span[1]
 					foreach($sx->xpath('//div[@data-shared="false"]') as $node) {
 						//Get hour
-						$hour = trim(str_replace(' h', '', $node->div[0]->div[0]->div[0]->div[0]->div[0]->h2[0]));
+						$hour = trim(str_replace(' h', '', (string)$node->div[0]->div[0]->div[0]->div[0]->div[0]->h2[0]));
 
 						//Compute dsm from day (1=d,2=d+1,3=d+2)
 						$dsm = (new \DateTime('+'.($day - 1).' day'))->format('d/m');
 
 						//Get temperature
-						$temperature = str_replace('°', '', $node->div[0]->div[0]->div[0]->div[0]->div[1]);
+						$temperature = str_replace('°', '', (string)$node->div[0]->div[0]->div[0]->div[0]->div[1]);
 
 						//Get realfeel
-						$realfeel = trim(str_replace(['RealFeel®', '°'], '', $node->div[0]->div[0]->div[0]->div[1]->div[0]->div[0]->div[0]));
+						$realfeel = trim(str_replace(['RealFeel®', '°'], '', (string)$node->div[0]->div[0]->div[0]->div[1]->div[0]->div[0]->div[0]));
 
 						//Get rainrisk
-						$rainrisk = floatval(str_replace('%', '', trim($node->div[0]->div[0]->div[0]->div[2]->div[0]))/100);
+						$rainrisk = floatval(str_replace('%', '', trim((string)$node->div[0]->div[0]->div[0]->div[2]->div[0]))/100);
 
 						//Set rainfall to 0 (mm)
 						$rainfall = 0;
@@ -295,9 +307,9 @@ class WeatherCommand extends DoctrineCommand {
 						//TODO: wind and other infos are present in $node->div[1]->div[0]->div[1]->div[0]->p
 						foreach($node->div[1]->div[0]->div[1]->div[0]->p as $p) {
 							//Lookup for rain entry if present
-							if (in_array(trim($p), ['Rain', 'Pluie'])) {
+							if (in_array(trim((string)$p), ['Rain', 'Pluie'])) {
 								//Get rainfall
-								$rainfall = floatval(str_replace(' mm', '', $p->span[0]));
+								$rainfall = floatval(str_replace(' mm', '', (string)$p->span[0]));
 							}
 						}