Passed
Pull Request — master (#1)
by
unknown
02:45
created

DeveloperAppsScraper   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 6
eloc 22
c 1
b 0
f 0
dl 0
loc 41
rs 10

1 Method

Rating   Name   Duplication   Size   Complexity  
B __invoke() 0 32 6
1
<?php
2
declare(strict_types=1);
3
4
namespace Nelexa\GPlay\Scraper;
5
6
use GuzzleHttp\Exception\GuzzleException;
7
use GuzzleHttp\Psr7\Request;
8
use Nelexa\GPlay\Exception\GooglePlayException;
9
use Nelexa\GPlay\GPlayApps;
10
use Nelexa\GPlay\Model\App;
11
use Nelexa\GPlay\Util\ScraperUtil;
12
use Psr\Http\Message\RequestInterface;
13
use Psr\Http\Message\ResponseInterface;
14
15
class DeveloperAppsScraper extends PlayStoreUiPagesScraper
16
{
17
18
    /**
19
     * @param RequestInterface $request
20
     * @param ResponseInterface $response
21
     * @return App[]
22
     * @throws GooglePlayException
23
     */
24
    public function __invoke(RequestInterface $request, ResponseInterface $response)
25
    {
26
        $scriptData = ScraperUtil::extractScriptData($response->getBody()->getContents());
27
28
        $scriptDataApps = null;
29
        foreach ($scriptData as $key => $scriptValue) {
30
            if (isset($scriptValue[0][1][0][0][3][4][2])) { // ds:3
31
                $scriptDataApps = $scriptValue;
32
            }
33
        }
34
        if ($scriptDataApps === null) {
35
            throw (new GooglePlayException('Error fetch cluster page'))
36
                ->setUrl($request->getUri()->__toString());
37
        }
38
39
        $developerAppsUrl = $scriptDataApps[0][1][0][0][3][4][2] ?? null;
40
        if ($developerAppsUrl === null) {
41
            return [];
42
        }
43
        $developerAppsUrl = GPlayApps::GOOGLE_PLAY_URL . $developerAppsUrl;
44
45
        $developerAppsUrl .=
46
            '&' . GPlayApps::REQ_PARAM_LOCALE . '=' . urlencode($this->locale) .
47
            '&' . GPlayApps::REQ_PARAM_COUNTRY . '=' . urlencode($this->country);
48
49
        $requestSimilar = new Request('GET', $developerAppsUrl);
50
        try {
51
            $responseSimilar = $this->httpClient->send($requestSimilar);
52
        } catch (GuzzleException $e) {
53
            throw new GooglePlayException($e->getMessage(), $e->getCode(), $e);
54
        }
55
        return parent::__invoke($requestSimilar, $responseSimilar);
56
    }
57
}
58