Passed
Push — master ( c893b5...77095f )
by axel
04:38 queued 02:27
created

TopCharacterModel::getRole()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 11
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 7
nc 3
nop 2
dl 0
loc 11
rs 10
c 0
b 0
f 0
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
            return substr($name, 1, strlen($name)-3);
108
        }
109
        return '';
110
    }
111
112
    /**
113
     * Get image.
114
     *
115
     * @param \simplehtmldom_1_5\simple_html_dom $name_area
116
     *
117
     * @return string
118
     */
119
    private function getImage($name_area)
120
    {
121
        $image = $name_area->find('img', 0)->getAttribute('data-src');
122
        return Helper::imageUrlCleaner($image);
123
    }
124
125
    /**
126
     * Get role.
127
     *
128
     * @param \simplehtmldom_1_5\simple_html_dom $each_char
129
     * @param string $class
130
     *
131
     * @return array
132
     */
133
    private function getRole($each_char, $class)
134
    {
135
        $role = [];
136
        $area = $each_char->find($class, 0);
137
        if ($area) {
138
            foreach ($area->find('.title') as $a) {
139
                $role[] = $this->getEachRole($a);
140
            }
141
            return $role;
142
        }
143
        return $role;
144
    }
145
146
    /**
147
     * Get each role.
148
     *
149
     * @param \simplehtmldom_1_5\simple_html_dom $a
150
     *
151
     * @return array
152
     */
153
    private function getEachRole($a)
154
    {
155
        $r = [];
156
        $link = $a->find('a', 0);
157
        $id = explode('/', $link->href);
158
        $r['id'] = $id[4];
159
        $r['title'] = $link->plaintext;
160
161
        return $r;
162
    }
163
164
    /**
165
     * Get favorite.
166
     *
167
     * @param \simplehtmldom_1_5\simple_html_dom $each_char
168
     *
169
     * @return string
170
     */
171
    private function getFavorite($each_char)
172
    {
173
        $fav = $each_char->find('.favorites', 0)->plaintext;
174
        $fav = str_replace(',', '', $fav);
175
        return trim($fav);
176
    }
177
178
    /**
179
     * Get result list.
180
     *
181
     * @return array
182
     */
183
    private function getAllInfo()
184
    {
185
        $data = [];
186
        $data_index = 0;
187
        $top_table = $this->_parser->find('.characters-favorites-ranking-table', 0);
188
        foreach ($top_table->find('tr[class=ranking-list]') as $each_char) {
189
190
            $name_area = $each_char->find('.people', 0);
191
192
            $data[$data_index]['rank'] = $this->getRank($each_char);
193
            $data[$data_index]['id'] = $this->getId($name_area);
194
            $data[$data_index]['name'] = $this->getName($name_area);
195
            $data[$data_index]['japanese_name'] = $this->getJapaneseName($name_area);
196
            $data[$data_index]['image'] = $this->getImage($name_area);
197
            $data[$data_index]['animeography'] = $this->getRole($each_char, '.animeography');
198
            $data[$data_index]['mangaography'] = $this->getRole($each_char, '.mangaography');
199
            $data[$data_index]['favorite'] = $this->getFavorite($each_char);
200
201
            $data_index++;
202
        }
203
204
        return $data;
205
    }
206
}
207