Issues (24)

src/Service/WeatherService.php (2 issues)

Labels
Severity
1
<?php
2
3
namespace Anax\Service;
4
5
use Anax\Ipstack\Ipstack;
6
7
/**
8
 * A plain service class with no dependencies.
9
 */
10
class WeatherService
11
{
12
    private $message = null;
13
14
15
16 6
    public function setMessage(string $message) : void
17
    {
18 6
        $this->message = $message;
19 6
    }
20
      
21 3
    public function getWeather($cIp, $cLat, $cLon)
22
    {
23 3
        $keyArray = include(__DIR__ . '/../../config/api_keys.php');
24
        
25 3
        $stack = new Ipstack();
26 3
        $lat = $cLat;
27 3
        $lon = $cLon;
28 3
        if (($cLat == null || $cLon == null) && $cIp != null) {
29 1
            $response = $stack->getIpInfo($cIp, $keyArray["keys"]["ipstack"]);
30 1
            $lat = $response["latitude"];
31 1
            $lon = $response["longitude"];
32
        }
33
34 3
        $query = "https://api.openweathermap.org/data/2.5/forecast?lat=". $lat . "&lon=".  $lon . "&appid=" . $keyArray["keys"]["weather"];
35
36 3
        if ($lat != null && $lon != null) {
37 1
            $res = file_get_contents($query) ?? null;
38
        }
39 3
        $info = json_decode($res ?? null, true);
40
41 3
        if ($info == null) {
42 2
            $info = ["error" => "Ingen info hittades för angivna ip/koordinater"];
43
        }
44 3
        if (!isset($response)) {
45 2
            $response = null;
46
        }
47
48 3
        return ["weather" => $info, "ip" => $response];
49
    }
50
51 3
    public function getWeatherThroughMultiCurl($cIp, $cLat, $cLon)
52
    {
53 3
        $keyArray = include(__DIR__ . '/../../config/api_keys.php');
54 3
        $stack = new Ipstack();
55 3
        $lat = $cLat;
56 3
        $lon = $cLon;
57 3
        if (($cLat == null || $cLon == null) && $cIp != null) {
58 1
            $ipresponse = $stack->getIpInfo($cIp, $keyArray["keys"]["ipstack"]);
59 1
            $lat = $ipresponse["latitude"];
60 1
            $lon = $ipresponse["longitude"];
61
        }
62
63 3
        $dateTime = [time() - 432000, time() - 345600, time() - 259200, time() - 172800, time() - 86400];
64
        $options = [
65 3
            CURLOPT_RETURNTRANSFER => true,
66
        ];
67
68
        // Add all curl handlers and remember them
69
        // Initiate the multi curl handler
70 3
        $mh = curl_multi_init();
71 3
        $chAll = [];
72 3
        foreach ($dateTime as $dt) {
73 3
            $ch = curl_init("https://api.openweathermap.org/data/2.5/onecall/timemachine?lat=". $lat . "&lon=".  $lon . "&dt=" . $dt . "&appid=" . $keyArray["keys"]["weather"]);
74 3
            curl_setopt_array($ch, $options);
0 ignored issues
show
It seems like $ch can also be of type false; however, parameter $ch of curl_setopt_array() does only seem to accept resource, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

74
            curl_setopt_array(/** @scrutinizer ignore-type */ $ch, $options);
Loading history...
75 3
            curl_multi_add_handle($mh, $ch);
0 ignored issues
show
It seems like $ch can also be of type false; however, parameter $ch of curl_multi_add_handle() does only seem to accept resource, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

75
            curl_multi_add_handle($mh, /** @scrutinizer ignore-type */ $ch);
Loading history...
76 3
            $chAll[] = $ch;
77
        }
78
79
        // Execute all queries simultaneously,
80
        // and continue when all are complete
81 3
        $running = null;
82
        do {
83 3
            curl_multi_exec($mh, $running);
84 3
        } while ($running);
85
86
        // Close the handles
87 3
        foreach ($chAll as $ch) {
88 3
            curl_multi_remove_handle($mh, $ch);
89
        }
90 3
        curl_multi_close($mh);
91
92
        // All of our requests are done, we can now access the results
93 3
        $response = [];
94 3
        foreach ($chAll as $ch) {
95 3
            $data = curl_multi_getcontent($ch);
96 3
            $response[] = json_decode($data, true);
97
        }
98
99 3
        return ["weather" => $response ?? null, "ip" => $ipresponse ?? null];
100
    }
101
}
102