From 98e7310260117c113ee28167f323f49433ae32b2 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Tue, 1 Sep 2015 22:10:50 +0200 Subject: [PATCH] Delete Movie.php --- newznab/controllers/Movie.php | 866 ---------------------------------- 1 file changed, 866 deletions(-) delete mode 100644 newznab/controllers/Movie.php diff --git a/newznab/controllers/Movie.php b/newznab/controllers/Movie.php deleted file mode 100644 index 121461a7c..000000000 --- a/newznab/controllers/Movie.php +++ /dev/null @@ -1,866 +0,0 @@ -echooutput = (NN_ECHOCLI && $echooutput); - $this->pdo = new Settings(); - $this->apikey = $this->pdo->getSetting('tmdbkey'); - $this->lookuplanguage = $this->pdo->getSetting('lookuplanguage'); - $this->imgSavePath = NN_COVERS . 'movies' . DS; - } - - /** - * Get a movieinfo row by its imdbid. - */ - public function getMovieInfo($imdbId) - { - return $this->pdo->queryOneRow(sprintf("SELECT * FROM movieinfo where imdbid = %d", $imdbId)); - } - - /** - * Get movieinfo rows by array of imdbIDs. - */ - public function getMovieInfoMultiImdb($imdbIds) - { - $allids = implode(",", array_filter($imdbIds)); - $sql = sprintf("SELECT DISTINCT movieinfo.*, releases.imdbid AS relimdb FROM movieinfo LEFT OUTER JOIN releases ON releases.imdbid = movieinfo.imdbid WHERE movieinfo.imdbid IN (%s)", $allids); - return $this->pdo->query($sql); - } - - /** - * Delete movieinfo row by its imdbid. - */ - public function delete($imdbId) - { - @unlink($this->imgSavePath.$imdbId.'-cover.jpg'); - @unlink($this->imgSavePath.$imdbId.'-backdrop.jpg'); - return $this->pdo->queryOneRow(sprintf("delete FROM movieinfo where imdbid = %d", $imdbId)); - } - - /** - * Find an imdb URL in an nfo string. - */ - public function parseImdbFromNfo($str) - { - preg_match('/imdb.*?(tt|Title\?)(\d{7})/i', $str, $matches); - if (isset($matches[2]) && !empty($matches[2])) - return trim($matches[2]); - return false; - } - - /** - * Get movieinfo rows by limit. - */ - public function getRange($start, $num, $moviename="") - { - - if ($start === false) - $limit = ""; - else - $limit = " LIMIT ".$start.",".$num; - - $rsql = ''; - if ($moviename != "") - $rsql .= sprintf("and movieinfo.title like %s ", $this->pdo->escapeString("%".$moviename."%")); - - return $this->pdo->query(sprintf(" SELECT * FROM movieinfo where 1=1 %s ORDER BY createddate DESC".$limit, $rsql)); - } - - /** - * Get count of all movieinfo rows. - */ - public function getCount($moviename="") - { - - $rsql = ''; - if ($moviename != "") - $rsql .= sprintf("and movieinfo.title like %s ", $this->pdo->escapeString("%".$moviename."%")); - - $res = $this->pdo->queryOneRow(sprintf("select count(id) as num from movieinfo where 1=1 %s ", $rsql)); - return $res["num"]; - } - - /** - * Get count of all movieinfo rows filter by category. - */ - public function getMovieCount($cat, $maxage=-1, $excludedcats=[]) - { - - $browseby = $this->getBrowseBy(); - - $catsrch = ""; - if (count($cat) > 0 && $cat[0] != -1) - { - $catsrch = " ("; - foreach ($cat as $category) - { - if ($category != -1) - { - $categ = new Category(); - if ($categ->isParent($category)) - { - $children = $categ->getChildren($category); - $chlist = "-99"; - foreach ($children as $child) - $chlist.=", ".$child["id"]; - - if ($chlist != "-99") - $catsrch .= " r.categoryid in (".$chlist.") or "; - } - else - { - $catsrch .= sprintf(" r.categoryid = %d or ", $category); - } - } - } - $catsrch.= "1=2 )"; - } - else - $catsrch = " 1=1 "; - - if ($maxage > 0) - $maxage = sprintf(" and r.postdate > now() - interval %d day ", $maxage); - else - $maxage = ""; - - $exccatlist = ""; - if (count($excludedcats) > 0) - $exccatlist = " and r.categoryid not in (".implode(",", $excludedcats).")"; - - $sql = sprintf("select count(distinct r.imdbid) as num from releases r inner join movieinfo m on m.imdbid = r.imdbid and m.title != '' where r.passwordstatus <= (select value from settings where setting='showpasswordedrelease') and %s %s %s %s ", $browseby, $catsrch, $maxage, $exccatlist); - $res = $this->pdo->queryOneRow($sql, true); - return $res["num"]; - } - - /** - * Get movieinfo rows for browse list by limit. - */ - public function getMovieRange($cat, $start, $num, $orderby, $maxage=-1, $excludedcats=[]) - { - - $browseby = $this->getBrowseBy(); - - if ($start === false) - $limit = ""; - else - $limit = " LIMIT ".$start.",".$num; - - $catsrch = ""; - if (count($cat) > 0 && $cat[0] != -1) - { - $catsrch = " ("; - foreach ($cat as $category) - { - if ($category != -1) - { - $categ = new Category(); - if ($categ->isParent($category)) - { - $children = $categ->getChildren($category); - $chlist = "-99"; - foreach ($children as $child) - $chlist.=", ".$child["id"]; - - if ($chlist != "-99") - $catsrch .= " r.categoryid in (".$chlist.") or "; - } - else - { - $catsrch .= sprintf(" r.categoryid = %d or ", $category); - } - } - } - $catsrch.= "1=2 )"; - } - else - $catsrch = " 1=1 "; - - $maxagesql = ""; - if ($maxage > 0) - $maxagesql = sprintf(" and r.postdate > now() - interval %d day ", $maxage); - - $exccatlist = ""; - if (count($excludedcats) > 0) - $exccatlist = " and r.categoryid not in (".implode(",", $excludedcats).")"; - - $order = $this->getMovieOrder($orderby); - $sql = sprintf(" SELECT r.imdbid, max(r.postdate) as postdate, m.* from releases r inner join movieinfo m on m.imdbid = r.imdbid where r.passwordstatus <= (select value from settings where setting='showpasswordedrelease') and m.title != '' and r.imdbid != 0000000 and %s %s %s %s group by r.imdbid order by %s %s".$limit, $browseby, $catsrch, $maxagesql, $exccatlist, $order[0], $order[1]); - $rows = $this->pdo->query($sql, true); - - // - //get a copy of all the imdbs - // - $imdbds = ""; - foreach ($rows as $row) - $imdbds .= $row["imdbid"]. ", "; - - if (strlen($imdbds) > 0) - { - $imdbds = substr($imdbds,0,-2); - - // - // get all releases matching these ids - // - $sql = sprintf("select r.*, releasenfo.id as nfoid, groups.name as grpname, concat(cp.title, ' > ', c.title) as categoryname from releases r left outer join category c on c.id = r.categoryid left outer join category cp on cp.id = c.parentid left outer join releasenfo on releasenfo.releaseid = r.id left outer join groups on groups.id = r.groupid where imdbid in (%s) and %s %s %s order by r.postdate desc", $imdbds, $catsrch, $maxagesql, $exccatlist); - $allrows = $this->pdo->query($sql, true); - $arr = []; - - // - // build array indexed by imdbid - // - foreach ($allrows as &$allrow) - { - $arr[$allrow["imdbid"]]["id"] = (isset($arr[$allrow["imdbid"]]["id"]) ? $arr[$allrow["imdbid"]]["id"] : "") . $allrow["id"] . ","; - $arr[$allrow["imdbid"]]["rarinnerfilecount"] = (isset($arr[$allrow["imdbid"]]["rarinnerfilecount"]) ? $arr[$allrow["imdbid"]]["rarinnerfilecount"] : "") . $allrow["rarinnerfilecount"] . ","; - $arr[$allrow["imdbid"]]["haspreview"] = (isset($arr[$allrow["imdbid"]]["haspreview"]) ? $arr[$allrow["imdbid"]]["haspreview"] : "") . $allrow["haspreview"] . ","; - $arr[$allrow["imdbid"]]["passwordstatus"] = (isset($arr[$allrow["imdbid"]]["passwordstatus"]) ? $arr[$allrow["imdbid"]]["passwordstatus"] : "") . $allrow["passwordstatus"] . ","; - $arr[$allrow["imdbid"]]["guid"] = (isset($arr[$allrow["imdbid"]]["guid"]) ? $arr[$allrow["imdbid"]]["guid"] : "") . $allrow["guid"] . ","; - $arr[$allrow["imdbid"]]["nfoid"] = (isset($arr[$allrow["imdbid"]]["nfoid"]) ? $arr[$allrow["imdbid"]]["nfoid"] : "") . $allrow["nfoid"] . ","; - $arr[$allrow["imdbid"]]["grpname"] = (isset($arr[$allrow["imdbid"]]["grpname"]) ? $arr[$allrow["imdbid"]]["grpname"] : "") . $allrow["grpname"] . ","; - $arr[$allrow["imdbid"]]["searchname"] = (isset($arr[$allrow["imdbid"]]["searchname"]) ? $arr[$allrow["imdbid"]]["searchname"] : "") . $allrow["searchname"] . "#"; - $arr[$allrow["imdbid"]]["postdate"] = (isset($arr[$allrow["imdbid"]]["postdate"]) ? $arr[$allrow["imdbid"]]["postdate"] : "") . $allrow["postdate"] . ","; - $arr[$allrow["imdbid"]]["size"] = (isset($arr[$allrow["imdbid"]]["size"]) ? $arr[$allrow["imdbid"]]["size"] : "") . $allrow["size"] . ","; - $arr[$allrow["imdbid"]]["totalpart"] = (isset($arr[$allrow["imdbid"]]["totalpart"]) ? $arr[$allrow["imdbid"]]["totalpart"] : "") . $allrow["totalpart"] . ","; - $arr[$allrow["imdbid"]]["comments"] = (isset($arr[$allrow["imdbid"]]["comments"]) ? $arr[$allrow["imdbid"]]["comments"] : "") . $allrow["comments"] . ","; - $arr[$allrow["imdbid"]]["grabs"] = (isset($arr[$allrow["imdbid"]]["grabs"]) ? $arr[$allrow["imdbid"]]["grabs"] : "") . $allrow["grabs"] . ","; - $arr[$allrow["imdbid"]]["categoryid"] = (isset($arr[$allrow["imdbid"]]["categoryid"]) ? $arr[$allrow["imdbid"]]["categoryid"] : "") . $allrow["categoryid"] . ","; - $arr[$allrow["imdbid"]]["categoryname"] = (isset($arr[$allrow["imdbid"]]["categoryname"]) ? $arr[$allrow["imdbid"]]["categoryname"] : "") . $allrow["categoryname"] . ","; - } - - // - // stuff back into the results set - // - foreach ($rows as &$row) - { - $row["grp_release_id"] = substr($arr[$row["imdbid"]]["id"], 0, -1); - $row["grp_rarinnerfilecount"] = substr($arr[$row["imdbid"]]["rarinnerfilecount"], 0, -1); - $row["grp_haspreview"] = substr($arr[$row["imdbid"]]["haspreview"], 0, -1); - $row["grp_release_password"] = substr($arr[$row["imdbid"]]["passwordstatus"], 0, -1); - $row["grp_release_guid"] = substr($arr[$row["imdbid"]]["guid"], 0, -1); - $row["grp_release_nfoid"] = substr($arr[$row["imdbid"]]["nfoid"], 0, -1); - $row["grp_release_grpname"] = substr($arr[$row["imdbid"]]["grpname"], 0, -1); - $row["grp_release_name"] = substr($arr[$row["imdbid"]]["searchname"], 0, -1); - $row["grp_release_postdate"] = substr($arr[$row["imdbid"]]["postdate"], 0, -1); - $row["grp_release_size"] = substr($arr[$row["imdbid"]]["size"], 0, -1); - $row["grp_release_totalparts"] = substr($arr[$row["imdbid"]]["totalpart"], 0, -1); - $row["grp_release_comments"] = substr($arr[$row["imdbid"]]["comments"], 0, -1); - $row["grp_release_grabs"] = substr($arr[$row["imdbid"]]["grabs"], 0, -1); - $row["grp_release_categoryid"] = substr($arr[$row["imdbid"]]["categoryid"], 0, -1); - $row["grp_release_categoryname"] = substr($arr[$row["imdbid"]]["categoryname"], 0, -1); - } - } - return $rows; - - } - - /** - * Get movieinfo orderby column sql. - */ - public function getMovieOrder($orderby) - { - $order = ($orderby == '') ? 'max(r.postdate)' : $orderby; - $orderArr = explode("_", $order); - switch($orderArr[0]) { - case 'title': - $orderfield = 'm.title'; - break; - case 'year': - $orderfield = 'm.year'; - break; - case 'rating': - $orderfield = 'm.rating'; - break; - case 'posted': - default: - $orderfield = 'max(r.postdate)'; - break; - } - $ordersort = (isset($orderArr[1]) && preg_match('/^asc|desc$/i', $orderArr[1])) ? $orderArr[1] : 'desc'; - return array($orderfield, $ordersort); - } - - /** - * Get movieinfo orderby columns. - */ - public function getMovieOrdering() - { - return array('title_asc', 'title_desc', 'year_asc', 'year_desc', 'rating_asc', 'rating_desc'); - } - - /** - * Get movieinfo filter columns. - */ - public function getBrowseByOptions() - { - return array('title', 'director', 'actors', 'genre', 'rating', 'year', 'imdb'); - } - - /** - * Get movieinfo sql column for users selected filter. - */ - public function getBrowseBy() - { - $this->pdo = new newznab\db\Settings; - - $browseby = ' '; - $browsebyArr = $this->getBrowseByOptions(); - foreach ($browsebyArr as $bb) { - if (isset($_REQUEST[$bb]) && !empty($_REQUEST[$bb])) { - $bbv = stripslashes($_REQUEST[$bb]); - if ($bb == 'rating') { $bbv .= '.'; } - if ($bb == 'imdb') { - $browseby .= "m.{$bb}id = $bbv AND "; - } else { - $browseby .= "m.$bb LIKE(".$this->pdo->escapeString('%'.$bbv.'%').") AND "; - } - } - } - return $browseby; - } - - /** - * Create links for data like actor/director so used can requery. - */ - public function makeFieldLinks($data, $field) - { - if ($data[$field] == "") - return ""; - - $tmpArr = explode(', ',$data[$field]); - $newArr = []; - $i = 0; - foreach($tmpArr as $ta) { - if (trim($ta) == '') { - continue; - } - if ($i > 5) { break; } //only use first 6 - $newArr[] = ''.$ta.''; - $i++; - } - return implode(', ', $newArr); - } - - /** - * Update movieinfo row. - */ - public function update($id, $title, $tagline, $plot, $year, $rating, $genre, $director, $actors, $language, $cover, $backdrop) - { - - $this->pdo->queryExec(sprintf("update movieinfo SET title=%s, tagline=%s, plot=%s, year=%s, rating=%s, genre=%s, director=%s, actors=%s, language=%s, cover=%d, backdrop=%d, updateddate=NOW() WHERE imdbid = %d", - $this->pdo->escapeString($title), $this->pdo->escapeString($tagline), $this->pdo->escapeString($plot), $this->pdo->escapeString($year), $this->pdo->escapeString($rating), $this->pdo->escapeString($genre), $this->pdo->escapeString($director), $this->pdo->escapeString($actors), $this->pdo->escapeString($language), $cover, $backdrop, $id)); - } - - /** - * Update movieinfo row by querying external sources and updating known properties/images. - */ - public function updateMovieInfo($imdbId) - { - - if ($imdbId + 0 == 0) - { - return; - } - - $ri = new ReleaseImage(); - - //check themoviedb for imdb info - $tmdb = $this->fetchTmdbProperties($imdbId); - - //check imdb for movie info - $imdb = $this->fetchImdbProperties($imdbId); - - if (!$imdb && !$tmdb) { - return false; - } - - $mov = []; - $mov['imdb_id'] = $imdbId; - $mov['tmdb_id'] = (!isset($tmdb['tmdb_id']) || $tmdb['tmdb_id'] == '') ? "NULL" : $tmdb['tmdb_id']; - - //prefer tmdb cover over imdb cover - $mov['cover'] = 0; - if (isset($tmdb['cover']) && $tmdb['cover'] != '') { - $mov['cover'] = $ri->saveImage($imdbId.'-cover', $tmdb['cover'], $this->imgSavePath); - } elseif (isset($imdb['cover']) && $imdb['cover'] != '') { - $mov['cover'] = $ri->saveImage($imdbId.'-cover', $imdb['cover'], $this->imgSavePath); - } - - $mov['backdrop'] = 0; - if (isset($tmdb['backdrop']) && $tmdb['backdrop'] != '') { - $mov['backdrop'] = $ri->saveImage($imdbId.'-backdrop', $tmdb['backdrop'], $this->imgSavePath, 1024, 768); - } - - $mov['title'] = ''; - if (isset($tmdb['title']) && $tmdb['title'] != '') { - $mov['title'] = $tmdb['title']; - } elseif (isset($imdb['title']) && $imdb['title'] != '') { - $mov['title'] = $imdb['title']; - } - $mov['title'] = html_entity_decode($mov['title'], ENT_QUOTES, 'UTF-8'); - - $mov['trailer'] = ''; - if (isset($tmdb['trailer']) && $tmdb['trailer'] != '') { - $mov['trailer'] = $tmdb['trailer']; - } - - $mov['rating'] = ''; - if (isset($imdb['rating']) && $imdb['rating'] != '') { - $mov['rating'] = $imdb['rating']; - } elseif (isset($tmdb['rating']) && $tmdb['rating'] != '') { - $mov['rating'] = $tmdb['rating']; - } - $mov['rating'] = str_replace(',','.',$mov['rating']); - - $mov['tagline'] = ''; - if (isset($tmdb['tagline']) && $tmdb['tagline'] != '') { - $mov['tagline'] = $tmdb['tagline']; - } elseif (isset($imdb['tagline']) && $imdb['tagline'] != '') { - $mov['tagline'] = $imdb['tagline']; - } - $mov['tagline'] = html_entity_decode($mov['tagline'], ENT_QUOTES, 'UTF-8'); - - $mov['plot'] = ''; - if (isset($tmdb['plot']) && $tmdb['plot'] != '') { - $mov['plot'] = $tmdb['plot']; - } elseif (isset($imdb['plot']) && $imdb['plot'] != '') { - $mov['plot'] = $imdb['plot']; - } - $mov['plot'] = html_entity_decode($mov['plot'], ENT_QUOTES, 'UTF-8'); - - $mov['year'] = ''; - if (isset($imdb['year']) && $imdb['year'] != '') { - $mov['year'] = $imdb['year']; - } elseif (isset($tmdb['year']) && $tmdb['year'] != '') { - $mov['year'] = $tmdb['year']; - } - - $mov['genre'] = ''; - if (isset($tmdb['genre']) && $tmdb['genre'] != '') { - $mov['genre'] = $tmdb['genre']; - } elseif (isset($imdb['genre']) && $imdb['genre'] != '') { - $mov['genre'] = $imdb['genre']; - } - if (is_array($mov['genre'])) { - $mov['genre'] = implode(', ', array_unique($mov['genre'])); - } - $mov['genre'] = html_entity_decode($mov['genre'], ENT_QUOTES, 'UTF-8'); - - $mov['director'] = ''; - if (isset($imdb['director']) && $imdb['director'] != '') { - $mov['director'] = (is_array($imdb['director'])) ? implode(', ', array_unique($imdb['director'])) : $imdb['director']; - } - $mov['director'] = html_entity_decode($mov['director'], ENT_QUOTES, 'UTF-8'); - - $mov['actors'] = ''; - if (isset($imdb['actors']) && $imdb['actors'] != '') { - $mov['actors'] = (is_array($imdb['actors'])) ? implode(', ', array_unique($imdb['actors'])) : $imdb['actors']; - } - $mov['actors'] = html_entity_decode($mov['actors'], ENT_QUOTES, 'UTF-8'); - - $mov['language'] = ''; - if (isset($imdb['language']) && $imdb['language'] != '') { - $mov['language'] = (is_array($imdb['language'])) ? implode(', ', array_unique($imdb['language'])) : $imdb['language']; - } - $mov['language'] = html_entity_decode($mov['language'], ENT_QUOTES, 'UTF-8'); - - $query = sprintf(" - INSERT INTO movieinfo - (imdbid, tmdbID, title, rating, tagline, trailer, plot, year, genre, director, actors, language, cover, backdrop, createddate, updateddate) - VALUES - (%d, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %d, %d, NOW(), NOW()) - ON DUPLICATE KEY UPDATE - imdbid=%d, tmdbID=%s, title=%s, rating=%s, tagline=%s, trailer=%s, plot=%s, year=%s, genre=%s, director=%s, actors=%s, language=%s, cover=%d, backdrop=%d, updateddate=NOW()", - $mov['imdb_id'], $mov['tmdb_id'], $this->pdo->escapeString($mov['title']), $this->pdo->escapeString($mov['rating']), $this->pdo->escapeString($mov['tagline']), $this->pdo->escapeString($mov['trailer']), $this->pdo->escapeString($mov['plot']), $this->pdo->escapeString($mov['year']), $this->pdo->escapeString($mov['genre']), $this->pdo->escapeString($mov['director']), $this->pdo->escapeString($mov['actors']), $this->pdo->escapeString($mov['language']), $mov['cover'], $mov['backdrop'], - $mov['imdb_id'], $mov['tmdb_id'], $this->pdo->escapeString($mov['title']), $this->pdo->escapeString($mov['rating']), $this->pdo->escapeString($mov['tagline']), $this->pdo->escapeString($mov['trailer']), $this->pdo->escapeString($mov['plot']), $this->pdo->escapeString($mov['year']), $this->pdo->escapeString($mov['genre']), $this->pdo->escapeString($mov['director']), $this->pdo->escapeString($mov['actors']), $this->pdo->escapeString($mov['language']), $mov['cover'], $mov['backdrop']); - - $movieId = $this->pdo->queryInsert($query); - - return $movieId; - } - - /** - * Lookup a movie on tmdb by id - */ - public function fetchTmdbProperties($id, $isImdbId=true) - { - $tmdb = new TMDb($this->apikey, $this->lookuplanguage); - $lookupId = ($isImdbId) ? 'tt'.$id : $id; - - try { - $movie = $tmdb->getMovie($lookupId); - } catch (Exception $e) { - return false; - } - if (!$movie || !is_array($movie)) { return false; } - if (isset($movie['status_code']) && $movie['status_code'] > 1) { return false; } - - $ret = []; - $ret['title'] = $movie['title']; - $ret['tmdb_id'] = $movie['id']; - $ret['imdb_id'] = str_replace('tt', '', $movie['imdb_id']); - $ret['rating'] = ($movie['vote_average'] == 0) ? '' : $movie['vote_average']; - $ret['plot'] = $movie['overview']; - if (isset($movie['tagline'])) - $ret['tagline'] = $movie['tagline']; - if (isset($movie['release_date'])) - $ret['year'] = date("Y", strtotime($movie['release_date'])); - if (isset($movie['genres']) && sizeof($movie['genres']) > 0) - { - $genres = []; - foreach($movie['genres'] as $genre) - { - $genres[] = $genre['name']; - } - $ret['genre'] = $genres; - } - if (isset($movie['trailers']) && isset($movie['trailers']['youtube']) && sizeof($movie['trailers']['youtube']) > 0) - { - foreach($movie['trailers']['youtube'] as $trailer) - { - $ret['trailer'] = $trailer['source']; - break; - } - } - - if (isset($movie['poster_path'])) - $ret['cover'] = $tmdb->getImageUrl($movie['poster_path'], TMDb::IMAGE_POSTER, "w185"); - - if (isset($movie['backdrop_path'])) - $ret['backdrop'] = $tmdb->getImageUrl($movie['backdrop_path'], TMDb::IMAGE_BACKDROP, "w300"); - - return $ret; - } - - /** - * Search for a movie on tmdb by querystring. - */ - public function searchTmdb($search, $limit=10) - { - $tmdb = new TMDb($this->apikey, $this->lookuplanguage); - try { - $movies = $tmdb->searchMovie($search); - } catch (Exception $e) { - return false; - } - if (!$movies || !isset($movies['results'])) { return false; } - - $ret = []; - $c=0; - foreach($movies['results'] as $movie) - { - $c++; - if ($c >= $limit) - continue; - - $m = $this->fetchTmdbProperties($movie['id'], false); - if ($m !== false) - $ret[] = $m; - } - return $ret; - } - - /** - * Scrape a movie from imdb. - */ - public function fetchImdbProperties($imdbId) - { - $imdb_regex = array( - 'title' => '/ '/([0-9]{1,2}[\.,][0-9]{1,2})<\/span>/iS', - 'year' => '/.*?\(.*?(\d{4}).*?<\/title>/iS', - 'cover' => '/<a.*?href="\/media\/.*?>\s*<img[^>]*?src="(.*?)"/iS' - ); - - $imdb_regex_multi = array( - 'genre' => '/<span.*?itemprop=\"genre\">(.*?)<\/span>/iS', - 'language' => '/<a.*?href="\/language\/.* itemprop=["\']url["\'].*?>(.*?)<\/a>/iS' - ); - - $buffer = Utility::getUrl(['url' => 'http://www.imdb.com/title/tt$imdbId/', 'method'=>'get', 'language' => $this->lookuplanguage]); - - // make sure we got some data - if ($buffer !== false && strlen($buffer)) - { - $ret = []; - foreach ($imdb_regex as $field => $regex) - { - if (preg_match($regex, $buffer, $matches)) - { - $match = $matches[1]; - $match = strip_tags(trim(rtrim($match))); - $ret[$field] = $match; - //echo 'Found '.$field.' : '.$ret[$field]."\n"; - - } - } - - foreach ($imdb_regex_multi as $field => $regex) - { - if (preg_match_all($regex, $buffer, $matches)) - { - $match = $matches[1]; - $match = array_map("trim", $match); - $ret[$field] = $match; - //echo 'Found '.$field.' : '.implode(" | ", $ret[$field])."\n"; - } - } - - - //directors - if (preg_match('/<div.*?itemprop="director".*?>(.*?)<\/div>/is', $buffer, $hit)) - { - if (preg_match_all('/<span.*?itemprop="name".*?>(.*?)<\/span>/is', $hit[1], $results, PREG_PATTERN_ORDER)) - { - $ret['director'] = $results[1]; - } - } - - - //actors - if (preg_match('/<h4.*?Stars?:<\/h4>(.*?)<\/div>/is', $buffer, $hit)) - { - if (preg_match_all('/<span.*?itemprop=\"name\".*?>(.*?)<\/span>/is', $hit[1], $results, PREG_PATTERN_ORDER)) - { - $ret['actors'] = $results[1]; - } - } - - return $ret; - } - - return false; - } - /** - * Process all untagged movies to link them to a movieinfo row. - */ - public function processMovieReleases() - { - $ret = 0; - $nfo = new Nfo(); - - $res = $this->pdo->queryDirect(sprintf("SELECT searchname, id from releases where imdbid IS NULL and categoryid in ( select id from category where parentid = %d ) ORDER BY postdate DESC LIMIT 100", Category::CAT_PARENT_MOVIE)); - if ($this->pdo->getNumRows($res) > 0) - { - if ($this->echooutput) - echo "MovProc : Processing " . $this->pdo->getNumRows($res) . " movie releases\n"; - - while ($arr = $this->pdo->getAssocArray($res)) - { - $imdbID = false; - /* Preliminary IMDB id Detection from NFO file */ - $rawnfo = ''; - if($nfo->getNfo($arr['id'], $rawnfo)) - $imdbID = $this->parseImdbFromNfo($rawnfo); - - if($imdbID !== false){ - // Set IMDB (if found in nfo) and move along - $this->pdo->queryExec(sprintf("update releases set imdbid = %s where id = %d", $this->pdo->escapeString($imdbID), $arr["id"])); - //check for existing movie entry - $movCheck = $this->getMovieInfo($imdbID); - if ($movCheck === false || (isset($movCheck['updateddate']) && (time() - strtotime($movCheck['updateddate'])) > 2592000)) - { - $movieId = $this->updateMovieInfo($imdbID); - } - continue; - } - - $moviename = $this->parseMovieName($arr['searchname']); - if ($moviename !== false) - { - if ($this->echooutput) - echo 'MovProc : '.$moviename.' ['.$arr['searchname'].']'."\n"; - - //$buffer = getUrl("https://www.google.com/search?source=ig&hl=en&rlz=&btnG=Google+Search&aq=f&oq=&q=".urlencode($moviename.' site:imdb.com')); - $buffer = Utility::getUrl(['url' => 'http://www.bing.com/search?&q='.urlencode($moviename.' site:imdb.com')]); - - // make sure we got some data - if ($buffer !== false && strlen($buffer)) - { - $imdbId = $this->parseImdbFromNfo($buffer); - if ($imdbId !== false) - { - //update release with imdb id - $this->pdo->queryExec(sprintf("update releases SET imdbid = %s WHERE id = %d", $this->pdo->escapeString($imdbId), $arr["id"])); - - //check for existing movie entry - $movCheck = $this->getMovieInfo($imdbId); - if ($movCheck === false || (isset($movCheck['updateddate']) && (time() - strtotime($movCheck['updateddate'])) > 2592000)) - { - $movieId = $this->updateMovieInfo($imdbId); - } - - } else { - //no imdb id found, set to all zeros so we dont process again - $this->pdo->queryExec(sprintf("update releases SET imdbid = %d WHERE id = %d", 0, $arr["id"])); - } - - } else { - //url fetch failed, will try next run - } - - - } else { - //no valid movie name found, set to all zeros so we dont process again - $this->pdo->queryExec(sprintf("update releases SET imdbid = %d WHERE id = %d", 0, $arr["id"])); - } - } - } - } - - /** - * Strip a movie name from a release. - */ - public function parseMovieName($releasename) - { - $cat = new Category; - if (!$cat->isMovieForeign($releasename)) - { - preg_match('/^(?P<name>.*)[\.\-_\( ](?P<year>19\d{2}|20\d{2})/i', $releasename, $matches); - if (!isset($matches['year'])) - preg_match('/^(?P<name>.*)[\.\-_ ](?:dvdrip|bdrip|brrip|bluray|hdtv|divx|xvid|proper|repack|real\.proper|sub\.?fix|sub\.?pack|ac3d|unrated|1080i|1080p|720p|810p)/i', $releasename, $matches); - - if (isset($matches['name'])) - { - $name = preg_replace('/\(.*?\)|\.|_/i', ' ', $matches['name']); - $year = (isset($matches['year'])) ? ' ('.$matches['year'].')' : ''; - return trim($name).$year; - } - } - return false; - } - - /** - * Get rows from upcoming table by type. - */ - public function getUpcoming($type, $source="rottentomato") - { - $sql = sprintf("select * from upcoming where source = %s and typeid = %d", $this->pdo->escapeString($source), $type); - return $this->pdo->queryOneRow($sql); - } - - /** - * Retrieve upcoming movie data from rottentomatoes API. - */ - public function updateUpcoming() - { - $rtkey = $this->pdo->getSetting('rottentomatokey'); - if (isset($rtkey)) - { - $rt = new RottenTomato($this->pdo->getSetting('rottentomatokey')); - - $ret = $rt->getBoxOffice(); - if ($ret != "") - $this->updateInsUpcoming('rottentomato', Movie::SRC_BOXOFFICE, $ret); - - $ret = $rt->getInTheaters(); - if ($ret != "") - $this->updateInsUpcoming('rottentomato', Movie::SRC_INTHEATRE, $ret); - - $ret = $rt->getOpening(); - if ($ret != "") - $this->updateInsUpcoming('rottentomato', Movie::SRC_OPENING, $ret); - - $ret = $rt->getUpcoming(); - if ($ret != "") - $this->updateInsUpcoming('rottentomato', Movie::SRC_UPCOMING, $ret); - - $ret = $rt->getDvdReleases(); - if ($ret != "") - $this->updateInsUpcoming('rottentomato', Movie::SRC_DVD, $ret); - } - } - - /** - * Add/Update upcoming row. - */ - public function updateInsUpcoming($source, $type, $info) - { - - $sql = sprintf("INSERT into upcoming (source,typeID,info,updateddate) VALUES (%s, %d, %s, now()) ON DUPLICATE KEY UPDATE info = %s", - $this->pdo->escapeString($source), $type, $this->pdo->escapeString($info), $this->pdo->escapeString($info)); - $this->pdo->queryInsert($sql); - } - - /** - * Get list of standard movie genres. - */ - public function getGenres() - { - return array( - 'Action', - 'Adventure', - 'Animation', - 'Biography', - 'Comedy', - 'Crime', - 'Documentary', - 'Drama', - 'Family', - 'Fantasy', - 'Film-Noir', - 'Game-Show', - 'History', - 'Horror', - 'Music', - 'Musical', - 'Mystery', - 'News', - 'Reality-TV', - 'Romance', - 'Sci-Fi', - 'Sport', - 'Talk-Show', - 'Thriller', - 'War', - 'Western' - ); - } -}