_movie_id = $movie_id; $this->_title = $title; $this->_year = $year; $this->_type = $type; if($this->_type === 'movie') { $this->getUrl(); if($this->_trailer_url === null) return; $this->getMovieTrailer(); if(!$this->_trailer) $this->getMovieTeaser(); } } /** * @return mixed */ public function getTrailer() { if($this->_type !== 'movie') return; try { $trailer = $this->getMovieTrailer(); if(!$trailer) $trailer = $this->getMovieTeaser(); return $trailer; } catch (Exception $e) { return; } } private function getUrl() { try { $this->_trailer_url = Cache::get($this->_movie_id.'.trailer_url'); return $this->_trailer_url; } catch (CacheNotFoundException $e) { $html = Request::forge('https://www.themoviedb.org/search/movie?query=' . urlencode($this->_title) . '+y%3A' . $this->_year . '&language=us', 'curl'); $html->set_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0'); $html->execute(); if ($html->response()->status !== 200) return false; $media = $html->response()->body; $regex = '//i'; preg_match($regex, $media, $urls); if (!isset($urls[1])) return false; $this->_trailer_url = explode('?', $urls[1])[0]; Cache::set($this->_movie_id . '.trailer_url', $this->_trailer_url, 24 * 60 * 60); return $this->_trailer_url; } } private function getMovieTrailer() { $html = Request::forge('https://www.themoviedb.org' . $this->getUrl() . '/videos?active_nav_item=Trailers&video_language=en-US&language=en-US', 'curl'); $html->set_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0'); $html->set_options(array( CURLOPT_FOLLOWLOCATION => true, ) ); $html->execute(); if ($html->response()->status !== 200) return false; $media = $html->response()->body; $regex = '/.*<\/a>/'; preg_match($regex, $media, $youtube); if (!isset($youtube[1])) return false; $youtube = '//www.youtube.com/embed/'.$youtube[1].'?enablejsapi=1&autoplay=0&hl=en-US&modestbranding=1&fs=1'; $this->_trailer = $youtube; return $this->_trailer; } private function getMovieTeaser() { $html = Request::forge('https://www.themoviedb.org' . $this->getUrl() . '/videos?active_nav_item=Teasers&video_language=en-US&language=en-US', 'curl'); $html->set_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0'); $html->set_options([CURLOPT_FOLLOWLOCATION => true,]); $html->execute(); if ($html->response()->status !== 200) return false; $media = $html->response()->body; $regex = '/