ImportAllPagesFromWiki   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 29
c 1
b 0
f 0
dl 0
loc 52
rs 10
wmc 7

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A handlePages() 0 12 3
A handle() 0 25 3
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