Passed
Branch develop (61f351)
by Alexey
01:52
created

ClusterAppsScraper   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 31
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 14
dl 0
loc 31
rs 10
c 0
b 0
f 0
wmc 6

1 Method

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 24 6
1
<?php
2
declare(strict_types=1);
3
4
namespace Nelexa\GPlay\Scraper;
5
6
use Nelexa\GPlay\GPlayApps;
7
use Nelexa\GPlay\Http\ResponseHandlerInterface;
8
use Nelexa\GPlay\Scraper\Extractor\AppsExtractor;
9
use Nelexa\GPlay\Util\ScraperUtil;
10
use Psr\Http\Message\RequestInterface;
11
use Psr\Http\Message\ResponseInterface;
12
use function GuzzleHttp\Psr7\parse_query;
13
14
class ClusterAppsScraper implements ResponseHandlerInterface
15
{
16
    /**
17
     * @param RequestInterface $request
18
     * @param ResponseInterface $response
19
     * @return array
20
     */
21
    public function __invoke(RequestInterface $request, ResponseInterface $response): array
22
    {
23
        $scriptData = ScraperUtil::extractScriptData($response->getBody()->getContents());
24
        $scriptDataInfo = null;
25
        foreach ($scriptData as $scriptValue) {
26
            if (isset($scriptValue[0][1][0][0][0]) && is_array($scriptValue[0][1][0][0][0])) {
27
                $scriptDataInfo = $scriptValue; // ds:3
28
                break;
29
            }
30
        }
31
32
        if ($scriptDataInfo === null) {
33
            return [[], null];
34
        }
35
36
        $locale = parse_query($request->getUri()->getQuery())[GPlayApps::REQ_PARAM_LOCALE] ?? GPlayApps::DEFAULT_LOCALE;
37
38
        $apps = [];
39
        foreach ($scriptDataInfo[0][1][0][0][0] as $data) {
40
            $apps[] = AppsExtractor::extractApp($data, $locale);
41
        }
42
43
        $nextToken = $scriptDataInfo[0][1][0][0][7][1] ?? null;
44
        return [$apps, $nextToken];
45
    }
46
}
47