tmdb-interface
Version:
This is a Node.js wrapper of TMDB API. We apply chain-style design on it, which make it more semantic and functional.
366 lines (362 loc) • 9.35 kB
JavaScript
/**
* Episodes
*/
const episodes = (self) => {
return (id = '') => {
return (season_number = '') => {
return (episode_number = '') => {
return {
detail() {
return {
end() {
self.url = self.api(`/tv/${id}/season/${season_number}/episode/${episode_number}`)
self.type = 'episodes_detail'
return self
}
}
},
credit() {
return {
end() {
self.url = self.api(`/tv/${id}/season/${season_number}/episode/${episode_number}/credits`)
self.type = 'episodes_credit'
return self
}
}
},
externalIDs() {
return {
end() {
self.url = self.api(`/tv/${id}/season/${season_number}/episode/${episode_number}/external_ids`)
self.type = 'episodes_external_ids'
return self
}
}
},
images() {
return {
end() {
self.url = self.api(`/tv/${id}/season/${season_number}/episode/${episode_number}/images`)
self.type = 'episodes_images'
return self
}
}
},
videos() {
return {
end() {
self.url = self.api(`/tv/${id}/season/${season_number}/episode/${episode_number}/videos`)
self.type = 'episodes_videos'
return self
}
}
}
}
}
}
}
}
/**
* Season
*/
const season = (self) => {
return (id) => {
return (season_number = '') => {
return {
detail() {
return {
end() {
self.url = self.api(`/tv/${id}/season/${season_number}`, { append_to_response: 'image' })
self.type = 'season_detail'
return self
}
}
},
credit() {
return {
end() {
self.url = self.api(`/tv/${id}/season/${season_number}/aggregate_credits`)
self.type = 'season_credit'
return self
}
}
},
externalIDs() {
return {
end() {
self.url = self.api(`/tv/${id}/season/${season_number}/external_ids`)
self.type = 'season_external_ids'
return self
}
}
},
images() {
return {
end() {
self.url = self.api(`/tv/${id}/season/${season_number}/images`)
self.type = 'season_images'
return self
}
}
},
videos() {
return {
end() {
self.url = self.api(`/tv/${id}/season/${season_number}/videos`)
self.type = 'season_videos'
return self
}
}
},
episodes(episode_number = "") {
return episodes(self)(id)(season_number)(episode_number)
}
}
}
}
}
/**
* TV Series
*/
const tvseries = (self) => {
return (id = "") => {
return {
trending() {
const args = { time: 'day' }
return {
time(time = 'day') {
args.time = time
return this
},
end() {
self.url = self.api(`/trending/tv/${args.time}`)
self.type = 'trending'
return self
}
}
},
discover() {
const args = { options: {} }
return {
parameter(options = {}) {
args.options = options
return this
},
page(page = 1) {
args.options['page'] = page
return this
},
end() {
self.url = self.api(`/discover/tv`, args.options)
self.type = 'discover'
return self
}
}
},
search() {
const args = { keyword: '', page: 1, adult: true, region: 'US' }
return {
keyword(keyword = '') {
args.keyword = keyword
return this
},
adult(adult = true) {
args.adult = adult
return this
},
region(region = 'US') {
args.region = region
return this
},
page(page = 1) {
args.page = page
return this
},
end() {
self.url = self.api(`/search/tv`, {
page: args.page,
include_adult: args.adult,
region: args.region,
query: args.keyword
})
self.type = 'search'
return self
}
}
},
detail() {
return {
end() {
self.url = self.api(`/tv/${id}?append_to_response=videos,images`)
self.type = 'detail'
return self
}
}
},
credit() {
return {
end() {
self.url = self.api(`/tv/${id}/aggregate_credits`)
self.type = 'credit'
return self
}
}
},
rating() {
return {
end() {
self.url = self.api(`/tv/${id}/content_ratings`)
self.type = 'tv_rating'
return self
}
}
},
externalIDs() {
return {
end() {
self.url = self.api(`/tv/${id}/external_ids`)
self.type = 'external_ids'
return self
}
}
},
images() {
return {
end() {
self.url = self.api(`/tv/${id}/images`)
self.type = 'images'
return self
}
}
},
keywords() {
return {
end() {
self.url = self.api(`/tv/${id}/keywords`)
self.type = 'keywords'
return self
}
}
},
recommendations() {
const args = { page: 1 }
return {
page(page = 1) {
args.page = page
return this
},
end() {
self.url = self.api(`/tv/${id}/recommendations`, { page: args.page })
self.type = 'recommendations'
return self
}
}
},
review() {
const args = { page: 1 }
return {
page(page = 1) {
args.page = page
return this
},
end() {
self.url = self.api(`/tv/${id}/reviews`, { page: args.page })
self.type = 'review'
return self
}
}
},
screenedTheatrically() {
return {
end() {
self.url = self.api(`/tv/${id}/screened_theatrically`)
self.type = 'screened_theatrically'
return self
}
}
},
similar() {
return {
end() {
self.url = self.api(`/tv/${id}/similar`, { language: 'en-US' })
self.type = 'similar'
return self
}
}
},
provider() {
return {
end() {
self.url = self.api(`/tv/${id}/watch/providers`)
self.type = 'provider'
return self
}
}
},
lastest() {
return {
end() {
self.url = self.api(`/tv/latest`)
self.type = 'lastest'
return self
}
}
},
airingToday() {
return {
end() {
self.url = self.api(`/tv/airing_today`)
self.type = 'airing_today'
return self
}
}
},
onTheAir() {
const args = { page: 1 }
return {
page(page = 1) {
args.page = page
return this
},
end() {
self.url = self.api(`/tv/on_the_air`, { page: args.page })
self.type = 'on_the_air'
return self
}
}
},
popular() {
const args = { page: 1 }
return {
page(page = 1) {
args.page = page
return this
},
end() {
self.url = self.api(`/tv/popular`, { page: args.page })
self.type = 'popular'
return self
}
}
},
topRated() {
const args = { page: 1 }
return {
page(page = 1) {
args.page = page
return this
},
end() {
self.url = self.api(`/tv/top_rated`, { page: args.page })
self.type = 'top_rated'
return self
}
}
},
season(season_number = "") {
return season(self)(id)(season_number)
}
}
}
}
module.exports = tvseries