Passed
Branch feature/super-model (24c950)
by axel
02:55
created

StudioProducerModel::getAnimeProducerId()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 1
dl 0
loc 5
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace MalScraper\Model;
4
5
use MalScraper\Helper\Helper;
6
7
/**
8
 * StudioProducerModel class.
9
 */
10
class StudioProducerModel extends MainModel
11
{
12
    /**
13
     * Id of the studio.
14
     *
15
     * @var string|int
16
     */
17
	private $_id;
18
19
    /**
20
     * Page number.
21
     *
22
     * @var string|int
23
     */
24
    private $_page;
25
26
    /**
27
     * Default constructor.
28
     *
29
     * @param string|int $id
30
     * @param string $parserArea
31
     *
32
     * @return void
33
     */
34
	public function __construct($id, $page = 1, $parserArea = '#content .js-categories-seasonal')
35
    {
36
        $this->_id = $id;
37
    	$this->_page = $page;
38
        $this->_url = $this->_myAnimeListUrl.'/anime/producer/'.$id.'/?page='.$page;
39
    	$this->_parserArea = $parserArea;
40
41
        parent::errorCheck($this);
42
    }
43
44
    /**
45
     * Default call.
46
     *
47
     * @param string $method
48
     * @param array  $arguments
49
     *
50
     * @return array|string|int
51
     */
52
    public function __call($method, $arguments)
53
    {
54
        if ($this->_error)
55
            return $this->_error;
56
        return call_user_func_array([$this, $method], $arguments);
57
    }
58
59
    /**
60
     * Get anime image.
61
     *
62
     * @param \simplehtmldom_1_5\simple_html_dom $each_anime
63
     *
64
     * @return string
65
     */
66
    static private function getAnimeImage($each_anime)
67
    {
68
        $image = $each_anime->find('div[class=image]', 0)->find('img', 0)->getAttribute('data-src');
69
        return  Helper::imageUrlCleaner($image);
70
    }
71
72
    /**
73
     * Get anime id.
74
     *
75
     * @param \simplehtmldom_1_5\simple_html_dom $name_area
76
     *
77
     * @return string
78
     */
79
    static private function getAnimeId($name_area)
80
    {
81
        $anime_id = $name_area->find('p a', 0)->href;
82
        $anime_id = explode('/', $anime_id);
83
        return $anime_id[4];
84
    }
85
86
    /**
87
     * Get anime title.
88
     *
89
     * @param \simplehtmldom_1_5\simple_html_dom $name_area
90
     *
91
     * @return string
92
     */
93
    static private function getAnimeTitle($name_area)
94
    {
95
        return $name_area->find('p a', 0)->plaintext;
96
    }
97
98
    /**
99
     * Get producer name.
100
     *
101
     * @param \simplehtmldom_1_5\simple_html_dom $producer_area
102
     *
103
     * @return array
104
     */
105
    static private function getAnimeProducer($producer_area)
106
    {
107
        $producer = [];
108
        $producer_area = $producer_area->find('span[class=producer]', 0);
109
        foreach ($producer_area->find('a') as $each_producer) {
110
            $temp_prod = [];
111
112
            $temp_prod['id'] = self::getAnimeProducerId($each_producer);
113
            $temp_prod['name'] = self::getAnimeProducerName($each_producer);
114
115
            $producer[] = $temp_prod;
116
        }
117
        return $producer;
118
    }
119
120
    /**
121
     * Get producer id.
122
     *
123
     * @param \simplehtmldom_1_5\simple_html_dom $each_producer
124
     *
125
     * @return string
126
     */
127
    static private function getAnimeProducerId($each_producer)
128
    {
129
        $prod_id = $each_producer->href;
130
        $prod_id = explode('/', $prod_id);
131
        return $prod_id[3];
132
    }
133
134
    /**
135
     * Get producer name.
136
     *
137
     * @param \simplehtmldom_1_5\simple_html_dom $each_producer
138
     *
139
     * @return string
140
     */
141
    static private function getAnimeProducerName($each_producer)
142
    {
143
        return $each_producer->plaintext;
144
    }
145
146
    /**
147
     * Get anime episode.
148
     *
149
     * @param \simplehtmldom_1_5\simple_html_dom $producer_area
150
     *
151
     * @return string
152
     */
153
    static private function getAnimeEpisode($producer_area)
154
    {
155
        $episode = $producer_area->find('div[class=eps]', 0)->plaintext;
156
        return trim(str_replace(['eps', 'ep'], '', $episode));
157
    }
158
159
    /**
160
     * Get anime source.
161
     *
162
     * @param \simplehtmldom_1_5\simple_html_dom $producer_area
163
     *
164
     * @return string
165
     */
166
    static private function getAnimeSource($producer_area)
167
    {
168
        $source = $producer_area->find('span[class=source]', 0)->plaintext;
169
        return trim($source);
170
    }
171
172
    /**
173
     * Get anime genre.
174
     *
175
     * @param \simplehtmldom_1_5\simple_html_dom $each_anime
176
     *
177
     * @return array
178
     */
179
    static private function getAnimeGenre($each_anime)
180
    {
181
        $genre = [];
182
        $genre_area = $each_anime->find('div[class="genres js-genre"]', 0);
183
        foreach ($genre_area->find('a') as $each_genre) {
184
            $genre[] = $each_genre->plaintext;
185
        }
186
        return $genre;
187
    }
188
189
    /**
190
     * Get anime synopsis.
191
     *
192
     * @param \simplehtmldom_1_5\simple_html_dom $each_anime
193
     *
194
     * @return string
195
     */
196
    static private function getAnimeSynopsis($each_anime)
197
    {
198
        $synopsis = $each_anime->find('div[class="synopsis js-synopsis"]', 0)->plaintext;
199
        return trim(preg_replace("/([\s])+/", ' ', $synopsis));
200
    }
201
202
    /**
203
     * Get anime licensor.
204
     *
205
     * @param \simplehtmldom_1_5\simple_html_dom $each_anime
206
     *
207
     * @return array
208
     */
209
    static private function getAnimeLicensor($each_anime)
210
    {
211
        $licensor = $each_anime->find('div[class="synopsis js-synopsis"] .licensors', 0)->getAttribute('data-licensors');
212
        $licensor = explode(',', $licensor);
213
        return array_filter($licensor);
214
    }
215
216
    /**
217
     * Get anime type.
218
     *
219
     * @param \simplehtmldom_1_5\simple_html_dom $info_area
220
     *
221
     * @return string
222
     */
223
    static private function getAnimeType($info_area)
224
    {
225
        $type = $info_area->find('.info', 0)->plaintext;
226
        $type = explode('-', $type);
227
        return trim($type[0]);
228
    }
229
230
    /**
231
     * Get anime start.
232
     *
233
     * @param \simplehtmldom_1_5\simple_html_dom $info_area
234
     *
235
     * @return string
236
     */
237
    static private function getAnimeStart($info_area)
238
    {
239
        $airing_start = $info_area->find('.info .remain-time', 0)->plaintext;
240
        return trim($airing_start);
241
    }
242
243
    /**
244
     * Get anime member.
245
     *
246
     * @param \simplehtmldom_1_5\simple_html_dom $info_area
247
     *
248
     * @return string
249
     */
250
    static private function getAnimeScore($info_area)
251
    {
252
        $score = $info_area->find('.scormem .score', 0)->plaintext;
253
        return trim($score);
254
    }
255
256
    /**
257
     * Get anime score.
258
     *
259
     * @param \simplehtmldom_1_5\simple_html_dom $info_area
260
     *
261
     * @return string
262
     */
263
    static private function getAnimeMember($info_area)
264
    {
265
        $member = $info_area->find('.scormem span[class^=member]', 0)->plaintext;
266
        return trim(str_replace(',', '', $member));
267
    }
268
269
    /**
270
     * Get all anime produced by the studio/producer.
271
     *
272
     * @return array
273
     */
274
    private function getAllInfo()
275
    {
276
        $data = [];
277
        $anime_table = $this->_parser->find('div[class="seasonal-anime js-seasonal-anime"]');
278
        foreach ($anime_table as $each_anime) {
279
            $result = [];
280
281
            $name_area = $each_anime->find('div[class=title]', 0);
282
            $producer_area = $each_anime->find('div[class=prodsrc]', 0);
283
            $info_area = $each_anime->find('.information', 0);
284
285
            $result['image'] = self::getAnimeImage($each_anime);
286
            $result['id'] = self::getAnimeId($name_area);
287
            $result['title'] = self::getAnimeTitle($name_area);
288
            $result['producer'] = self::getAnimeProducer($producer_area);
289
            $result['episode'] = self::getAnimeEpisode($producer_area);
290
            $result['source'] = self::getAnimeSource($producer_area);
291
            $result['genre'] = self::getAnimeGenre($each_anime);
292
            $result['synopsis'] = self::getAnimeSynopsis($each_anime);
293
            $result['licensor'] = self::getAnimeLicensor($each_anime);
294
            $result['type'] = self::getAnimeType($info_area);
295
            $result['airing_start'] = self::getAnimeStart($info_area);
296
            $result['member'] = self::getAnimeMember($info_area);
297
            $result['score'] = self::getAnimeScore($info_area);
298
299
            $data[] = $result;
300
        }
301
        return $data;
302
    }
303
}