SearchCharacterPeopleModel::getAllInfo()   A
last analyzed

Complexity

Conditions 4
Paths 5

Size

Total Lines 29
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 1 Features 0
Metric Value
cc 4
eloc 18
c 2
b 1
f 0
nc 5
nop 0
dl 0
loc 29
rs 9.6666
1
<?php
2
3
namespace MalScraper\Model\Search;
4
5
use MalScraper\Helper\Helper;
6
use MalScraper\Model\MainModel;
7
8
/**
9
 * SearchCharacterPeopleModel class.
10
 */
11
class SearchCharacterPeopleModel extends MainModel
12
{
13
    /**
14
     * Either character or people.
15
     *
16
     * @var string
17
     */
18
    private $_type;
19
20
    /**
21
     * Search query.
22
     *
23
     * @var string
24
     */
25
    protected $_query;
26
27
    /**
28
     * Page number.
29
     *
30
     * @var int|string
31
     */
32
    private $_page;
33
34
    /**
35
     * Default constructor.
36
     *
37
     * @param string     $type
38
     * @param string     $query
39
     * @param int|string $page
40
     * @param string     $parserArea
41
     *
42
     * @return void
43
     */
44
    public function __construct($type, $query, $page, $parserArea = '#content')
45
    {
46
        $this->_type = $type;
47
        $this->_query = $query;
48
        $this->_page = 50 * ($page - 1);
49
50
        if ($type == 'character') {
51
            $this->_url = $this->_myAnimeListUrl.'/character.php?q='.$query.'&show='.$this->_page;
52
        } else {
53
            $this->_url = $this->_myAnimeListUrl.'/people.php?q='.$query.'&show='.$this->_page;
54
        }
55
        $this->_parserArea = $parserArea;
56
57
        parent::errorCheck($this);
58
    }
59
60
    /**
61
     * Default call.
62
     *
63
     * @param string $method
64
     * @param array  $arguments
65
     *
66
     * @return array|string|int
67
     */
68
    public function __call($method, $arguments)
69
    {
70
        if ($this->_error) {
71
            return $this->_error;
72
        }
73
74
        return call_user_func_array([$this, $method], $arguments);
75
    }
76
77
    /**
78
     * Get image.
79
     *
80
     * @param \simplehtmldom_1_5\simple_html_dom $result_area
81
     *
82
     * @return string
83
     */
84
    private function getImage($result_area)
85
    {
86
        $image = $result_area->find('td', 0)->find('a img', 0)->src;
87
88
        return Helper::imageUrlCleaner($image);
89
    }
90
91
    /**
92
     * Get id.
93
     *
94
     * @param \simplehtmldom_1_5\simple_html_dom $name_area
95
     *
96
     * @return string
97
     */
98
    private function getId($name_area)
99
    {
100
        $id = $name_area->find('a', 0)->href;
101
        $parsed_char_id = explode('/', $id);
102
103
        return $this->_type == 'character' ? $parsed_char_id[4] : $parsed_char_id[2];
104
    }
105
106
    /**
107
     * Get name.
108
     *
109
     * @param \simplehtmldom_1_5\simple_html_dom $name_area
110
     *
111
     * @return string
112
     */
113
    private function getName($name_area)
114
    {
115
        return $name_area->find('a', 0)->plaintext;
116
    }
117
118
    /**
119
     * Get nickname.
120
     *
121
     * @param \simplehtmldom_1_5\simple_html_dom $name_area
122
     *
123
     * @return string
124
     */
125
    private function getNickname($name_area)
126
    {
127
        $nickname = $name_area->find('small', 0);
128
129
        return $nickname ? substr($nickname->plaintext, 1, strlen($nickname->plaintext) - 2) : '';
130
    }
131
132
    /**
133
     * Get role.
134
     *
135
     * @param \simplehtmldom_1_5\simple_html_dom $result_area
136
     *
137
     * @return array
138
     */
139
    private function getRole($result_area)
140
    {
141
        $role = [];
142
        $role['manga'] = $role['anime'] = [];
143
        $role_area = $result_area->find('td', 2)->find('small', 0);
144
        foreach ($role_area->find('a') as $each_role) {
145
            $temp_role = [];
146
            $parsed_role_id = explode('/', $each_role->href);
147
148
            $role_type = $parsed_role_id[1];
149
            $temp_role['id'] = $parsed_role_id[2];
150
            $temp_role['title'] = $each_role->plaintext;
151
152
            if ($temp_role['title']) {
153
                $role[$role_type][] = $temp_role;
154
            }
155
        }
156
157
        return $role;
158
    }
159
160
    /**
161
     * Get result list.
162
     *
163
     * @return array
164
     */
165
    private function getAllInfo()
166
    {
167
        $data = [];
168
        $result_table = $this->_parser->find('table', 0);
169
        $result_area = $result_table->find('tr', 0)->next_sibling();
170
        while (true) {
171
            $result = [];
172
173
            $name_area = $result_area->find('td', 1);
174
175
            $result['image'] = $this->getImage($result_area);
176
            $result['id'] = $this->getId($name_area);
177
            $result['name'] = $this->getName($name_area);
178
            $result['nickname'] = $this->getNickname($name_area);
179
180
            if ($this->_type == 'character') {
181
                $role = $this->getRole($result_area);
182
                $result = array_merge($result, $role);
183
            }
184
185
            $data[] = $result;
186
187
            $result_area = $result_area->next_sibling();
188
            if (!$result_area) {
189
                break;
190
            }
191
        }
192
193
        return $data;
194
    }
195
}
196