Passed
Push — feature/super-model ( 6844b5...0f230d )
by axel
02:12
created

SeasonModel::getSource()   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\Seasonal;
4
5
use MalScraper\Helper\Helper;
6
use MalScraper\Model\MainModel;
7
8
/**
9
 * SeasonModel class.
10
 */
11
class SeasonModel extends MainModel
12
{
13
    /**
14
     * Year of season.
15
     *
16
     * @var string
17
     */
18
	private $_year;
19
20
    /**
21
     * Season name. Either spring, summer, fall, or winter.
22
     *
23
     * @var string
24
     */
25
    private $_season;
26
27
    /**
28
     * Default constructor.
29
     *
30
     * @param string|int $year
31
     * @param string $season
32
     * @param string $parserArea
33
     *
34
     * @return void
35
     */
36
	public function __construct($year = false, $season = false, $parserArea = '#content .js-categories-seasonal')
37
    {
38
        $this->_year = !$year ? date('Y') : $year;
39
    	$this->_season = !$season ? Helper::getCurrentSeason() : $season;
40
        $this->_url = $this->_myAnimeListUrl.'/anime/season/'.$this->_year.'/'.$this->_season;
41
    	$this->_parserArea = $parserArea;
42
43
        parent::errorCheck($this);
44
    }
45
46
    /**
47
     * Default call.
48
     *
49
     * @param string $method
50
     * @param array  $arguments
51
     *
52
     * @return array|string|int
53
     */
54
    public function __call($method, $arguments)
55
    {
56
        if ($this->_error)
57
            return $this->_error;
58
        return call_user_func_array([$this, $method], $arguments);
59
    }
60
61
    /**
62
     * Get image.
63
     *
64
     * @param \simplehtmldom_1_5\simple_html_dom $each_anime
65
     *
66
     * @return string
67
     */
68
    private function getImage($each_anime)
69
    {
70
        $temp_image = $each_anime->find('div[class=image]', 0)->find('img', 0);
71
        $image = $temp_image->src;
72
        $image = !$image ? $temp_image->getAttribute('data-src') : $image;
73
        return Helper::imageUrlCleaner($image);
0 ignored issues
show
Bug introduced by
It seems like $image can also be of type true; however, parameter $str of MalScraper\Helper\Helper::imageUrlCleaner() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

73
        return Helper::imageUrlCleaner(/** @scrutinizer ignore-type */ $image);
Loading history...
74
    }
75
76
    /**
77
     * Get id.
78
     *
79
     * @param \simplehtmldom_1_5\simple_html_dom $name_area
80
     *
81
     * @return string
82
     */
83
    private function getId($name_area)
84
    {
85
        $id = $name_area->find('p a', 0)->href;
86
        $parsed_char_id = explode('/', $id);
87
        return $parsed_char_id[4];
88
    }
89
90
    /**
91
     * Get title.
92
     *
93
     * @param \simplehtmldom_1_5\simple_html_dom $name_area
94
     *
95
     * @return string
96
     */
97
    private function getTitle($name_area)
98
    {
99
        return $name_area->find('p a', 0)->plaintext;
100
    }
101
102
    /**
103
     * Get producer.
104
     *
105
     * @param \simplehtmldom_1_5\simple_html_dom $producer_area
106
     *
107
     * @return array
108
     */
109
    private function getProducer($producer_area)
110
    {
111
        $producer = [];
112
        $temp_producer = $producer_area->find('span[class=producer]', 0);
113
        foreach ($temp_producer->find('a') as $each_producer) {
114
            $temp_prod = [];
115
116
            $temp_prod['id'] = $this->getProducerId($each_producer);
117
            $temp_prod['name'] = $this->getProducerName($each_producer);
118
119
            $producer[] = $temp_prod;
120
        }
121
        return $producer;
122
    }
123
124
    /**
125
     * Get producer id.
126
     *
127
     * @param \simplehtmldom_1_5\simple_html_dom $each_producer
128
     *
129
     * @return string
130
     */
131
    private function getProducerId($each_producer)
132
    {
133
        $prod_id = $each_producer->href;
134
        $parsed_prod_id = explode('/', $prod_id);
135
        return $parsed_prod_id[3];
136
    }
137
138
    /**
139
     * Get producer name.
140
     *
141
     * @param \simplehtmldom_1_5\simple_html_dom $each_producer
142
     *
143
     * @return string
144
     */
145
    private function getProducerName($each_producer)
146
    {
147
        return $each_producer->plaintext;
148
    }
149
150
    /**
151
     * Get episode.
152
     *
153
     * @param \simplehtmldom_1_5\simple_html_dom $producer_area
154
     *
155
     * @return string
156
     */
157
    private function getEpisode($producer_area)
158
    {
159
        $episode = $producer_area->find('div[class=eps]', 0)->plaintext;
160
        $episode = trim(str_replace(['eps', 'ep'], '', $episode));
161
        return $episode == '?' ? '' : $episode;
162
    }
163
164
    /**
165
     * Get source.
166
     *
167
     * @param \simplehtmldom_1_5\simple_html_dom $producer_area
168
     *
169
     * @return string
170
     */
171
    private function getSource($producer_area)
172
    {
173
        return trim($producer_area->find('span[class=source]', 0)->plaintext);
174
    }
175
176
    /**
177
     * Get genre.
178
     *
179
     * @param \simplehtmldom_1_5\simple_html_dom $each_anime
180
     *
181
     * @return array
182
     */
183
    private function getGenre($each_anime)
184
    {
185
        $genre = [];
186
        $genre_area = $each_anime->find('div[class="genres js-genre"]', 0);
187
        foreach ($genre_area->find('a') as $each_genre) {
188
            $genre[] = $each_genre->plaintext;
189
        }
190
        return $genre;
191
    }
192
193
    /**
194
     * Get synopsis.
195
     *
196
     * @param \simplehtmldom_1_5\simple_html_dom $each_anime
197
     *
198
     * @return string
199
     */
200
    private function getSynopsis($each_anime)
201
    {
202
        $synopsis = $each_anime->find('div[class="synopsis js-synopsis"]', 0)->plaintext;
203
        preg_match('/(No synopsis)/', $synopsis, $temp_synopsis);
204
        if (!$temp_synopsis) {
205
            $synopsis = trim(preg_replace("/([\s])+/", ' ', $synopsis));
206
        } else {
207
            $synopsis = '';
208
        }
209
        return $synopsis;
210
    }
211
212
    /**
213
     * Get licensor.
214
     *
215
     * @param \simplehtmldom_1_5\simple_html_dom $each_anime
216
     *
217
     * @return array
218
     */
219
    private function getLicensor($each_anime)
220
    {
221
        $temp_licensor = $each_anime->find('div[class="synopsis js-synopsis"] .licensors', 0)->getAttribute('data-licensors');
222
        $licensor = explode(',', $temp_licensor);
223
        return array_filter($licensor);
224
    }
225
226
    /**
227
     * Get type.
228
     *
229
     * @param \simplehtmldom_1_5\simple_html_dom $info_area
230
     *
231
     * @return string
232
     */
233
    private function getType($info_area)
234
    {
235
        $type = $info_area->find('.info', 0)->plaintext;
236
        $type = explode('-', $type);
237
        return trim($type[0]);
238
    }
239
240
    /**
241
     * Get airing start.
242
     *
243
     * @param \simplehtmldom_1_5\simple_html_dom $info_area
244
     *
245
     * @return string
246
     */
247
    private function getAiring($info_area)
248
    {
249
        $airing_start = $info_area->find('.info .remain-time', 0)->plaintext;
250
        return trim(str_replace(['?', ' ,'], ['', ','], $airing_start));
251
    }
252
253
    /**
254
     * Get member.
255
     *
256
     * @param \simplehtmldom_1_5\simple_html_dom $info_area
257
     *
258
     * @return string
259
     */
260
    private function getMember($info_area)
261
    {
262
        $member = $info_area->find('.scormem span[class^=member]', 0)->plaintext;
263
        return trim(str_replace(',', '', $member));
264
    }
265
266
    /**
267
     * Get score.
268
     *
269
     * @param \simplehtmldom_1_5\simple_html_dom $info_area
270
     *
271
     * @return string
272
     */
273
    private function getScore($info_area)
274
    {
275
        $score = $info_area->find('.scormem .score', 0)->plaintext;
276
        return trim(str_replace('N/A', '', $score));
277
    }
278
279
    /**
280
     * Get result list.
281
     *
282
     * @return array
283
     */
284
    private function getAllInfo()
285
    {
286
        $data = [];
287
288
        $anime_table = $this->_parser->find('div[class="seasonal-anime js-seasonal-anime"]');
289
        foreach ($anime_table as $each_anime) {
290
            $result = [];
291
292
            $name_area = $each_anime->find('div[class=title]', 0);
293
            $producer_area = $each_anime->find('div[class=prodsrc]', 0);
294
            $info_area = $each_anime->find('.information', 0);
295
296
            $result['image'] = $this->getImage($each_anime);
297
            $result['id'] = $this->getId($name_area);
298
            $result['title'] = $this->getTitle($name_area);
299
            $result['producer'] = $this->getProducer($producer_area);
300
            $result['episode'] = $this->getEpisode($producer_area);
301
            $result['source'] = $this->getSource($producer_area);
302
            $result['genre'] = $this->getGenre($each_anime);
303
            $result['synopsis'] = $this->getSynopsis($each_anime);
304
            $result['licensor'] = $this->getLicensor($each_anime);
305
            $result['type'] = $this->getType($info_area);
306
            $result['airing_start'] = $this->getAiring($info_area);
307
            $result['member'] = $this->getMember($info_area);
308
            $result['score'] = $this->getScore($info_area);
309
310
            $data[] = $result;
311
        }
312
313
        return $data;
314
    }
315
316
}