ImportAllPagesFromWiki::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
3
4
namespace App\Console\Commands;
5
6
use App\Src\UseCases\Domain\Ports\PageRepository;
7
use App\Src\UseCases\Infra\Sql\Model\PageModel;
8
use GuzzleHttp\Client;
9
use Illuminate\Console\Command;
10
11
class ImportAllPagesFromWiki extends Command
12
{
13
    protected $signature = 'pages:import-all';
14
15
    protected $description = 'Import all pages from the wiki';
16
17
18
    public function __construct()
19
    {
20
        parent::__construct();
21
    }
22
23
    public function handle()
24
    {
25
        $httpClient = new Client();
26
        $queryPages = '?action=query&generator=allpages&gaplimit=500&gapfilterredir=nonredirects&format=json';
27
28
        $pagesApiUri = config('wiki.api_uri').$queryPages;
29
30
        $response = $httpClient->get($pagesApiUri);
31
        $content = json_decode($response->getBody()->getContents(), true);
32
33
        $pages = $content['query']['pages'];
34
35
        $this->handlePages($pages);
36
        $continue = $content['continue']['gapcontinue'] ?? null;
37
38
        while($continue !== null && $continue !== ''){
39
            $this->info($continue);
40
41
            $pagesApiUri = config('wiki.api_uri').$queryPages.'&gapcontinue='.$continue;
42
            $response = $httpClient->get($pagesApiUri);
43
            $content = json_decode($response->getBody()->getContents(), true);
44
            $pages = $content['query']['pages'];
45
            $this->handlePages($pages);
46
47
            $continue = $content['continue']['gapcontinue'] ?? null;
48
        }
49
    }
50
51
    private function handlePages($pages)
52
    {
53
        foreach ($pages as $page) {
54
            $pageModel = PageModel::where('page_id', $page['pageid'])->first();
55
            if (!isset($pageModel)) {
56
                $pageModel = new PageModel();
57
            }
58
            $pageModel->page_id = $page['pageid'];
59
            $pageModel->dry = true;
60
            $pageModel->title = $page['title'];
61
            $pageModel->picture = $page['thumbnail']['source'] ?? null;
62
            $pageModel->save();
63
        }
64
    }
65
}
66