From fe5574c0b326fdd24f460fdb3cef671e5c1952be Mon Sep 17 00:00:00 2001 From: DariusIII Date: Mon, 2 Nov 2015 13:33:19 +0100 Subject: [PATCH] First push of semi working tmdb --- libs/TMDb.php | 1197 -------------------------- libs/Tmdb/Data/Collection.php | 2 +- libs/Tmdb/Data/Episode.php | 2 +- libs/Tmdb/Data/Movie.php | 2 +- libs/Tmdb/Data/Person.php | 2 +- libs/Tmdb/Data/Role.php | 2 +- libs/Tmdb/Data/Roles/MovieRole.php | 2 +- libs/Tmdb/Data/Roles/TVShowRole.php | 2 +- libs/Tmdb/Data/Season.php | 4 +- libs/Tmdb/Data/TVShow.php | 2 +- misc/testing/Tests/test_tmdb_API.php | 48 ++ newznab/libraries/TmdbAPI.php | 11 - newznab/processing/PostProcess.php | 2 + newznab/processing/tv/TMDB.php | 51 +- newznab/processing/tv/TV.php | 12 +- newznab/processing/tv/TVMaze.php | 2 +- 16 files changed, 90 insertions(+), 1253 deletions(-) delete mode 100644 libs/TMDb.php create mode 100755 misc/testing/Tests/test_tmdb_API.php diff --git a/libs/TMDb.php b/libs/TMDb.php deleted file mode 100644 index 449912c55..000000000 --- a/libs/TMDb.php +++ /dev/null @@ -1,1197 +0,0 @@ -_timestamps = array_fill(0, TMDB::REQUEST_LIMIT, 0.0); - - $this->_apikey = (string) $apikey; - $this->_apischeme = ($scheme == TMDb::API_SCHEME) ? TMDb::API_SCHEME : TMDb::API_SCHEME_SSL; - $this->setLang($default_lang); - - if($config === TRUE) - { - $this->getConfiguration(); - } - } - - /** - * Increment request counter and handle request limitation - * - * @return void - */ - protected function incRequests(){ - - /* Increment request counter */ - $this->_requests += 1; - - /* Calculate index for the oldest timestamp in the timestamps array */ - $idx = $this->_requests % TMDB::REQUEST_LIMIT; - - /* Save the oldest timestamp for debugging */ - $this->_timestamp = $this->_timestamps[ $idx ]; - - /* Calculate elapsed time */ - $timediff = microtime(true) - $this->_timestamp; - //$timediff = ( floor(microtime(true)*10) - ceil($this->_timestamp*10) ) / 10; - - /* Compare the elapsed time against the specified timespan */ - if ( $timediff < TMDB::REQUEST_TIMESPAN ){ - /* Calculate delay * 1 second and sleep */ - usleep( (TMDB::REQUEST_TIMESPAN - $timediff) *1000000 ); - } - - /* Save new timestamp */ - $this->_timestamps[ $idx ] = microtime(true); - } - - /** - * Search a movie by querystring - * - * @param string $text Query to search after in the TMDb database - * @param int $page Number of the page with results (default first page) - * @param bool $adult Whether of not to include adult movies in the results (default FALSE) - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function searchMovie($query, $page = 1, $adult = FALSE, $year = NULL, $lang = NULL) - { - $params = array( - 'query' => $query, - 'page' => (int) $page, - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - 'include_adult' => (bool) $adult, - 'year' => $year, - ); - return $this->_makeCall('search/movie', $params); - } - - /** - * Search a tv show by querystring - * - * @param string $text Query to search after in the TMDb database - * @param int $page Number of the page with results (default first page) - * @param bool $air_date_year Filter results that have air date with value (default NULL) - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function searchTV($query, $page = 1, $air_date_year = NULL, $lang = NULL) - { - $params = array( - 'query' => $query, - 'page' => (int) $page, - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - 'air_date_year' => $air_date_year - ); - return $this->_makeCall('search/tv', $params); - } - - /** - * Search a person by querystring - * - * @param string $text Query to search after in the TMDb database - * @param int $page Number of the page with results (default first page) - * @param bool $adult Whether of not to include adult movies in the results (default FALSE) - * @return TMDb result array - */ - public function searchPerson($query, $page = 1, $adult = FALSE) - { - $params = array( - 'query' => $query, - 'page' => (int) $page, - 'include_adult' => (bool) $adult, - ); - return $this->_makeCall('search/person', $params); - } - - /** - * Search a company by querystring - * - * @param string $text Query to search after in the TMDb database - * @param int $page Number of the page with results (default first page) - * @return TMDb result array - */ - public function searchCompany($query, $page = 1) - { - $params = array( - 'query' => $query, - 'page' => $page, - ); - return $this->_makeCall('search/company', $params); - } - - /** - * Retrieve all basic information for a particular tv show - * - * @param mixed $id TMDb-id or IMDB-id - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getTV($id, $lang = NULL) - { - $params = array( - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('tv/'.$id, $params); - } - - /** - * Retrieve all basic information for a particular tv show season - * - * @param mixed $id TMDb-id or IMDB-id - * @param int $season_id Season Id to query - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getTVSeason($id, $season_id, $lang = NULL) - { - $params = array( - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('tv/'.$id.'/season/'.$season_id, $params); - } - - /** - * Retrieve cast and credits for a particular tv show season - * - * @param mixed $id TMDb-id or IMDB-id - * @param int $season_id Season Id to query - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getTVSeasonCredits($id, $season_id, $lang = NULL) - { - $params = array( - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('tv/'.$id.'/season/'.$season_id.'/credits', $params); - } - - /** - * Retrieve images for a particular tv show season - * - * @param mixed $id TMDb-id or IMDB-id - * @param int $season_id Season Id to query - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getTVSeasonImages($id, $season_id, $lang = NULL) - { - $params = array( - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('tv/'.$id.'/season/'.$season_id.'/images', $params); - } - - /** - * Retrieve all basic information for a particular tv show episode - * - * @param mixed $id TMDb-id or IMDB-id - * @param int $season_id Season Id to query - * @param int $episode_id Episode Id to query - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getTVEpisode($id, $season_id, $episode_id, $lang = NULL) - { - $params = array( - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('tv/'.$id.'/season/'.$season_id.'/episode/'.$episode_id, $params); - } - - /** - * Retrieve cast and credits for a particular tv show episode - * - * @param mixed $id TMDb-id or IMDB-id - * @param int $season_id Season Id to query - * @param int $episode_id Episode Id to query - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getTVEpisodeCredits($id, $season_id, $episode_id, $lang = NULL) - { - $params = array( - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('tv/'.$id.'/season/'.$season_id.'/episode/'.$episode_id.'/credits', $params); - } - - /** - * Retrieve images for a particular tv show episode - * - * @param mixed $id TMDb-id or IMDB-id - * @param int $season_id Season Id to query - * @param int $episode_id Episode Id to query - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getTVEpisodeImages($id, $season_id, $episode_id, $lang = NULL) - { - $params = array( - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('tv/'.$id.'/season/'.$season_id.'/episode/'.$episode_id.'/images', $params); - } - - /** - * Retrieve information about a collection - * - * @param int $id Id from a collection (retrieved with getMovie) - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getCollection($id, $lang = NULL) - { - $params = array( - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('collection/'.$id, $params); - } - - /** - * Retrieve all basic information for a particular movie - * - * @param mixed $id TMDb-id or IMDB-id - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getMovie($id, $lang = NULL) - { - $params = array( - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('movie/'.$id, $params); - } - - /** - * Retrieve alternative titles for a particular movie - * - * @param mixed $id TMDb-id or IMDB-id - * @param string $country Only include titles for a particular country (ISO 3166-1) - * @return TMDb result array - */ - public function getMovieTitles($id, $country = NULL) - { - $params = array( - 'country' => $country, - ); - return $this->_makeCall('movie/'.$id.'/alternative_titles', $params); - } - - /** - * Retrieve all of the movie crew information for a particular movie. - * - * @see http://docs.themoviedb.apiary.io/#movies - * - * @param mixed $id TMDb-id or IMDB-id - * @return array TMDb result - */ - public function getMovieCredits($id) - { - return $this->_makeCall('movie/'.$id.'/credits'); - } - - /** - * Retrieve all of the movie cast information for a particular movie - * - * @param mixed $id TMDb-id or IMDB-id - * @return TMDb result array - */ - public function getMovieCast($id) - { - return $this->_makeCall('movie/'.$id.'/casts'); - } - - /** - * Retrieve all of the keywords for a particular movie - * - * @param mixed $id TMDb-id or IMDB-id - * @return TMDb result array - */ - public function getMovieKeywords($id) - { - return $this->_makeCall('movie/'.$id.'/keywords'); - } - - /** - * Retrieve all the release and certification data for a particular movie - * - * @param mixed $id TMDb-id or IMDB-id - * @return TMDb result array - */ - public function getMovieReleases($id) - { - return $this->_makeCall('movie/'.$id.'/releases'); - } - - /** - * Retrieve available translations for a particular movie - * - * @param mixed $id TMDb-id or IMDB-id - * @return TMDb result array - */ - public function getMovieTranslations($id) - { - return $this->_makeCall('movie/'.$id.'/translations'); - } - - /** - * Retrieve available trailers for a particular movie - * - * @param mixed $id TMDb-id or IMDB-id - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getMovieTrailers($id, $lang = NULL) - { - $params = array( - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('movie/'.$id.'/trailers', $params); - } - - /** - * Retrieve all images for a particular movie - * - * @param mixed $id TMDb-id or IMDB-id - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getMovieImages($id, $lang = NULL) - { - $params = array( - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('movie/'.$id.'/images', $params); - } - - /** - * Retrieve similar movies for a particular movie - * - * @param mixed $id TMDb-id or IMDB-id - * @param int $page Number of the page with results (default first page) - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getSimilarMovies($id, $page = 1, $lang = NULL) - { - $params = array( - 'page' => (int) $page, - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('movie/'.$id.'/similar_movies', $params); - } - - /** - * Retrieve newest movie added to TMDb - * - * @return TMDb result array - */ - public function getLatestMovie() - { - return $this->_makeCall('movie/latest'); - } - - /** - * Retrieve movies arriving to theatres within the next few weeks - * - * @param int $page Number of the page with results (default first page) - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getUpcomingMovies($page = 1, $lang = NULL) - { - $params = array( - 'page' => (int) $page, - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('movie/upcoming', $params); - } - - /** - * Retrieve movies currently in theatres - * - * @param int $page Number of the page with results (default first page) - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getNowPlayingMovies($page = 1, $lang = NULL) - { - $params = array( - 'page' => (int) $page, - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('movie/now_playing', $params); - } - - /** - * Retrieve popular content (list is updated daily) - * - * @param string $type Type of content to search ('movie' or 'tv'; default movie) - * @param int $page Number of the page with results (default first page) - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getPopular($type = 'movie', $page = 1, $lang = NULL) - { - $params = array( - 'page' => (int) $page, - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall($type.'/popular', $params); - } - - /** - * Retrieve top-rated content - * - * @param string $type Type of content to search ('movie' or 'tv'; default movie) - * @param int $page Number of the page with results (default first page) - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getTopRated($type = 'movie', $page = 1, $lang = NULL) - { - $params = array( - 'page' => (int) $page, - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall($type.'/top_rated', $params); - } - - /** - * Retrieve changes for a particular movie - * - * @param mixed $id TMDb-id or IMDB-id - * @return TMDb result array - */ - public function getMovieChanges($id) - { - return $this->_makeCall('movie/'.$id.'/changes'); - } - - /** - * Retrieve all id's from changed movies - * - * @param int $page Number of the page with results (default first page) - * @param string $start_date String start date as YYYY-MM-DD - * @param string $end_date String end date as YYYY-MM-DD (not inclusive) - * @return TMDb result array - */ - public function getChangedMovies($page = 1, $start_date = NULL, $end_date = NULL) - { - $params = array( - 'page' => (int) $page, - 'start_date' => $start_date, - 'end_date' => $end_date, - ); - return $this->_makeCall('movie/changes', $params); - } - - /** - * Retrieve all basic information for a particular person - * - * @param int $id TMDb person-id - * @return TMDb result array - */ - public function getPerson($id) - { - return $this->_makeCall('person/'.$id); - } - - /** - * Retrieve all cast and crew information for a particular person - * - * @param int $id TMDb person-id - * @param string $type Type of content to search ('combined', movie' or 'tv'; default combined) - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getPersonCredits($id, $type = 'combined', $lang = NULL) - { - $params = array( - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('person/'.$id.'/'.$type.'_credits', $params); - } - - /** - * Retrieve all images for a particular person - * - * @param mixed $id TMDb person-id - * @return TMDb result array - */ - public function getPersonImages($id) - { - return $this->_makeCall('person/'.$id.'/images'); - } - - /** - * Retrieve changes for a particular person - * - * @param mixed $id TMDb person-id - * @return TMDb result array - */ - public function getPersonChanges($id) - { - return $this->_makeCall('person/'.$id.'/changes'); - } - - /** - * Retrieve all id's from changed persons - * - * @param int $page Number of the page with results (default first page) - * @param string $start_date String start date as YYYY-MM-DD - * @param string $end_date String end date as YYYY-MM-DD (not inclusive) - * @return TMDb result array - */ - public function getChangedPersons($page = 1, $start_date = NULL, $end_date = NULL) - { - $params = array( - 'page' => (int) $page, - 'start_date' => $start_date, - 'start_date' => $end_date, - ); - return $this->_makeCall('person/changes', $params); - } - - /** - * Retrieve all basic information for a particular production company - * - * @param int $id TMDb company-id - * @return TMDb result array - */ - public function getCompany($id) - { - return $this->_makeCall('company/'.$id); - } - - /** - * Retrieve movies for a particular production company - * - * @param int $id TMDb company-id - * @param int $page Number of the page with results (default first page) - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getMoviesByCompany($id, $page = 1, $lang = NULL) - { - $params = array( - 'page' => (int) $page, - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('company/'.$id.'/movies', $params); - } - - /** - * Retrieve a list of genres used on TMDb - * - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getGenres($lang = NULL) - { - $params = array( - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('genre/list', $params); - } - - /** - * Retrieve movies for a particular genre - * - * @param int $id TMDb genre-id - * @param int $page Number of the page with results (default first page) - * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages - * @return TMDb result array - */ - public function getMoviesByGenre($id, $page = 1, $lang = NULL) - { - $params = array( - 'page' => (int) $page, - 'language' => ($lang !== NULL) ? $lang : $this->getLang(), - ); - return $this->_makeCall('genre/'.$id.'/movies', $params); - } - - /** - * Authentication: retrieve authentication token - * More information about the authentication process: http://help.themoviedb.org/kb/api/user-authentication - * - * @return TMDb result array - */ - public function getAuthToken() - { - $result = $this->_makeCall('authentication/token/new'); - - if( ! isset($result['request_token'])) - { - if($this->getDebugMode()) - { - throw new TMDbException('No valid request token from TMDb'); - } - else - { - return FALSE; - } - } - - return $result; - } - - /** - * Authentication: retrieve authentication session and set it to the class - * More information about the authentication process: http://help.themoviedb.org/kb/api/user-authentication - * - * @param string $token - * @return TMDb result array - */ - public function getAuthSession($token) - { - $params = array( - 'request_token' => $token, - ); - - $result = $this->_makeCall('authentication/session/new', $params); - - if(isset($result['session_id'])) - { - $this->setAuthSession($result['session_id']); - } - - return $result; - } - - /** - * Authentication: set retrieved session id in the class for authenticated requests - * More information about the authentication process: http://help.themoviedb.org/kb/api/user-authentication - * - * @param string $session_id - */ - public function setAuthSession($session_id) - { - $this->_session_id = $session_id; - } - - /** - * Retrieve basic account information - * - * @param string $session_id Set session_id for the account you want to retrieve information from - * @return TMDb result array - */ - public function getAccount($session_id = NULL) - { - $session_id = ($session_id === NULL) ? $this->_session_id : $session_id; - return $this->_makeCall('account', NULL, $session_id); - } - - /** - * Retrieve favorite movies for a particular account - * - * @param int $account_id TMDb account-id - * @param string $session_id Set session_id for the account you want to retrieve information from - * @param int $page Number of the page with results (default first page) - * @param mixed $lang Get result in other language then default for this user account (ISO 3166-1) - * @return TMDb result array - */ - public function getAccountFavoriteMovies($account_id, $session_id = NULL, $page = 1, $lang = FALSE) - { - $session_id = ($session_id === NULL) ? $this->_session_id : $session_id; - $params = array( - 'page' => (int) $page, - 'language' => ($lang !== NULL) ? $lang : '', - ); - return $this->_makeCall('account/'.$account_id.'/favorite_movies', $params, $session_id); - } - - /** - * Retrieve rated movies for a particular account - * - * @param int $account_id TMDb account-id - * @param string $session_id Set session_id for the account you want to retrieve information from - * @param int $page Number of the page with results (default first page) - * @param mixed $lang Get result in other language then default for this user account (ISO 3166-1) - * @return TMDb result array - */ - public function getAccountRatedMovies($account_id, $session_id = NULL, $page = 1, $lang = FALSE) - { - $session_id = ($session_id === NULL) ? $this->_session_id : $session_id; - $params = array( - 'page' => (int) $page, - 'language' => ($lang !== NULL) ? $lang : '', - ); - return $this->_makeCall('account/'.$account_id.'/rated_movies', $params, $session_id); - } - - /** - * Retrieve movies that have been marked in a particular account watchlist - * - * @param int $account_id TMDb account-id - * @param string $session_id Set session_id for the account you want to retrieve information from - * @param int $page Number of the page with results (default first page) - * @param mixed $lang Get result in other language then default for this user account (ISO 3166-1) - * @return TMDb result array - */ - public function getAccountWatchlistMovies($account_id, $session_id = NULL, $page = 1, $lang = FALSE) - { - $session_id = ($session_id === NULL) ? $this->_session_id : $session_id; - $params = array( - 'page' => (int) $page, - 'language' => ($lang !== NULL) ? $lang : '', - ); - return $this->_makeCall('account/'.$account_id.'/movie_watchlist', $params, $session_id); - } - - /** - * Add a movie to the account favorite movies - * - * @param int $account_id TMDb account-id - * @param string $session_id Set session_id for the account you want to retrieve information from - * @param int $movie_id TMDb movie-id - * @param bool $favorite Add to favorites or remove from favorites (default TRUE) - * @return TMDb result array - */ - public function addFavoriteMovie($account_id, $session_id = NULL, $movie_id = 0, $favorite = TRUE) - { - $session_id = ($session_id === NULL) ? $this->_session_id : $session_id; - $params = array( - 'movie_id' => (int) $movie_id, - 'favorite' => (bool) $favorite, - ); - return $this->_makeCall('account/'.$account_id.'/favorite', $params, $session_id, TMDb::POST); - } - - /** - * Add a movie to the account watchlist - * - * @param int $account_id TMDb account-id - * @param string $session_id Set session_id for the account you want to retrieve information from - * @param int $movie_id TMDb movie-id - * @param bool $watchlist Add to watchlist or remove from watchlist (default TRUE) - * @return TMDb result array - */ - public function addMovieToWatchlist($account_id, $session_id = NULL, $movie_id = 0, $watchlist = TRUE) - { - $session_id = ($session_id === NULL) ? $this->_session_id : $session_id; - $params = array( - 'movie_id' => (int) $movie_id, - 'movie_watchlist' => (bool) $watchlist, - ); - return $this->_makeCall('account/'.$account_id.'/movie_watchlist', $params, $session_id, TMDb::POST); - } - - /** - * Add a rating to a movie - * - * @param string $session_id Set session_id for the account you want to retrieve information from - * @param int $movie_id TMDb movie-id - * @param float $value Value between 1 and 10 - * @return TMDb result array - */ - public function addMovieRating($session_id = NULL, $movie_id = 0, $value = 0) - { - $session_id = ($session_id === NULL) ? $this->_session_id : $session_id; - $params = array( - 'value' => is_numeric($value) ? floatval($value) : 0, - ); - return $this->_makeCall('movie/'.$movie_id.'/rating', $params, $session_id, TMDb::POST); - } - - /** - * Get configuration from TMDb - * - * @return TMDb result array - */ - public function getConfiguration() - { - $config = $this->_makeCall('configuration'); - - if( ! empty($config)) - { - $this->setConfig($config); - } - - return $config; - } - - /** - * Get Image URL - * - * @param string $filepath Filepath to image - * @param const $imagetype Image type: TMDb::IMAGE_BACKDROP, TMDb::IMAGE_POSTER, TMDb::IMAGE_PROFILE - * @param string $size Valid size for the image - * @return string - */ - public function getImageUrl($filepath, $imagetype, $size) - { - $config = $this->getConfig(); - - if(isset($config['images'])) - { - $base_url = $config['images']['base_url']; - $available_sizes = $this->getAvailableImageSizes($imagetype); - - if(in_array($size, $available_sizes)) - { - return $base_url.$size.$filepath; - } - else - { - throw new TMDbException('The size "'.$size.'" is not supported by TMDb'); - } - } - else - { - throw new TMDbException('No configuration available for image URL generation'); - } - } - - /** - * Get available image sizes for a particular image type - * - * @param const $imagetype Image type: TMDb::IMAGE_BACKDROP, TMDb::IMAGE_POSTER, TMDb::IMAGE_PROFILE - * @return array - */ - public function getAvailableImageSizes($imagetype) - { - $config = $this->getConfig(); - - if(isset($config['images'][$imagetype.'_sizes'])) - { - return $config['images'][$imagetype.'_sizes']; - } - else - { - throw new TMDbException('No configuration available to retrieve available image sizes'); - } - } - - /** - * Get ETag to keep track of state of the content - * - * @param string $uri Use an URI to know the version of it. For example: 'movie/550' - * @return string - */ - public function getVersion($uri) - { - $headers = $this->_makeCall($uri, NULL, NULL, TMDb::HEAD); - return isset($headers['Etag']) ? $headers['Etag'] : ''; - } - - /** - * Makes the call to the API - * - * @param string $function API specific function name for in the URL - * @param array $params Unencoded parameters for in the URL - * @param string $session_id Session_id for authentication to the API for specific API methods - * @param const $method TMDb::GET or TMDb:POST (default TMDb::GET) - * @return TMDb result array - */ - private function _makeCall($function, $params = NULL, $session_id = NULL, $method = TMDb::GET) - { - $params = ( ! is_array($params)) ? array() : $params; - $auth_array = array('api_key' => $this->_apikey); - - if($session_id !== NULL) - { - $auth_array['session_id'] = $session_id; - } - - $url = $this->_apischeme.TMDb::API_URL.'/'.TMDb::API_VERSION.'/'.$function.'?'.http_build_query($auth_array, '', '&'); - - if($method === TMDb::GET) - { - if(isset($params['language']) AND $params['language'] === FALSE) - { - unset($params['language']); - } - - if(isset($params['include_adult'])) - { - $params['include_adult'] = ($params['include_adult'] ? 'true' : 'false'); - } - - $url .= ( ! empty($params)) ? '&'.http_build_query($params, '', '&') : ''; - } - - $results = '{}'; - - if (extension_loaded('curl')) - { - $headers = array( - 'Accept: application/json', - ); - - $ch = curl_init(); - - if($method == TMDB::POST) - { - $json_string = json_encode($params); - curl_setopt($ch,CURLOPT_POST, 1); - curl_setopt($ch,CURLOPT_POSTFIELDS, $json_string); - $headers[] = 'Content-Type: application/json'; - $headers[] = 'Content-Length: '.strlen($json_string); - } - elseif($method == TMDb::HEAD) - { - curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD'); - curl_setopt($ch, CURLOPT_NOBODY, 1); - } - - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); - curl_setopt($ch, CURLOPT_HEADER, 1); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - - $this->incRequests(); - curl_setopt_array($ch, Utility::curlSslContextOptions()); - $response = curl_exec($ch); - - $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); - $header = substr($response, 0, $header_size); - $body = substr($response, $header_size); - - $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); - $error_number = curl_errno($ch); - $error_message = curl_error($ch); - - // If temp banned, you need to wait for 10 sec - if($http_status == 503 or $http_status == 0) - { - if ( $this->_retries < 3 ) - { - $this->_retries += 1; - echo "\nTMDB limits exceeded, sleeping for 10 seconds."; - usleep( 10 *1000*1000 ); - return $this->_makeCall($function, $params, $session_id, $method); - } - } - $this->_retries = 0; - - if($error_number > 0) - { - throw new TMDbException('Method failed: '.$function.' - HTTP Status '.$http_status.' Curl Errno '.$error_number.' Curl Error '.$error_message); - } - - curl_close($ch); - } - else - { - throw new TMDbException('CURL-extension not loaded'); - } - - $results = json_decode($body, TRUE); - - if(strpos($function, 'authentication/token/new') !== FALSE) - { - $parsed_headers = $this->_http_parse_headers($header); - $results['Authentication-Callback'] = $parsed_headers['Authentication-Callback']; - } - - if($results !== NULL) - { - return $results; - } - elseif($method == TMDb::HEAD) - { - return $this->_http_parse_headers($header); - } - else - { - throw new TMDbException('Server error on "'.$url.'": '.$response); - } - } - - /** - * Setter for the default language - * - * @param string $lang (ISO 3166-1) - * @return void - */ - public function setLang($lang) - { - $this->_lang = $lang; - } - - /** - * Setter for the TMDB-config - * - * $param array $config - * @return void - */ - public function setConfig($config) - { - $this->_config = $config; - } - - /** - * Getter for the default language - * - * @return string - */ - public function getLang() - { - return $this->_lang; - } - - /** - * Getter for the TMDB-config - * - * @return array - */ - public function getConfig() - { - if(empty($this->_config)) - { - $this->_config = $this->getConfiguration(); - } - - return $this->_config; - } - - /* - * Internal function to parse HTTP headers because of lack of PECL extension installed by many - * - * @param string $header - * @return array - */ - protected function _http_parse_headers($header) - { - $return = array(); - $fields = explode("\r\n", preg_replace('/\x0D\x0A[\x09\x20]+/', ' ', $header)); - foreach($fields as $field) - { - if(preg_match('/([^:]+): (.+)/m', $field, $match)) - { - $match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower(trim($match[1]))); - if( isset($return[$match[1]]) ) - { - $return[$match[1]] = array($return[$match[1]], $match[2]); - } - else - { - $return[$match[1]] = trim($match[2]); - } - } - } - return $return; - } -} - -/** - * TMDb Exception class - * - * @author Jonas De Smet - Glamorous - */ -class TMDbException extends Exception -{ -} \ No newline at end of file diff --git a/libs/Tmdb/Data/Collection.php b/libs/Tmdb/Data/Collection.php index 14b892488..6ef1d1b50 100644 --- a/libs/Tmdb/Data/Collection.php +++ b/libs/Tmdb/Data/Collection.php @@ -22,7 +22,7 @@ class Collection { // Class Variables //------------------------------------------------------------------------------ - private $_data; + public $_data; /** * Construct Class diff --git a/libs/Tmdb/Data/Episode.php b/libs/Tmdb/Data/Episode.php index 4822d9bba..ef89f12d7 100644 --- a/libs/Tmdb/Data/Episode.php +++ b/libs/Tmdb/Data/Episode.php @@ -22,7 +22,7 @@ class Episode{ // Class Variables //------------------------------------------------------------------------------ - private $_data; + public $_data; /** * Construct Class diff --git a/libs/Tmdb/Data/Movie.php b/libs/Tmdb/Data/Movie.php index 499c80367..60041bac5 100644 --- a/libs/Tmdb/Data/Movie.php +++ b/libs/Tmdb/Data/Movie.php @@ -24,7 +24,7 @@ class Movie{ // Class Variables //------------------------------------------------------------------------------ - private $_data; + public $_data; private $_tmdb; /** diff --git a/libs/Tmdb/Data/Person.php b/libs/Tmdb/Data/Person.php index 50ce58d70..60d286ee5 100644 --- a/libs/Tmdb/Data/Person.php +++ b/libs/Tmdb/Data/Person.php @@ -25,7 +25,7 @@ class Person{ // Class Variables //------------------------------------------------------------------------------ - private $_data; + public $_data; /** * Construct Class diff --git a/libs/Tmdb/Data/Role.php b/libs/Tmdb/Data/Role.php index 0f86bb143..a7740d530 100644 --- a/libs/Tmdb/Data/Role.php +++ b/libs/Tmdb/Data/Role.php @@ -22,7 +22,7 @@ class Role{ // Class Variables //------------------------------------------------------------------------------ - private $_data; + public $_data; /** * Construct Class diff --git a/libs/Tmdb/Data/Roles/MovieRole.php b/libs/Tmdb/Data/Roles/MovieRole.php index 268ddd3ee..361d39901 100644 --- a/libs/Tmdb/Data/Roles/MovieRole.php +++ b/libs/Tmdb/Data/Roles/MovieRole.php @@ -18,7 +18,7 @@ class MovieRole extends Role{ // Class Variables //------------------------------------------------------------------------------ - private $_data; + public $_data; /** * Construct Class diff --git a/libs/Tmdb/Data/Roles/TVShowRole.php b/libs/Tmdb/Data/Roles/TVShowRole.php index cbd2c75dc..7e4907853 100644 --- a/libs/Tmdb/Data/Roles/TVShowRole.php +++ b/libs/Tmdb/Data/Roles/TVShowRole.php @@ -19,7 +19,7 @@ class TVShowRole extends Role{ // Class Variables //------------------------------------------------------------------------------ - private $_data; + public $_data; /** * Construct Class diff --git a/libs/Tmdb/Data/Season.php b/libs/Tmdb/Data/Season.php index 660ea9885..7857ffc3e 100644 --- a/libs/Tmdb/Data/Season.php +++ b/libs/Tmdb/Data/Season.php @@ -23,7 +23,7 @@ class Season{ // Class Variables //------------------------------------------------------------------------------ - private $_data; + public $_data; private $_idTVShow; /** @@ -147,7 +147,7 @@ class Season{ * Reload the content of this class.
* Could be used to update or complete the information. * - * @param \libs\Tmdb\TMDB $tmdb An instance of the API handler, necesary to make the API call. + * @param \newznab\libraries\Tmdb $tmdb An instance of the API handler, necesary to make the API call. */ public function reload($tmdb) { $tmdb->getSeason($this->getTVShowID(), $this->getSeasonNumber()); diff --git a/libs/Tmdb/Data/TVShow.php b/libs/Tmdb/Data/TVShow.php index 529c22425..f3dea1b0a 100644 --- a/libs/Tmdb/Data/TVShow.php +++ b/libs/Tmdb/Data/TVShow.php @@ -22,7 +22,7 @@ class TVShow{ // Class Variables //------------------------------------------------------------------------------ - private $_data; + public $_data; /** * Construct Class diff --git a/misc/testing/Tests/test_tmdb_API.php b/misc/testing/Tests/test_tmdb_API.php new file mode 100755 index 000000000..f30b59df9 --- /dev/null +++ b/misc/testing/Tests/test_tmdb_API.php @@ -0,0 +1,48 @@ +client->searchTVShow((string)$argv[1]); + + // Use the first show found (highest match) and get the requested season/episode from $argv + if ($series) { + + print_r($series[0]); + + if ($season > 0 AND $episode > 0) { + $episodeObj = $tmdb->client->getEpisode($series[0]->_data['id'], $season, $episode); + if ($episodeObj) { + print_r($episodeObj); + } + } else if ($season == 0 && $episode == 0) { + $episodeObj = $tmdb->client->getTVShow($series[0]->_data['id']); + if (is_array($episodeObj)) { + foreach ($episodeObj AS $ep) { + print_r($ep); + } + } + } else { + exit($c->error("Invalid episode data returned from TVMaze API.")); + } + + } else { + exit($c->error("Invalid show data returned from TVMaze API.")); + } + +} else { + exit($c->error("Invalid arguments. This script requires a text string (show name) followed by a season and episode number.")); +} diff --git a/newznab/libraries/TmdbAPI.php b/newznab/libraries/TmdbAPI.php index 75df26c76..cfbc5ec24 100644 --- a/newznab/libraries/TmdbAPI.php +++ b/newznab/libraries/TmdbAPI.php @@ -422,17 +422,6 @@ class TmdbAPI { return new Season($this->_call('tv/'. $idTVShow .'/season/' . $numSeason, $appendToResponse)); }*/ - /** - * Get a Episode - * - * @param int $idEpisode The Episode id - * @param string $appendToResponse The extra append of the request, by default all - * @return Episode - */ - /*public function getEpisode($idEpisode, $appendToResponse = 'append_to_response=trailers,images,casts,translations'){ - return new Episode($this->_call('tv/season/episode/' . $idEpisode, $appendToResponse)); - }*/ - /** * Get a Episode * diff --git a/newznab/processing/PostProcess.php b/newznab/processing/PostProcess.php index 1d077cc6d..af86a4877 100755 --- a/newznab/processing/PostProcess.php +++ b/newznab/processing/PostProcess.php @@ -11,6 +11,7 @@ use newznab\Movie; use newznab\Music; use newznab\NameFixer; use newznab\Nfo; +use newznab\processing\tv\TMDB; use newznab\Sharing; //use newznab\processing\tv\TvRage; use newznab\processing\tv\TVDB; @@ -261,6 +262,7 @@ class PostProcess if ($processTV > 0) { (new TVDB(['Echo' => $this->echooutput, 'Settings' => $this->pdo]))->processTVDB($groupID, $guidChar, $processTV); (new TVMaze(['Echo' => $this->echooutput, 'Settings' => $this->pdo]))->processTVMaze($groupID, $guidChar, $processTV); + (new TMDB(['Echo' => $this->echooutput, 'Settings' => $this->pdo]))->processTMDB($groupID, $guidChar, $processTV); //(new TvRage(['Echo' => $this->echooutput, 'Settings' => $this->pdo]))->processTvRage($groupID, $guidChar, $processTV); } } diff --git a/newznab/processing/tv/TMDB.php b/newznab/processing/tv/TMDB.php index ac49837bd..e9c5e1339 100644 --- a/newznab/processing/tv/TMDB.php +++ b/newznab/processing/tv/TMDB.php @@ -69,7 +69,7 @@ class TMDB extends TV if (is_array($release) && $release['name'] != '') { // Find the Video ID if it already exists by checking the title. - $videoId = $this->getByTitle($release['cleanname']); + $videoId = $this->getByTitle($release['cleanname'], parent::TYPE_TV); if ($videoId !== false) { $tmdbid = $this->getSiteByID('tmdb', $videoId); @@ -150,7 +150,7 @@ class TMDB extends TV } } } //Processing failed, set the episode ID to the next processing group - $this->setVideoNotFound(parent::PROCESS_TVRAGE, $row['id']); + $this->setVideoNotFound(parent::PROCESS_TRAKT, $row['id']); } } } @@ -168,7 +168,7 @@ class TMDB extends TV try { //Try for the best match with AKAs embedded - $response = $this->client->singleSearch($cleanName); + $response = $this->client->searchTVShow($cleanName); } catch (\Exception $error) { } @@ -180,7 +180,7 @@ class TMDB extends TV if ($return === false) { try { //Try for the best match via full search (no AKAs can be returned) - $response = $this->client->search($cleanName); + $response = $this->client->searchCollection($cleanName); } catch (\Exception $error) { } if (is_array($response)) { @@ -280,19 +280,14 @@ class TMDB extends TV { $return = $response = false; - if ($airdate !== '') { + if ($videoId > 0) { try { - $response = $this->client->getEpisodesByAirdate($tmdbid, $airdate); - } catch (\Exception $error) { - } - } else if ($videoId > 0) { - try { - $response = $this->client->getEpisodesByShowID($tmdbid); + $response = $this->client->getTVShow($tmdbid); } catch (\Exception $error) { } } else { try { - $response = $this->client->getEpisodeByNumber($tmdbid, $season, $episode); + $response = $this->client->getEpisode($tmdbid, $season, $episode); } catch (\Exception $error) { } } @@ -332,22 +327,22 @@ class TMDB extends TV */ private function formatShowArr($show) { - $this->posterUrl = (string)(isset($show->mediumImage) ? $show->mediumImage : ''); + $this->posterUrl = (string)(isset($show->_data['poster_path']) ? $show->_data['poster_path'] : ''); return [ - 'tmdbid' => (int)$show->id, + 'tmdbid' => (int)$show->_data['id'], 'column' => 'tmdb', - 'siteid' => (int)$show->id, - 'title' => (string)$show->name, - 'summary' => (string)$show->summary, - 'started' => (string)$show->premiered, - 'publisher' => (string)$show->network, - 'country' => (string)$show->country, + 'siteid' => (int)$show->_data['id'], + 'title' => (string)$show->_data['name'], + 'summary' => (string)$show->_data['overview'], + 'started' => (string)$show->_data['first_air_date'], + 'publisher' => (string)$show->_data['networks']->name, + 'country' => (string)$show->_data['origin_country'], 'source' => (int)parent::SOURCE_TMDB, 'imdbid' => 0, - 'tvdbid' => (int)(isset($show->externalIDs['thetvdb']) ? $show->externalIDs['thetvdb'] : 0), + 'tvdbid' => 0, 'traktid' => 0, - 'tvrageid' => (int)(isset($show->externalIDs['tvrage']) ? $show->externalIDs['tvrage'] : 0), + 'tvrageid' => 0, 'tvmazeid' => 0 ]; } @@ -363,12 +358,12 @@ class TMDB extends TV private function formatEpisodeArr($episode) { return [ - 'title' => (string)$episode->name, - 'series' => (int)$episode->season, - 'episode' => (int)$episode->number, - 'se_complete' => (string)'S' . sprintf('%02d', $episode->season) . 'E' . sprintf('%02d', $episode->number), - 'firstaired' => (string)$episode->airdate, - 'summary' => (string)$episode->summary + 'title' => (string)$episode->_data['name'], + 'series' => (int)$episode->_data['season_number'], + 'episode' => (int)$episode->_data['episode_number'], + 'se_complete' => (string)'S' . sprintf('%02d', $episode->_data['season_number']) . 'E' . sprintf('%02d', $episode->_data['episode_number']), + 'firstaired' => (string)$episode->_data['air_date'], + 'summary' => (string)$episode->_data['overview'] ]; } } diff --git a/newznab/processing/tv/TV.php b/newznab/processing/tv/TV.php index da405c868..70aaf79b3 100644 --- a/newznab/processing/tv/TV.php +++ b/newznab/processing/tv/TV.php @@ -13,9 +13,9 @@ abstract class TV extends Videos const SOURCE_NONE = 0; // No Scrape source const SOURCE_TVDB = 1; // Scrape source was TVDB const SOURCE_TVMAZE = 2; // Scrape source was TVMAZE - const SOURCE_TRAKT = 3; // Scrape source was TraktTV - const SOURCE_IMDB = 4; // Scrape source was IMDB - const SOURCE_TMDB = 5; // Scrape source was TMDB + const SOURCE_TMDB = 3; // Scrape source was TraktTV + const SOURCE_TRAKT = 4; // Scrape source was IMDB + const SOURCE_IMDB = 5; // Scrape source was TMDB const SOURCE_TVRAGE = 6; // Scrape source was TvRage // Anime Sources @@ -24,9 +24,9 @@ abstract class TV extends Videos // Processing signifiers const PROCESS_TVDB = 0; // Process TVDB First const PROCESS_TVMAZE = -1; // Process TVMaze Second - const PROCESS_TRAKT = -2; // Process Trakt Third - const PROCESS_IMDB = -3; // Process IMDB Fourth - const PROCESS_TMDB = -4; // Process TMDB Fifth + const PROCESS_TMDB = -2; // Process Trakt Third + const PROCESS_TRAKT = -3; // Process IMDB Fourth + const PROCESS_IMDB = -4; // Process TMDB Fifth const PROCESS_TVRAGE = -5; // Process TvRage Sixth const NO_MATCH_FOUND = -6; // Failed All Methods diff --git a/newznab/processing/tv/TVMaze.php b/newznab/processing/tv/TVMaze.php index f82a51f02..664b8a816 100644 --- a/newznab/processing/tv/TVMaze.php +++ b/newznab/processing/tv/TVMaze.php @@ -177,7 +177,7 @@ class TVMaze extends TV } } } //Processing failed, set the episode ID to the next processing group - $this->setVideoNotFound(parent::PROCESS_TRAKT, $row['id']); + $this->setVideoNotFound(parent::PROCESS_TMDB, $row['id']); } } }