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

AppsExtractor   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 28
dl 0
loc 48
rs 10
c 0
b 0
f 0
wmc 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A extractDeveloper() 0 12 1
A extractApp() 0 22 1
1
<?php
2
declare(strict_types=1);
3
4
namespace Nelexa\GPlay\Scraper\Extractor;
5
6
use Nelexa\GPlay\GPlayApps;
7
use Nelexa\GPlay\Model\App;
8
use Nelexa\GPlay\Model\Developer;
9
use Nelexa\GPlay\Model\GoogleImage;
10
use function GuzzleHttp\Psr7\parse_query;
11
12
class AppsExtractor
13
{
14
    /**
15
     * @param array $data
16
     * @param string $locale
17
     * @return App
18
     */
19
    public static function extractApp(array $data, string $locale): App
20
    {
21
        $name = $data[2];
22
        $appId = $data[12][0];
23
        $url = GPlayApps::GOOGLE_PLAY_URL . $data[9][4][2];
24
        $icon = new GoogleImage($data[1][1][0][3][2]);
25
        $developer = self::extractDeveloper($data);
26
        $price = $data[7][0][3][2][1][0][2];
27
        $summary = $data[4][1][1][1][1];
28
        $score = $data[6][0][2][1][1];
29
30
        return new App(
31
            App::newBuilder()
32
                ->setId($appId)
33
                ->setUrl($url)
34
                ->setLocale($locale)
35
                ->setName($name)
36
                ->setSummary($summary)
37
                ->setDeveloper($developer)
38
                ->setIcon($icon)
39
                ->setScore($score)
40
                ->setPriceText($price)
41
        );
42
    }
43
44
    /**
45
     * @param array $data
46
     * @return Developer
47
     */
48
    private static function extractDeveloper(array $data): Developer
49
    {
50
        $developerName = $data[4][0][0][0];
51
        $developerPage = GPlayApps::GOOGLE_PLAY_URL . $data[4][0][0][1][4][2];
52
        $developerId = parse_query(parse_url($developerPage, PHP_URL_QUERY))[GPlayApps::REQ_PARAM_ID];
53
        $developer = new Developer(
54
            Developer::newBuilder()
55
                ->setId($developerId)
56
                ->setUrl($developerPage)
57
                ->setName($developerName)
58
        );
59
        return $developer;
60
    }
61
}
62