UNPKG

tmdb-js-wrapper

Version:

A JavaScript wrapper package for The Movie Database API.

457 lines (399 loc) 14.2 kB
/**@module tmdb-js/sections/types */ // TMDb utilities const tmdbUtils = require('../../../utils/tmdb_utils'); const sections = tmdbUtils.sections; // Sections const Section = require('../section').Section; /** * A class that represents the general settings of the discover section in TMDb. */ class DiscoverSettings { _parameters = {}; /** * Gets all of the parameters in this settings object. * See the TMDb API documentation for a comprehensive list of parameters. * @returns {*} All parameters in these settings. */ getAllParameters() { let parameters = {} Object.assign(parameters, this._parameters); return parameters; } /** * Sets the value of the sort_by parameter. * @param {string} sortBy The parameter value (see tmdb_utils.sortingTypes for valid values). */ setSortBy(sortBy) { this._parameters["sort_by"] = sortBy; } /** * Sets the value of the page parameter. * @param {Number} page The parameter value. */ setPage(page) { this._parameters["page"] = page; } /** * Sets the value of the vote_count.gte ("gte" stands for "greater than or equal to") parameter. * @param {Number} limit The parameter value. */ setVoteCountGte(limit) { this._parameters["vote_count.gte"] = limit; } /** * Sets the value of the vote_average.gte ("gte" stands for "greater than or equal to") parameter. * @param {Number} limit The parameter value. */ setVoteAverageGte(limit) { this._parameters["vote_average.gte"] = limit; } /** * Sets the value of the with_genres parameter based on the passed genre IDs. * This will determine which genres to include in the discover results. * @param {...string} genreIds The genre IDs. */ setWithGenres(...genreIds) { this._setWithParameter("with_genres", genreIds); } /** * Sets the value of the without_genres parameter based on the passed genre IDs. * This will determine which genres not to include in the discover results. * @param {...string} genreIds The genre IDs. */ setWithoutGenres(...genreIds) { this._setWithParameter("without_genres", genreIds); } /** * Sets the value of the with_runtime.gte parameter ("gte" stands for "greater than or equal to"). * @param {Number} limit The parameter value. */ setWithRuntimeGte(limit) { this._parameters["with_runtime.gte"] = limit; } /** * Sets the value of the with_runtime.lte parameter ("lte" stands for "less than or equal to"). * @param {Number} limit The parameter value. */ setWithRuntimeLte(limit) { this._parameters["with_runtime.lte"] = limit; } /** * Sets the value of the with_keywords based on the passed keywords. * This will determine which keywords to include in the discover results. * @param {...string} keywords The keywords. */ setWithKeywords(...keywords) { this._setWithParameter("with_keywords", keywords); } /** * Sets the value of the without_keywords based on the passed keywords. * This will determine which keywords not to include in the discover results. * @param {...string} keywords The keywords. */ setWithoutKeywords(...keywords) { this._setWithParameter("without_keywords", keywords); } /** * Sets the value of the with_original_language parameter. * @param {string} withOriginalLanguage */ setWithOriginalLanguage(withOriginalLanguage) { this._parameters["with_original_language"] = withOriginalLanguage; } /** * Sets the value of the watch_region parameter. * @param {string} watchRegion The parameter value. */ setWatchRegion(watchRegion) { this._parameters["watch_region"] = watchRegion; } /** * Sets the value of the with_companies based on the passed company IDs. * This will determine which companies to include in the discover results. * @param {...string} companyIds The company IDs. */ setWithCompanies(...companyIds) { this._setWithParameter("with_companies", companyIds); } /** * Sets the value of the with_watch_providers based on the passed provider IDs. * This will determine which watch providers to include in the discover results. * @param {...string} providerIds The watch provider IDs. */ setWithWatchProviders(...providerIds) { this._setWithParameter("with_watch_providers", providerIds); } /** * Sets the value of the with_watch_monetization_types parameter. * @param {string} watchMonetizationTypes The parameter value. */ setWithWatchMonetizationTypes(watchMonetizationTypes) { this._parameters["with_watch_monetization_types"] = watchMonetizationTypes; } _setWithParameter(withType, ...elements) { this._parameters[withType] = elements.join(","); } } /** * A class that represents the discover settings for movies. */ exports.DiscoverMovieSettings = class extends DiscoverSettings { /** * Sets the value of the region parameter. * @param {string} region The parameter value. */ setRegion(region) { this._parameters["region"] = region; } /** * Sets the value of the certification_country parameter. * @param {string} country The parameter value. */ setCertificationCountry(country) { this._parameters["certification_country"] = country; } /** * Sets the value of the certification parameter. * @param {string} certification The parameter value. */ setCertification(certification) { this._parameters["certification"] = certification; } /** * Sets the value of the certification.lte parameter ("lte" stands for "less than or equal to"). * @param {string} limit The parameter value. */ setCertificationLte(limit) { this._parameters["certification.lte"] = limit; } /** * Sets the value of the certification.gte parameter ("gte" stands for "greater than or equal to"). * @param {string} limit The parameter value. */ setCertificationGte(limit) { this._parameters["certification.gte"] = limit; } /** * Sets the value of the include_adult parameter. * @param {boolean} includeAdult The parameter value. */ setIncludeAdult(includeAdult) { this._parameters["include_adult"] = includeAdult; } /** * Sets the value of the include_video parameter. * @param {boolean} includeVideo The parameter value. */ setIncludeVideo(includeVideo) { this._parameters["include_video"] = includeVideo; } /** * Sets the value of the primary_release_year parameter. * @param {Number} year The parameter value. */ setPrimaryReleaseYear(year) { this._parameters["primary_release_year"] = year; } /** * Sets the value of the primary_release_year.lte parameter * ("lte" stands for "less than or equal to"). * @param {Number} limit The parameter value. */ setPrimaryReleaseYearLte(limit) { this._parameters["primary_release_year.lte"] = limit; } /** * Sets the value of the primary_release_year.gte parameter * ("gte" stands for "greater than or equal to"). * @param {Number} limit The parameter value. */ setPrimaryReleaseYearGte(limit) { this._parameters["primary_release_year.gte"] = limit; } /** * Sets the value of the release_date.gte parameter * ("gte" stands for "greater than or equal to"). * @param {Number} limit The parameter value. */ setReleaseDateGte(limit) { this._parameters["release_date.gte"] = limit; } /** * Sets the value of the release_date.lte parameter * ("lte" stands for "less than or equal to"). * @param {Number} limit The parameter value. */ setReleaseDateLte(limit) { this._parameters["release_date.lte"] = limit; } /** * Sets the value of the with_release_type parameter. * @param {string} withReleaseType The parameter value. */ setWithReleaseType(withReleaseType) { this._parameters["with_release_type"] = withReleaseType; } /** * Sets the value of the year parameter. * @param {Number} year The parameter value. */ setYear(year) { this._parameters["year"] = year; } /** * Sets the value of the vote_count.lte parameter * ("lte" stands for "less than or equal to"). * @param {Number} limit The parameter value. */ setVoteCountLte(limit) { this._parameters["vote_count.lte"] = limit; } /** * Sets the value of the vote_average.lte parameter * ("lte" stands for "less than or equal to"). * @param {Number} limit The parameter value. */ setVoteAverageLte(limit) { this._parameters["vote_average.lte"] = limit; } /** * Sets the value of the with_cast parameter based on the passed person IDs. * This will determine which cast members to include in the discover results. * @param {...string} personIds The person IDs. */ setWithCast(...personIds) { this._setWithParameter("with_cast", personIds); } /** * Sets the value of the with_crew parameter based on the passed person IDs. * This will determine which crew members to include in the discover results. * @param {...string} personIds The person IDs. */ setWithCrew(...personIds) { this._setWithParameter("with_crew", personIds); } /** * Sets the value of the with_people parameter based on the passed person IDs. * This will determine which people to include in the discover results. * @param {...string} personIds The person IDs. */ setWithPeople(...personIds) { this._setWithParameter("with_people", personIds); } } /** * A class that represents the discover settings for TV shows. */ exports.DiscoverTvShowSettings = class extends DiscoverSettings { /** * Sets the value of the air_date.gte parameter * ("gte" stands for "greater than or equal to"). * @param {string} limit The parameter value. */ setAirDateGte(limit) { this._parameters["air_date.gte"] = limit; } /** * Sets the value of the air_date.lte parameter * ("lte" stands for "less than or equal to"). * @param {string} limit The parameter value. */ setAirDateLte(limit) { this._parameters["air_date.lte"] = limit; } /** * Sets the value of the first_air_date.gte parameter * ("gte" stands for "greater than or equal to"). * @param {string} limit The parameter value. */ setFirstAirDateGte(limit) { this._parameters["first_air_date.gte"] = limit; } /** * Sets the value of the first_air_date.lte parameter * ("lte" stands for "less than or equal to"). * @param {string} limit The parameter value. */ setFirstAirDateLte(limit) { this._parameters["first_air_date.lte"] = limit; } /** * Sets the value of the first_air_date_year parameter * @param {Number} year The parameter value. */ setFirstAirDateYear(year) { this._parameters["first_air_date_year"] = year; } /** * Sets the value of the timezone parameter. * @param {string} timezone The parameter value. */ setTimezone(timezone) { this._parameters["timezone"] = timezone; } /** * Sets the value of the with_networks parameter based on the passed network IDs. * This will determine which networks to include in the discover results. * @param {...string} networkIds The network IDs. */ setWithNetworks(...networkIds) { this._setWithParameter("with_networks", networkIds); } /** * Sets the value of the include_null_first_air_dates parameter. * @param {boolean} include The parameter value. */ setIncludeNullFirstAirDates(include) { this._parameters["include_null_first_air_dates"] = include; } /** * Sets the value of the screened_theatrically parameter. * @param {boolean} screenedTheatrically The parameter value. */ setScreenedTheatrically(screenedTheatrically) { this._parameters["screened_theatrically"] = screenedTheatrically; } } /** * A class that represents the discover section of TMDb. */ exports.DiscoverSection = class extends Section { /** * Initializes this object. * @param {string} apiKey The TMDb API key. * @param {string} language The language of queries, the default is "en-US". */ constructor(apiKey, language = "en-US") { super(sections.DISCOVER, undefined, apiKey, language); } /** * Discovers movie data based on the passed settings. * @param {exports.DiscoverMovieSettings} settings The discover settings. * @returns {Promise<*>} A Promise of discovered movie data. */ async discoverMoviesAsync(settings) { let urlParameters = this.__buildUrlParameters(settings); return await this.createChild(sections.MOVIE) .getQueryResultAsync(urlParameters); } /** * Discovers TV show data based on the passed settings. * @param {exports.DiscoverTvShowSettings} settings The discover settings. * @returns {Promise<*>} A Promise of discovered TV show data. */ async discoverTvShowsAsync(settings) { let urlParameters = this.__buildUrlParameters(settings); return await this.createChild(sections.TV_SHOW) .getQueryResultAsync(urlParameters); } __buildUrlParameters(discoverSettings) { if (!discoverSettings) { discoverSettings = new DiscoverSettings(); } return { "api_key": this._apiKey, "language": this._language, ...discoverSettings.getAllParameters() }; } }