TopCharacterModel   A
last analyzed

Complexity

Total Complexity 16

Size/Duplication

Total Lines 199
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 53
c 1
b 0
f 1
dl 0
loc 199
rs 10
wmc 16

11 Methods

Rating   Name   Duplication   Size   Complexity  
A getRole() 0 13 3
A __construct() 0 7 1
A getEachRole() 0 9 1
A getAllInfo() 0 21 2
A __call() 0 7 2
A getId() 0 6 1
A getFavorite() 0 6 1
A getRank() 0 5 1
A getName() 0 3 1
A getJapaneseName() 0 10 2
A getImage() 0 5 1
1
<?php
2
3
namespace MalScraper\Model\Top;
4
5
use MalScraper\Helper\Helper;
6
use MalScraper\Model\MainModel;
7
8
/**
9
 * TopCharacterModel class.
10
 */
11
class TopCharacterModel extends MainModel
12
{
13
    /**
14
     * Page number.
15
     *
16
     * @var string
17
     */
18
    private $_page;
19
20
    /**
21
     * Default constructor.
22
     *
23
     * @param string|int $page
24
     * @param string     $parserArea
25
     *
26
     * @return void
27
     */
28
    public function __construct($page, $parserArea = '#content')
29
    {
30
        $this->_page = 50 * ($page - 1);
31
        $this->_url = $this->_myAnimeListUrl.'/character.php?limit='.$this->_page;
32
        $this->_parserArea = $parserArea;
33
34
        parent::errorCheck($this);
35
    }
36
37
    /**
38
     * Default call.
39
     *
40
     * @param string $method
41
     * @param array  $arguments
42
     *
43
     * @return array|string|int
44
     */
45
    public function __call($method, $arguments)
46
    {
47
        if ($this->_error) {
48
            return $this->_error;
49
        }
50
51
        return call_user_func_array([$this, $method], $arguments);
52
    }
53
54
    /**
55
     * Get rank.
56
     *
57
     * @param \simplehtmldom_1_5\simple_html_dom $each_char
58
     *
59
     * @return string
60
     */
61
    private function getRank($each_char)
62
    {
63
        $rank = $each_char->find('td span', 0)->plaintext;
64
65
        return trim($rank);
66
    }
67
68
    /**
69
     * Get id.
70
     *
71
     * @param \simplehtmldom_1_5\simple_html_dom $name_area
72
     *
73
     * @return string
74
     */
75
    private function getId($name_area)
76
    {
77
        $id = $name_area->find('a', 0)->href;
78
        $id = explode('/', $id);
79
80
        return $id[4];
81
    }
82
83
    /**
84
     * Get name.
85
     *
86
     * @param \simplehtmldom_1_5\simple_html_dom $name_area
87
     *
88
     * @return string
89
     */
90
    private function getName($name_area)
91
    {
92
        return $name_area->find('.information', 0)->find('a', 0)->plaintext;
93
    }
94
95
    /**
96
     * Get japanese name.
97
     *
98
     * @param \simplehtmldom_1_5\simple_html_dom $name_area
99
     *
100
     * @return string
101
     */
102
    private function getJapaneseName($name_area)
103
    {
104
        $name = $name_area->find('.information', 0)->find('span', 0);
105
        if ($name) {
106
            $name = $name->plaintext;
107
108
            return substr($name, 1, strlen($name) - 3);
109
        }
110
111
        return '';
112
    }
113
114
    /**
115
     * Get image.
116
     *
117
     * @param \simplehtmldom_1_5\simple_html_dom $name_area
118
     *
119
     * @return string
120
     */
121
    private function getImage($name_area)
122
    {
123
        $image = $name_area->find('img', 0)->getAttribute('data-src');
124
125
        return Helper::imageUrlCleaner($image);
126
    }
127
128
    /**
129
     * Get role.
130
     *
131
     * @param \simplehtmldom_1_5\simple_html_dom $each_char
132
     * @param string                             $class
133
     *
134
     * @return array
135
     */
136
    private function getRole($each_char, $class)
137
    {
138
        $role = [];
139
        $area = $each_char->find($class, 0);
140
        if ($area) {
141
            foreach ($area->find('.title') as $a) {
142
                $role[] = $this->getEachRole($a);
143
            }
144
145
            return $role;
146
        }
147
148
        return $role;
149
    }
150
151
    /**
152
     * Get each role.
153
     *
154
     * @param \simplehtmldom_1_5\simple_html_dom $a
155
     *
156
     * @return array
157
     */
158
    private function getEachRole($a)
159
    {
160
        $r = [];
161
        $link = $a->find('a', 0);
162
        $id = explode('/', $link->href);
163
        $r['id'] = $id[4];
164
        $r['title'] = $link->plaintext;
165
166
        return $r;
167
    }
168
169
    /**
170
     * Get favorite.
171
     *
172
     * @param \simplehtmldom_1_5\simple_html_dom $each_char
173
     *
174
     * @return string
175
     */
176
    private function getFavorite($each_char)
177
    {
178
        $fav = $each_char->find('.favorites', 0)->plaintext;
179
        $fav = str_replace(',', '', $fav);
180
181
        return trim($fav);
182
    }
183
184
    /**
185
     * Get result list.
186
     *
187
     * @return array
188
     */
189
    private function getAllInfo()
190
    {
191
        $data = [];
192
        $data_index = 0;
193
        $top_table = $this->_parser->find('.characters-favorites-ranking-table', 0);
194
        foreach ($top_table->find('tr[class=ranking-list]') as $each_char) {
195
            $name_area = $each_char->find('.people', 0);
196
197
            $data[$data_index]['rank'] = $this->getRank($each_char);
198
            $data[$data_index]['id'] = $this->getId($name_area);
199
            $data[$data_index]['name'] = $this->getName($name_area);
200
            $data[$data_index]['japanese_name'] = $this->getJapaneseName($name_area);
201
            $data[$data_index]['image'] = $this->getImage($name_area);
202
            $data[$data_index]['animeography'] = $this->getRole($each_char, '.animeography');
203
            $data[$data_index]['mangaography'] = $this->getRole($each_char, '.mangaography');
204
            $data[$data_index]['favorite'] = $this->getFavorite($each_char);
205
206
            $data_index++;
207
        }
208
209
        return $data;
210
    }
211
}
212