GuildCrawler::crawl()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 7
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 1
1
<?php
2
3
namespace App\Utils;
4
5
use App\Entity\Guild;
6
use App\Entity\User;
7
use App\Factory\UserFactory;
8
use Symfony\Component\DomCrawler\Crawler;
9
10
/**
11
 * Class GuildCrawler
12
 * @package App\Utils
13
 */
14
class GuildCrawler extends AbstractCrawler
15
{
16
    /**
17
     * @param Guild $guild
18
     */
19
    public function crawl(Guild $guild)
20
    {
21
        $crawler = new Crawler($this->getGuildUrl($guild));
22
        $usersTableList = $crawler->filter('table.table a');
23
24
        $this->fetchUsers($guild, $usersTableList);
25
    }
26
27
28
    /**
29
     * @param Guild $guild
30
     *
31
     * @return string
32
     */
33
    private function getGuildUrl(Guild $guild): string
34
    {
35
        return file_get_contents(sprintf("%s%s/%s/%s/",
36
            $this->settings->getApi(),
37
            $this->settings->getGuildSuffix(),
38
            $guild->getUuid(),
39
            $guild->getCode()
40
        ));
41
    }
42
43
    /**
44
     * @param Guild $guild
45
     */
46
    private function removeUsers(Guild $guild): void
47
    {
48
        $this->em->getRepository(User::class)->removeFromGuild($guild);
49
    }
50
51
    /**
52
     * @param Guild $guild
53
     * @param $usersList
54
     * @param $matchCode
55
     */
56
    private function fetchUsers(Guild $guild, $usersList): void
57
    {
58
        $this->removeUsers($guild);
59
60
        foreach ($usersList as $user) {
61
            preg_match('/\/u\/(.*)\//', $user->getAttribute('href'), $matchCode);
62
63
            $entity = UserFactory::create([
64
                'uuid' => $matchCode[1],
65
                'title' => trim($user->nodeValue),
66
                'guild' => $guild,
67
            ]);
68
            $this->em->persist($entity);
69
        }
70
        $this->em->flush();
71
    }
72
}
73