Passed
Branch develop (2fd4b5)
by Alexey
01:46
created

PlayStoreUiRequest::getAppsRequest()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 20
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 13
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 15
nc 1
nop 4
dl 0
loc 20
ccs 13
cts 13
cp 1
crap 1
rs 9.7666
c 0
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
4
/**
5
 * @author   Ne-Lexa
6
 * @license  MIT
7
 * @link     https://github.com/Ne-Lexa/google-play-scraper
8
 */
9
10
namespace Nelexa\GPlay\Scraper;
11
12
use GuzzleHttp\Psr7\Request;
13
use Nelexa\GPlay\Enum\SortEnum;
14
use Nelexa\GPlay\GPlayApps;
15
use Nelexa\GPlay\Model\AppId;
16
use Psr\Http\Message\RequestInterface;
17
use function GuzzleHttp\Psr7\stream_for;
18
19
/**
20
 * @internal
21
 */
22
class PlayStoreUiRequest
23
{
24
    public const LIMIT_REVIEW_ON_PAGE = 199;
25
    public const LIMIT_APPS_ON_PAGE = 100;
26
27
    private const RPC_ID_REVIEWS = 'UsvDTd';
28
    private const RPC_ID_APPS = 'qnKhOb';
29
30
    /**
31
     * @param AppId $requestApp
32
     * @param int $count
33
     * @param SortEnum $sort
34
     * @param string|null $token
35
     * @return RequestInterface
36
     */
37 1
    public static function getReviewsRequest(AppId $requestApp, int $count, SortEnum $sort, ?string $token = null): RequestInterface
38
    {
39 1
        $limit = min(self::LIMIT_REVIEW_ON_PAGE, max(1, $count));
40
        $queryParams = [
41 1
            'rpcids' => self::RPC_ID_REVIEWS,
42 1
            GPlayApps::REQ_PARAM_LOCALE => $requestApp->getLocale(),
43 1
            GPlayApps::REQ_PARAM_COUNTRY => $requestApp->getCountry(),
44
            'authuser' => null,
45 1
            'soc-app' => 121,
46 1
            'soc-platform' => 1,
47 1
            'soc-device' => 1,
48
        ];
49 1
        $url = GPlayApps::GOOGLE_PLAY_URL . '/_/PlayStoreUi/data/batchexecute?' . http_build_query($queryParams);
50
        $formParams = [
51 1
            'f.req' => '[[["' . self::RPC_ID_REVIEWS . '","[null,null,[2,' . $sort->value() . ',[' . $limit . ',null,' . ($token === null ? 'null' : '\\"' . $token . '\\"') . ']],[\\"' . $requestApp->getId() . '\\",7]]",null,"generic"]]]',
52
        ];
53
        $headers = [
54 1
            'Content-Type' => 'application/x-www-form-urlencoded;charset=utf-8',
55
        ];
56 1
        $body = stream_for(http_build_query($formParams));
57 1
        return new Request('POST', $url, $headers, $body);
58
    }
59
60
    /**
61
     * @param string $locale
62
     * @param string $country
63
     * @param int $count
64
     * @param string $token
65
     * @return RequestInterface
66
     */
67 3
    public static function getAppsRequest(string $locale, string $country, int $count, string $token): RequestInterface
68
    {
69 3
        $limit = min(self::LIMIT_APPS_ON_PAGE, max(1, $count));
70
        $queryParams = [
71 3
            'rpcids' => self::RPC_ID_APPS,
72 3
            GPlayApps::REQ_PARAM_LOCALE => $locale,
73 3
            GPlayApps::REQ_PARAM_COUNTRY => $country,
74 3
            'soc-app' => 121,
75 3
            'soc-platform' => 1,
76 3
            'soc-device' => 1,
77
        ];
78 3
        $url = GPlayApps::GOOGLE_PLAY_URL . '/_/PlayStoreUi/data/batchexecute?' . http_build_query($queryParams);
79
        $formParams = [
80 3
            'f.req' => '[[["' . self::RPC_ID_APPS . '","[[null,[[10,[10,' . $limit . ']],true,null,[1]],null,\\"' . $token . '\\"]]",null,"generic"]]]',
81
        ];
82
        $headers = [
83 3
            'Content-Type' => 'application/x-www-form-urlencoded;charset=utf-8',
84
        ];
85 3
        $body = stream_for(http_build_query($formParams));
86 3
        return new Request('POST', $url, $headers, $body);
87
    }
88
}
89