mirror of
				https://github.com/KevinMidboe/moviedb.git
				synced 2025-10-29 17:50:25 +00:00 
			
		
		
		
	initial commit
This commit is contained in:
		
							
								
								
									
										11
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | ALL_TESTS = $(shell find test/ -name '*.test.js') | ||||||
|  |  | ||||||
|  | run-tests: | ||||||
|  | 	@./node_modules/.bin/mocha \ | ||||||
|  | 		$(TESTFLAGS) \ | ||||||
|  | 		$(TESTS) | ||||||
|  |  | ||||||
|  | test: | ||||||
|  | 	@$(MAKE) NODE_PATH=lib TESTS="$(ALL_TESTS)" run-tests | ||||||
|  |  | ||||||
|  | .PHONY: test | ||||||
							
								
								
									
										7
									
								
								example.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								example.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | var mdb = require('./lib/moviedb'); | ||||||
|  |  | ||||||
|  | var m = new mdb('yout api key'); | ||||||
|  |  | ||||||
|  | m.searchMovie({query: 'alien'}, function(err, res){ | ||||||
|  |  console.log(res); | ||||||
|  | }); | ||||||
							
								
								
									
										25
									
								
								lib/auth.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								lib/auth.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | |||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Module dependencies | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | var request = require('superagent') | ||||||
|  |   , endpoints = require('./endpoints.json') | ||||||
|  |   , MovieDB = module.parent.exports; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | MovieDB.prototype.requestToken = function(fn){ | ||||||
|  |   var that = this; | ||||||
|  |  | ||||||
|  |   request | ||||||
|  |   .get(endpoints.base_url  + endpoints.authentication.requestToken) | ||||||
|  |   .send({api_key: that.api_key}) | ||||||
|  |   .set('Accept', 'application/json') | ||||||
|  |   .end(function(res){ | ||||||
|  |     if(res.ok) that.token = res.body; | ||||||
|  |     else throw new Error('Invalid authentication'); | ||||||
|  |  | ||||||
|  |     fn(); | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
							
								
								
									
										78
									
								
								lib/endpoints.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								lib/endpoints.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | |||||||
|  | { | ||||||
|  |     "base_url": "http://api.themoviedb.org/3/" | ||||||
|  |   , "configuration" : "configuration" | ||||||
|  |   , "authentication" : { | ||||||
|  |         "requestToken" : "authentication/token/new" | ||||||
|  |       , "sessionId" : "authentication/session/new" | ||||||
|  |     } | ||||||
|  |   , "methods" : { | ||||||
|  |         "search" : { | ||||||
|  |             "get" : { | ||||||
|  |                 "Movie" : "search/movie" | ||||||
|  |               , "Person" : "search/person" | ||||||
|  |             } | ||||||
|  |           , "post" : { | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |       , "collection" : { | ||||||
|  |             "get" : { | ||||||
|  |                 "Info" : "collection/:id" | ||||||
|  |             } | ||||||
|  |           , "post" : { | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |       , "movie" : { | ||||||
|  |             "get" : { | ||||||
|  |                 "Info" : "movie/:id" | ||||||
|  |               , "AlternativeTitles" : "movie/:id/alternative_titles" | ||||||
|  |               , "Casts" : "movie/:id/casts" | ||||||
|  |               , "Images" : "movie/:id/images" | ||||||
|  |               , "Keywords" : "movie/:id/keywords" | ||||||
|  |               , "Releases" : "movie/:id/releases" | ||||||
|  |               , "Trailers" : "movie/:id/trailers" | ||||||
|  |               , "Translations" : "movie/:id/translations" | ||||||
|  |               , "Similar" : "movie/:id/similar_movies" | ||||||
|  |             } | ||||||
|  |           , "post" : { | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |       , "person" : { | ||||||
|  |             "get" : { | ||||||
|  |                 "Info" : "person/:id" | ||||||
|  |               , "Credits" : "person/:id/credits" | ||||||
|  |               , "Images" : "person/:id/images" | ||||||
|  |             } | ||||||
|  |           , "post" : { | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |       , "misc" : { | ||||||
|  |             "get" : { | ||||||
|  |                 "LatestMovie" : "latest/movie" | ||||||
|  |               , "NowPlaying" : "movie/now-playing" | ||||||
|  |               , "PopularMovies" : "movie/popular" | ||||||
|  |               , "TopRatedMovies" : "movie/top-rated" | ||||||
|  |             } | ||||||
|  |           , "post" : { | ||||||
|  |                 "AddMovieRating" : "movie/:id/rating" | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |       , "company" : { | ||||||
|  |             "get" : { | ||||||
|  |                 "Info" : "company/:id" | ||||||
|  |               , "Movies" : "company/:id/movies" | ||||||
|  |             } | ||||||
|  |           , "post" : { | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |       , "account" : { | ||||||
|  |             "get" : { | ||||||
|  |                 "Info" : "account" | ||||||
|  |               , "FavoriteMovies" : "account/:id/favorite_movies" | ||||||
|  |               , "RatedMovies" : "account/:id/rated_movies" | ||||||
|  |             } | ||||||
|  |           , "post" : { | ||||||
|  |                 "AddFavorite" : "account/:id/favorite" | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										21
									
								
								lib/moviedb.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								lib/moviedb.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Exports the constructor | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | module.exports = function MovieDB(api_key){ | ||||||
|  |   if(api_key) this.api_key = api_key; | ||||||
|  |   else throw new Error('Bad api key'); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * API auth | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | require('./auth'); | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * API request | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | require('./request'); | ||||||
							
								
								
									
										116
									
								
								lib/request.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								lib/request.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,116 @@ | |||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Module dependencies | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | var request = require('superagent') | ||||||
|  | var endpoints = require('./endpoints.json') | ||||||
|  |   , methods = endpoints.methods | ||||||
|  |   , base_url = endpoints.base_url | ||||||
|  |   , MovieDB = module.exports = module.parent.exports; | ||||||
|  |  | ||||||
|  | var get, post; | ||||||
|  |  | ||||||
|  | Object.keys(methods).forEach(function(method){ | ||||||
|  |   get = methods[method].get; | ||||||
|  |   post = methods[method].post; | ||||||
|  |  | ||||||
|  |   // GET requests | ||||||
|  |    | ||||||
|  |   Object.keys(methods[method].get).forEach(function(g){ | ||||||
|  |  | ||||||
|  |     MovieDB.prototype[method + g] = function(params, fn){ | ||||||
|  |  | ||||||
|  |       var that = this; | ||||||
|  |  | ||||||
|  |       if(!this.token || Date.now() > +new Date(this.token.expires_at)) { | ||||||
|  |  | ||||||
|  |         this.requestToken(function(){ | ||||||
|  |           execMethod.call(that, 'get', params, methods[method].get[g], fn); | ||||||
|  |         });     | ||||||
|  |  | ||||||
|  |       } else { | ||||||
|  |      | ||||||
|  |         execMethod.call(this, 'get', methods[method].get[g], fn); | ||||||
|  |  | ||||||
|  |       }  | ||||||
|  |  | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |   }); | ||||||
|  |  | ||||||
|  |   // POST requests | ||||||
|  |   Object.keys(methods[method].post).forEach(function(p){ | ||||||
|  |  | ||||||
|  |     MovieDB.prototype[method + p] = function(params, fn){ | ||||||
|  |  | ||||||
|  |       var that = this; | ||||||
|  |  | ||||||
|  |       if(!this.token || Date.now() > +new Date(this.token.expires_at)) { | ||||||
|  |  | ||||||
|  |         this.requestToken(function(){ | ||||||
|  |           execMethod.call(that, 'post', params, methods[method].post[p], fn); | ||||||
|  |         });     | ||||||
|  |  | ||||||
|  |       } else { | ||||||
|  |      | ||||||
|  |         execMethod.call(this, 'post', params, methods[method].post[p], fn); | ||||||
|  |  | ||||||
|  |       }  | ||||||
|  |  | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |   }); | ||||||
|  |  | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | var execMethod = function(type, params, endpoint, fn){ | ||||||
|  |    | ||||||
|  |   params = params || {}; | ||||||
|  |   endpoint = endpoint.replace(':id', params.id); | ||||||
|  |   delete params.id; | ||||||
|  |  | ||||||
|  |   if(type === 'post'){ | ||||||
|  |  | ||||||
|  |     request | ||||||
|  |     .post(base_url + endpoint) | ||||||
|  |     .query({api_key : this.api_key}) | ||||||
|  |     .send(params) | ||||||
|  |     .set('Accept', 'application/json') | ||||||
|  |     .end(function(res){ | ||||||
|  |       if(res.ok){ | ||||||
|  |         try{ | ||||||
|  |           var body = JSON.parse(res.text); | ||||||
|  |           fn(null, body); | ||||||
|  |         } catch(e){ | ||||||
|  |           fn(e, null); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |       } else { | ||||||
|  |         fn(res.error, null); | ||||||
|  |       } | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |   } else { | ||||||
|  |  | ||||||
|  |     request | ||||||
|  |     .get(base_url + endpoint) | ||||||
|  |     .send(params) | ||||||
|  |     .set('Accept', 'application/json') | ||||||
|  |     .end(function(res){ | ||||||
|  |       if(res.ok){ | ||||||
|  |         try{ | ||||||
|  |           var body = JSON.parse(res.text); | ||||||
|  |           fn(null, body); | ||||||
|  |         } catch(e){ | ||||||
|  |           fn(e, null); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |       } else { | ||||||
|  |         fn(res.error, null); | ||||||
|  |       } | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | }; | ||||||
							
								
								
									
										10
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | |||||||
|  | { | ||||||
|  |     "name" : "moviedb" | ||||||
|  |   , "version" : "0.0.1" | ||||||
|  |   , "dependencies" : { | ||||||
|  |         "superagent" : "0.4.x" | ||||||
|  |     } | ||||||
|  |   , "devDependencies" : { | ||||||
|  |         "mocha" : "1.0.x" | ||||||
|  |     } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user