diff --git a/examples/movies/api/recommendations.php b/examples/movies/api/recommendations.php new file mode 100644 index 00000000..8275f626 --- /dev/null +++ b/examples/movies/api/recommendations.php @@ -0,0 +1,21 @@ + + * @copyright (c) 2018, Eugenia Schneider + * @version 0.0.1 + */ +require_once '../../../vendor/autoload.php'; +require_once '../../../apikey.php'; + +$token = new \Tmdb\ApiToken(TMDB_API_KEY); +$client = new \Tmdb\Client($token); + +$recommendedMovies = $client->getMoviesApi()->getRecommendations(87421); + +var_dump($recommendedMovies); diff --git a/examples/movies/model/recommendations.php b/examples/movies/model/recommendations.php new file mode 100644 index 00000000..3c626439 --- /dev/null +++ b/examples/movies/model/recommendations.php @@ -0,0 +1,22 @@ + + * @copyright (c) 2013, Michael Roterman + * @version 0.0.1 + */ +require_once '../../../vendor/autoload.php'; +require_once '../../../apikey.php'; + +$token = new \Tmdb\ApiToken(TMDB_API_KEY); +$client = new \Tmdb\Client($token); + +$repository = new \Tmdb\Repository\MovieRepository($client); +$collection = $repository->getRecommendations(87421); + +var_dump($collection); diff --git a/lib/Tmdb/Api/Movies.php b/lib/Tmdb/Api/Movies.php index 47e1b1df..5c3eccb4 100644 --- a/lib/Tmdb/Api/Movies.php +++ b/lib/Tmdb/Api/Movies.php @@ -137,6 +137,19 @@ public function getSimilar($movie_id, array $parameters = [], array $headers = [ return $this->get('movie/' . $movie_id . '/similar', $parameters, $headers); } + /** + * Get the recommended movies for a specific movie id. + * + * @param $movie_id + * @param array $parameters + * @param array $headers + * @return mixed + */ + public function getRecommendations($movie_id, array $parameters = [], array $headers = []) + { + return $this->get('movie/' . $movie_id . '/recommendations', $parameters, $headers); + } + /** * Get the reviews for a particular movie id. * diff --git a/lib/Tmdb/Api/Tv.php b/lib/Tmdb/Api/Tv.php index 7a46ecbe..50d1c748 100644 --- a/lib/Tmdb/Api/Tv.php +++ b/lib/Tmdb/Api/Tv.php @@ -230,6 +230,19 @@ public function getSimilar($tvshow_id, array $parameters = [], array $headers = return $this->get('tv/' . $tvshow_id . '/similar', $parameters, $headers); } + /** + * Get the recommended TV shows for a specific tv id. + * + * @param $tvshow_id + * @param array $parameters + * @param array $headers + * @return mixed + */ + public function getRecommendations($tvshow_id, array $parameters = [], array $headers = []) + { + return $this->get('tv/' . $tvshow_id . '/recommendations', $parameters, $headers); + } + /** * This method lets users get the status of whether or not the TV show has been rated * or added to their favourite or watch lists. diff --git a/lib/Tmdb/Factory/TvFactory.php b/lib/Tmdb/Factory/TvFactory.php index 00bf2ee0..17ffb92f 100644 --- a/lib/Tmdb/Factory/TvFactory.php +++ b/lib/Tmdb/Factory/TvFactory.php @@ -226,6 +226,10 @@ public function create(array $data = []) $tvShow->setSimilar($this->createResultCollection($data['similar'])); } + if (array_key_exists('recommendations', $data) && $data['recommendations'] !== null) { + $tvShow->setRecommendations($this->createResultCollection($data['recommendations'])); + } + if (array_key_exists('languages', $data) && $data['languages'] !== null) { $collection = new GenericCollection(); diff --git a/lib/Tmdb/Model/Movie.php b/lib/Tmdb/Model/Movie.php index 9c934283..f08aa3cb 100644 --- a/lib/Tmdb/Model/Movie.php +++ b/lib/Tmdb/Model/Movie.php @@ -211,6 +211,11 @@ class Movie extends AbstractModel */ protected $similar; + /** + * @var GenericCollection + */ + protected $recommendations; + /** * @var GenericCollection */ @@ -276,6 +281,7 @@ public function __construct() $this->releases = new GenericCollection(); $this->release_dates = new GenericCollection(); $this->similar = new GenericCollection(); + $this->recommendations = new GenericCollection(); $this->translations = new GenericCollection(); $this->videos = new Videos(); } @@ -906,6 +912,17 @@ public function setSimilar($similar) return $this; } + /** + * @param GenericCollection $recommendations + * @return $this + */ + public function setRecommendations($recommendations) + { + $this->recommendations = $recommendations; + + return $this; + } + /** * @return GenericCollection|Movie[] */ @@ -914,6 +931,14 @@ public function getSimilar() return $this->similar; } + /** + * @return GenericCollection|Movie[] + */ + public function getRecommendations() + { + return $this->recommendations; + } + /** * @return GenericCollection|Movie[] * @deprecated Use getSimilar instead diff --git a/lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php b/lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php index e3d302bc..24dad2d9 100644 --- a/lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php +++ b/lib/Tmdb/Model/Movie/QueryParameter/AppendToResponse.php @@ -32,6 +32,7 @@ final class AppendToResponse extends BaseAppendToResponse const RELEASE_DATES = 'release_dates'; const TRANSLATIONS = 'translations'; const SIMILAR = 'similar'; + const RECOMMENDATIONS = 'recommendations'; const REVIEWS = 'reviews'; const LISTS = 'lists'; const CHANGES = 'changes'; diff --git a/lib/Tmdb/Model/Tv.php b/lib/Tmdb/Model/Tv.php index e7e604e3..dca308ad 100644 --- a/lib/Tmdb/Model/Tv.php +++ b/lib/Tmdb/Model/Tv.php @@ -210,6 +210,11 @@ class Tv extends AbstractModel */ protected $similar; + /** + * @var GenericCollection + */ + protected $recommendations; + /** * @var GenericCollection */ @@ -275,6 +280,7 @@ public function __construct() $this->changes = new GenericCollection(); $this->keywords = new GenericCollection(); $this->similar = new GenericCollection(); + $this->recommendations = new GenericCollection(); $this->contentRatings = new GenericCollection(); $this->alternativeTitles = new GenericCollection(); } @@ -944,6 +950,17 @@ public function setSimilar($similar) return $this; } + /** + * @param GenericCollection $recommendations + * @return $this + */ + public function setRecommendations($recommendations) + { + $this->recommendations = $recommendations; + + return $this; + } + /** * @return GenericCollection */ @@ -952,6 +969,14 @@ public function getSimilar() return $this->similar; } + /** + * @return GenericCollection + */ + public function getRecommendations() + { + return $this->recommendations; + } + /** * @return GenericCollection */ diff --git a/lib/Tmdb/Model/Tv/QueryParameter/AppendToResponse.php b/lib/Tmdb/Model/Tv/QueryParameter/AppendToResponse.php index ba9c6f9c..7f00bc50 100644 --- a/lib/Tmdb/Model/Tv/QueryParameter/AppendToResponse.php +++ b/lib/Tmdb/Model/Tv/QueryParameter/AppendToResponse.php @@ -28,6 +28,7 @@ class AppendToResponse extends BaseAppendToResponse const CHANGES = 'changes'; const KEYWORDS = 'keywords'; const SIMILAR = 'similar'; + const RECOMMENDATIONS = 'recommendations'; const CONTENT_RATINGS = 'content_ratings'; const ALTERNATIVE_TITLES = 'alternative_titles'; } diff --git a/lib/Tmdb/Repository/MovieRepository.php b/lib/Tmdb/Repository/MovieRepository.php index 1a39d20a..1b299804 100644 --- a/lib/Tmdb/Repository/MovieRepository.php +++ b/lib/Tmdb/Repository/MovieRepository.php @@ -69,6 +69,7 @@ public function load($id, array $parameters = [], array $headers = []) AppendToResponse::RELEASE_DATES, AppendToResponse::REVIEWS, AppendToResponse::SIMILAR, + AppendToResponse::RECOMMENDATIONS, AppendToResponse::TRANSLATIONS, AppendToResponse::VIDEOS, ]) @@ -207,6 +208,22 @@ public function getSimilar($id, array $parameters = [], array $headers = []) return $movie->getSimilar(); } + /** + * Get the recommended movies for a specific movie id. + * + * @param $id + * @param $parameters + * @param $headers + * @return null|\Tmdb\Model\AbstractModel + */ + public function getRecommendations($id, array $parameters = [], array $headers = []) + { + $data = $this->getApi()->getRecommendations($id, $this->parseQueryParameters($parameters), $headers); + $movie = $this->getFactory()->create(['recommendations' => $data]); + + return $movie->getRecommendations(); + } + /** * Get the reviews for a particular movie id. * diff --git a/lib/Tmdb/Repository/TvRepository.php b/lib/Tmdb/Repository/TvRepository.php index 16ff7019..77fc273f 100644 --- a/lib/Tmdb/Repository/TvRepository.php +++ b/lib/Tmdb/Repository/TvRepository.php @@ -50,6 +50,7 @@ public function load($id, array $parameters = [], array $headers = []) AppendToResponse::IMAGES, AppendToResponse::TRANSLATIONS, AppendToResponse::SIMILAR, + AppendToResponse::RECOMMENDATIONS, AppendToResponse::KEYWORDS, AppendToResponse::CHANGES, AppendToResponse::CONTENT_RATINGS, diff --git a/test/Tmdb/Tests/Api/MoviesTest.php b/test/Tmdb/Tests/Api/MoviesTest.php index ea36bfae..733f8fa1 100644 --- a/test/Tmdb/Tests/Api/MoviesTest.php +++ b/test/Tmdb/Tests/Api/MoviesTest.php @@ -142,6 +142,20 @@ public function shouldGetSimilarMovies() $api->getSimilar(self::MOVIE_ID); } + /** + * @test + */ + public function shouldGetRecommendedMovies() + { + $api = $this->getApiWithMockedHttpAdapter(); + + $this->getAdapter()->expects($this->once()) + ->method('get') + ->with($this->getRequest('https://api.themoviedb.org/3/movie/' . self::MOVIE_ID . '/recommendations')); + + $api->getRecommendations(self::MOVIE_ID); + } + /** * @test */ diff --git a/test/Tmdb/Tests/Api/TvTest.php b/test/Tmdb/Tests/Api/TvTest.php index fc0411ab..0414ba8d 100644 --- a/test/Tmdb/Tests/Api/TvTest.php +++ b/test/Tmdb/Tests/Api/TvTest.php @@ -202,6 +202,21 @@ public function shouldGetSimilar() $api->getSimilar(self::TV_ID); } + /** + * @test + */ + public function shouldGetRecommended() + { + $api = $this->getApiWithMockedHttpAdapter(); + + $this->getAdapter()->expects($this->once()) + ->method('get') + ->with($this->getRequest('https://api.themoviedb.org/3/tv/' . self::TV_ID . '/recommendations')) + ; + + $api->getRecommendations(self::TV_ID); + } + /** * @test */ diff --git a/test/Tmdb/Tests/Factory/MovieFactoryTest.php b/test/Tmdb/Tests/Factory/MovieFactoryTest.php index ca9db2dc..f6b0274e 100644 --- a/test/Tmdb/Tests/Factory/MovieFactoryTest.php +++ b/test/Tmdb/Tests/Factory/MovieFactoryTest.php @@ -107,6 +107,7 @@ public function shouldBeFunctional() $this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getReleases()); $this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getReleaseDates()); $this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getSimilar()); + $this->assertInstanceOf('Tmdb\Model\Common\GenericCollection', $this->movie->getRecommendations()); $this->assertInstanceOf('Tmdb\Model\Collection\Videos', $this->movie->getVideos()); /** @var Release[] $releases */ diff --git a/test/Tmdb/Tests/Model/MovieTest.php b/test/Tmdb/Tests/Model/MovieTest.php index f01929cd..80524425 100644 --- a/test/Tmdb/Tests/Model/MovieTest.php +++ b/test/Tmdb/Tests/Model/MovieTest.php @@ -42,6 +42,7 @@ public function shouldConstructMovie() 'getReleases' => 'Tmdb\Model\Common\GenericCollection', 'getReleaseDates' => 'Tmdb\Model\Common\GenericCollection', 'getSimilar' => 'Tmdb\Model\Common\GenericCollection', + 'getRecommendations' => 'Tmdb\Model\Common\GenericCollection', 'getTranslations' => 'Tmdb\Model\Common\GenericCollection', 'getVideos' => 'Tmdb\Model\Collection\Videos', ] diff --git a/test/Tmdb/Tests/Repository/MovieRepositoryTest.php b/test/Tmdb/Tests/Repository/MovieRepositoryTest.php index 3120c02a..2881d9e7 100644 --- a/test/Tmdb/Tests/Repository/MovieRepositoryTest.php +++ b/test/Tmdb/Tests/Repository/MovieRepositoryTest.php @@ -29,7 +29,7 @@ public function shouldLoadMovie() ->method('get') ->with($this->getRequest( 'https://api.themoviedb.org/3/movie/' . self::MOVIE_ID, - ['append_to_response' => 'alternative_titles,changes,credits,images,keywords,lists,release_dates,reviews,similar,translations,videos'] + ['append_to_response' => 'alternative_titles,changes,credits,images,keywords,lists,release_dates,reviews,similar,recommendations,translations,videos'] )) ; @@ -140,6 +140,21 @@ public function shouldGetSimilar() $repository->getSimilar(self::MOVIE_ID); } + /** + * @test + */ + public function shouldGetRecommended() + { + $repository = $this->getRepositoryWithMockedHttpAdapter(); + + $this->getAdapter()->expects($this->once()) + ->method('get') + ->with($this->getRequest('https://api.themoviedb.org/3/movie/' . self::MOVIE_ID . '/recommendations')) + ; + + $repository->getRecommendations(self::MOVIE_ID); + } + /** * @test */ diff --git a/test/Tmdb/Tests/Repository/TvRepositoryTest.php b/test/Tmdb/Tests/Repository/TvRepositoryTest.php index 66305c0a..3faac6eb 100644 --- a/test/Tmdb/Tests/Repository/TvRepositoryTest.php +++ b/test/Tmdb/Tests/Repository/TvRepositoryTest.php @@ -27,7 +27,7 @@ public function shouldLoadTv() ->method('get') ->with($this->getRequest( 'https://api.themoviedb.org/3/tv/' . self::TV_ID, - ['append_to_response' => 'credits,external_ids,images,translations,similar,keywords,changes,content_ratings,alternative_titles,videos'] + ['append_to_response' => 'credits,external_ids,images,translations,similar,recommendations,keywords,changes,content_ratings,alternative_titles,videos'] )) ;