Passed
Push — feature/super-model ( c51526...6844b5 )
by axel
03:18
created

SearchCharacterPeopleModel::getName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
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
31
     */
32
    private $_page;
33
34
    /**
35
     * Default constructor.
36
     *
37
     * @param string $type
38
     * @param string $query
39
     * @param int $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
        return call_user_func_array([$this, $method], $arguments);
73
    }
74
75
    /**
76
     * Get image.
77
     *
78
     * @param \simplehtmldom_1_5\simple_html_dom $result_area
79
     *
80
     * @return string
81
     */
82
    private function getImage($result_area)
83
    {
84
        $image = $result_area->find('td', 0)->find('a img', 0)->src;
85
        return Helper::imageUrlCleaner($image);
86
    }
87
88
    /**
89
     * Get id.
90
     *
91
     * @param \simplehtmldom_1_5\simple_html_dom $name_area
92
     *
93
     * @return string
94
     */
95
    private function getId($name_area)
96
    {
97
        $id = $name_area->find('a', 0)->href;
98
        $parsed_char_id = explode('/', $id);
99
        return $this->_type == 'character' ? $parsed_char_id[4] : $parsed_char_id[2];
100
    }
101
102
    /**
103
     * Get name.
104
     *
105
     * @param \simplehtmldom_1_5\simple_html_dom $name_area
106
     *
107
     * @return string
108
     */
109
    private function getName($name_area)
110
    {
111
        return $name_area->find('a', 0)->plaintext;
112
    }
113
114
    /**
115
     * Get nickname.
116
     *
117
     * @param \simplehtmldom_1_5\simple_html_dom $name_area
118
     *
119
     * @return string
120
     */
121
    private function getNickname($name_area)
122
    {
123
        $nickname = $name_area->find('small', 0);
124
        return $nickname ? substr($nickname->plaintext, 1, strlen($nickname->plaintext) - 2) : '';
125
    }
126
127
    /**
128
     * Get role.
129
     *
130
     * @param \simplehtmldom_1_5\simple_html_dom $result_area
131
     *
132
     * @return array
133
     */
134
    private function getRole($result_area)
135
    {
136
        $role = [];
137
        $role['manga'] = $role['anime'] = [];
138
        $role_area = $result_area->find('td', 2)->find('small', 0);
139
        foreach ($role_area->find('a') as $each_role) {
140
            $temp_role = [];
141
            $parsed_role_id = explode('/', $each_role->href);
142
143
            $role_type = $parsed_role_id[1];
144
            $temp_role['id'] = $parsed_role_id[2];
145
            $temp_role['title'] = $each_role->plaintext;
146
147
            if ($temp_role['title']) {
148
                $role[$role_type][] = $temp_role;
149
            }
150
        }
151
        return $role;
152
    }
153
154
    /**
155
     * Get result list.
156
     *
157
     * @return array
158
     */
159
    private function getAllInfo()
160
    {
161
        $data = [];
162
        $result_table = $this->_parser->find('table', 0);
163
        $result_area = $result_table->find('tr', 0)->next_sibling();
164
        while (true) {
165
            $result = [];
166
167
            $name_area = $result_area->find('td', 1);
168
169
            $result['image'] = $this->getImage($result_area);
170
            $result['id'] = $this->getId($name_area);
171
            $result['name'] = $this->getName($name_area);
172
            $result['nickname'] = $this->getNickname($name_area);
173
174
            if ($this->_type == 'character') {
175
                $role = $this->getRole($result_area);
176
                $result = array_merge($result, $role);
177
            }
178
179
            $data[] = $result;
180
181
            $result_area = $result_area->next_sibling();
182
            if (!$result_area) {
183
                break;
184
            }
185
        }
186
        return $data;
187
    }
188
}