tmdb.php 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956
  1. <?php
  2. /**
  3. * TMDb PHP API class - API 'themoviedb.org'
  4. * API Documentation: http://help.themoviedb.org/kb/api/
  5. * Documentation and usage in README file
  6. *
  7. * @author Jonas De Smet - Glamorous
  8. * @since 09.11.2009
  9. * @date 16.11.2012
  10. * @copyright Jonas De Smet - Glamorous
  11. * @version 1.5.1
  12. * @license BSD http://www.opensource.org/licenses/bsd-license.php
  13. */
  14. class TMDb
  15. {
  16. const POST = 'post';
  17. const GET = 'get';
  18. const HEAD = 'head';
  19. const IMAGE_BACKDROP = 'backdrop';
  20. const IMAGE_POSTER = 'poster';
  21. const IMAGE_PROFILE = 'profile';
  22. const API_VERSION = '3';
  23. const API_URL = 'api.themoviedb.org';
  24. const API_SCHEME = 'http://';
  25. const API_SCHEME_SSL = 'https://';
  26. const VERSION = '1.5.0';
  27. /**
  28. * The API-key
  29. *
  30. * @var string
  31. */
  32. protected $_apikey;
  33. /**
  34. * The default language
  35. *
  36. * @var string
  37. */
  38. protected $_lang;
  39. /**
  40. * The TMDb-config
  41. *
  42. * @var object
  43. */
  44. protected $_config;
  45. /**
  46. * Stored Session Id
  47. *
  48. * @var string
  49. */
  50. protected $_session_id;
  51. /**
  52. * API Scheme
  53. *
  54. * @var string
  55. */
  56. protected $_apischeme;
  57. /**
  58. * Default constructor
  59. *
  60. * @param string $apikey API-key recieved from TMDb
  61. * @param string $defaultLang Default language (ISO 3166-1)
  62. * @param boolean $config Load the TMDb-config
  63. * @return void
  64. */
  65. public function __construct($apikey, $default_lang = 'en', $config = FALSE, $scheme = TMDb::API_SCHEME)
  66. {
  67. $this->_apikey = (string) $apikey;
  68. $this->_apischeme = ($scheme == TMDb::API_SCHEME) ? TMDb::API_SCHEME : TMDb::API_SCHEME_SSL;
  69. $this->setLang($default_lang);
  70. if($config === TRUE)
  71. {
  72. $this->getConfiguration();
  73. }
  74. }
  75. /**
  76. * Search a movie by querystring
  77. *
  78. * @param string $text Query to search after in the TMDb database
  79. * @param int $page Number of the page with results (default first page)
  80. * @param bool $adult Whether of not to include adult movies in the results (default FALSE)
  81. * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages
  82. * @return TMDb result array
  83. */
  84. public function searchMovie($query, $page = 1, $adult = FALSE, $year = NULL, $lang = NULL)
  85. {
  86. $params = array(
  87. 'query' => $query,
  88. 'page' => (int) $page,
  89. 'language' => ($lang !== NULL) ? $lang : $this->getLang(),
  90. 'include_adult' => (bool) $adult,
  91. 'year' => $year,
  92. );
  93. return $this->_makeCall('search/movie', $params);
  94. }
  95. /**
  96. * Search a person by querystring
  97. *
  98. * @param string $text Query to search after in the TMDb database
  99. * @param int $page Number of the page with results (default first page)
  100. * @param bool $adult Whether of not to include adult movies in the results (default FALSE)
  101. * @return TMDb result array
  102. */
  103. public function searchPerson($query, $page = 1, $adult = FALSE)
  104. {
  105. $params = array(
  106. 'query' => $query,
  107. 'page' => (int) $page,
  108. 'include_adult' => (bool) $adult,
  109. );
  110. return $this->_makeCall('search/person', $params);
  111. }
  112. /**
  113. * Search a company by querystring
  114. *
  115. * @param string $text Query to search after in the TMDb database
  116. * @param int $page Number of the page with results (default first page)
  117. * @return TMDb result array
  118. */
  119. public function searchCompany($query, $page = 1)
  120. {
  121. $params = array(
  122. 'query' => $query,
  123. 'page' => $page,
  124. );
  125. return $this->_makeCall('search/company', $params);
  126. }
  127. /**
  128. * Retrieve information about a collection
  129. *
  130. * @param int $id Id from a collection (retrieved with getMovie)
  131. * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages
  132. * @return TMDb result array
  133. */
  134. public function getCollection($id, $lang = NULL)
  135. {
  136. $params = array(
  137. 'language' => ($lang !== NULL) ? $lang : $this->getLang(),
  138. );
  139. return $this->_makeCall('collection/'.$id, $params);
  140. }
  141. /**
  142. * Retrieve all basic information for a particular movie
  143. *
  144. * @param mixed $id TMDb-id or IMDB-id
  145. * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages
  146. * @return TMDb result array
  147. */
  148. public function getMovie($id, $lang = NULL)
  149. {
  150. $params = array(
  151. 'language' => ($lang !== NULL) ? $lang : $this->getLang(),
  152. );
  153. return $this->_makeCall('movie/'.$id, $params);
  154. }
  155. /**
  156. * Retrieve alternative titles for a particular movie
  157. *
  158. * @param mixed $id TMDb-id or IMDB-id
  159. * @params string $country Only include titles for a particular country (ISO 3166-1)
  160. * @return TMDb result array
  161. */
  162. public function getMovieTitles($id, $country = NULL)
  163. {
  164. $params = array(
  165. 'country' => $country,
  166. );
  167. return $this->_makeCall('movie/'.$id.'/alternative_titles', $params);
  168. }
  169. /**
  170. * Retrieve all of the movie cast information for a particular movie
  171. *
  172. * @param mixed $id TMDb-id or IMDB-id
  173. * @return TMDb result array
  174. */
  175. public function getMovieCast($id)
  176. {
  177. return $this->_makeCall('movie/'.$id.'/casts');
  178. }
  179. /**
  180. * Retrieve all of the keywords for a particular movie
  181. *
  182. * @param mixed $id TMDb-id or IMDB-id
  183. * @return TMDb result array
  184. */
  185. public function getMovieKeywords($id)
  186. {
  187. return $this->_makeCall('movie/'.$id.'/keywords');
  188. }
  189. /**
  190. * Retrieve all the release and certification data for a particular movie
  191. *
  192. * @param mixed $id TMDb-id or IMDB-id
  193. * @return TMDb result array
  194. */
  195. public function getMovieReleases($id)
  196. {
  197. return $this->_makeCall('movie/'.$id.'/releases');
  198. }
  199. /**
  200. * Retrieve available translations for a particular movie
  201. *
  202. * @param mixed $id TMDb-id or IMDB-id
  203. * @return TMDb result array
  204. */
  205. public function getMovieTranslations($id)
  206. {
  207. return $this->_makeCall('movie/'.$id.'/translations');
  208. }
  209. /**
  210. * Retrieve available trailers for a particular movie
  211. *
  212. * @param mixed $id TMDb-id or IMDB-id
  213. * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages
  214. * @return TMDb result array
  215. */
  216. public function getMovieTrailers($id, $lang = NULL)
  217. {
  218. $params = array(
  219. 'language' => ($lang !== NULL) ? $lang : $this->getLang(),
  220. );
  221. return $this->_makeCall('movie/'.$id.'/trailers', $params);
  222. }
  223. /**
  224. * Retrieve all images for a particular movie
  225. *
  226. * @param mixed $id TMDb-id or IMDB-id
  227. * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages
  228. * @return TMDb result array
  229. */
  230. public function getMovieImages($id, $lang = NULL)
  231. {
  232. $params = array(
  233. 'language' => ($lang !== NULL) ? $lang : $this->getLang(),
  234. );
  235. return $this->_makeCall('movie/'.$id.'/images', $params);
  236. }
  237. /**
  238. * Retrieve similar movies for a particular movie
  239. *
  240. * @param mixed $id TMDb-id or IMDB-id
  241. * @param int $page Number of the page with results (default first page)
  242. * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages
  243. * @return TMDb result array
  244. */
  245. public function getSimilarMovies($id, $page = 1, $lang = NULL)
  246. {
  247. $params = array(
  248. 'page' => (int) $page,
  249. 'language' => ($lang !== NULL) ? $lang : $this->getLang(),
  250. );
  251. return $this->_makeCall('movie/'.$id.'/similar_movies', $params);
  252. }
  253. /**
  254. * Retrieve newest movie added to TMDb
  255. *
  256. * @return TMDb result array
  257. */
  258. public function getLatestMovie()
  259. {
  260. return $this->_makeCall('movie/latest');
  261. }
  262. /**
  263. * Retrieve movies arriving to theatres within the next few weeks
  264. *
  265. * @param int $page Number of the page with results (default first page)
  266. * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages
  267. * @return TMDb result array
  268. */
  269. public function getUpcomingMovies($page = 1, $lang = NULL)
  270. {
  271. $params = array(
  272. 'page' => (int) $page,
  273. 'language' => ($lang !== NULL) ? $lang : $this->getLang(),
  274. );
  275. return $this->_makeCall('movie/upcoming', $params);
  276. }
  277. /**
  278. * Retrieve movies currently in theatres
  279. *
  280. * @param int $page Number of the page with results (default first page)
  281. * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages
  282. * @return TMDb result array
  283. */
  284. public function getNowPlayingMovies($page = 1, $lang = NULL)
  285. {
  286. $params = array(
  287. 'page' => (int) $page,
  288. 'language' => ($lang !== NULL) ? $lang : $this->getLang(),
  289. );
  290. return $this->_makeCall('movie/now_playing', $params);
  291. }
  292. /**
  293. * Retrieve popular movies (list is updated daily)
  294. *
  295. * @param int $page Number of the page with results (default first page)
  296. * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages
  297. * @return TMDb result array
  298. */
  299. public function getPopularMovies($page = 1, $lang = NULL)
  300. {
  301. $params = array(
  302. 'page' => (int) $page,
  303. 'language' => ($lang !== NULL) ? $lang : $this->getLang(),
  304. );
  305. return $this->_makeCall('movie/popular', $params);
  306. }
  307. /**
  308. * Retrieve top-rated movies
  309. *
  310. * @param int $page Number of the page with results (default first page)
  311. * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages
  312. * @return TMDb result array
  313. */
  314. public function getTopRatedMovies($page = 1, $lang = NULL)
  315. {
  316. $params = array(
  317. 'page' => (int) $page,
  318. 'language' => ($lang !== NULL) ? $lang : $this->getLang(),
  319. );
  320. return $this->_makeCall('movie/top_rated', $params);
  321. }
  322. /**
  323. * Retrieve changes for a particular movie
  324. *
  325. * @param mixed $id TMDb-id or IMDB-id
  326. * @return TMDb result array
  327. */
  328. public function getMovieChanges($id)
  329. {
  330. return $this->_makeCall('movie/'.$id.'/changes');
  331. }
  332. /**
  333. * Retrieve all id's from changed movies
  334. *
  335. * @param int $page Number of the page with results (default first page)
  336. * @param string $start_date String start date as YYYY-MM-DD
  337. * @param string $end_date String end date as YYYY-MM-DD (not inclusive)
  338. * @return TMDb result array
  339. */
  340. public function getChangedMovies($page = 1, $start_date = NULL, $end_date = NULL)
  341. {
  342. $params = array(
  343. 'page' => (int) $page,
  344. 'start_date' => $start_date,
  345. 'end_date' => $end_date,
  346. );
  347. return $this->_makeCall('movie/changes', $params);
  348. }
  349. /**
  350. * Retrieve all basic information for a particular person
  351. *
  352. * @param int $id TMDb person-id
  353. * @return TMDb result array
  354. */
  355. public function getPerson($id)
  356. {
  357. return $this->_makeCall('person/'.$id);
  358. }
  359. /**
  360. * Retrieve all cast and crew information for a particular person
  361. *
  362. * @param int $id TMDb person-id
  363. * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages
  364. * @return TMDb result array
  365. */
  366. public function getPersonCredits($id, $lang = NULL)
  367. {
  368. $params = array(
  369. 'language' => ($lang !== NULL) ? $lang : $this->getLang(),
  370. );
  371. return $this->_makeCall('person/'.$id.'/credits', $params);
  372. }
  373. /**
  374. * Retrieve all images for a particular person
  375. *
  376. * @param mixed $id TMDb person-id
  377. * @return TMDb result array
  378. */
  379. public function getPersonImages($id)
  380. {
  381. return $this->_makeCall('person/'.$id.'/images');
  382. }
  383. /**
  384. * Retrieve changes for a particular person
  385. *
  386. * @param mixed $id TMDb person-id
  387. * @return TMDb result array
  388. */
  389. public function getPersonChanges($id)
  390. {
  391. return $this->_makeCall('person/'.$id.'/changes');
  392. }
  393. /**
  394. * Retrieve all id's from changed persons
  395. *
  396. * @param int $page Number of the page with results (default first page)
  397. * @param string $start_date String start date as YYYY-MM-DD
  398. * @param string $end_date String end date as YYYY-MM-DD (not inclusive)
  399. * @return TMDb result array
  400. */
  401. public function getChangedPersons($page = 1, $start_date = NULL, $end_date = NULL)
  402. {
  403. $params = array(
  404. 'page' => (int) $page,
  405. 'start_date' => $start_date,
  406. 'start_date' => $end_date,
  407. );
  408. return $this->_makeCall('person/changes', $params);
  409. }
  410. /**
  411. * Retrieve all basic information for a particular production company
  412. *
  413. * @param int $id TMDb company-id
  414. * @return TMDb result array
  415. */
  416. public function getCompany($id)
  417. {
  418. return $this->_makeCall('company/'.$id);
  419. }
  420. /**
  421. * Retrieve movies for a particular production company
  422. *
  423. * @param int $id TMDb company-id
  424. * @param int $page Number of the page with results (default first page)
  425. * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages
  426. * @return TMDb result array
  427. */
  428. public function getMoviesByCompany($id, $page = 1, $lang = NULL)
  429. {
  430. $params = array(
  431. 'page' => (int) $page,
  432. 'language' => ($lang !== NULL) ? $lang : $this->getLang(),
  433. );
  434. return $this->_makeCall('company/'.$id.'/movies', $params);
  435. }
  436. /**
  437. * Retrieve a list of genres used on TMDb
  438. *
  439. * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages
  440. * @return TMDb result array
  441. */
  442. public function getGenres($lang = NULL)
  443. {
  444. $params = array(
  445. 'language' => ($lang !== NULL) ? $lang : $this->getLang(),
  446. );
  447. return $this->_makeCall('genre/list', $params);
  448. }
  449. /**
  450. * Retrieve movies for a particular genre
  451. *
  452. * @param int $id TMDb genre-id
  453. * @param int $page Number of the page with results (default first page)
  454. * @param mixed $lang Filter the result with a language (ISO 3166-1) other then default, use FALSE to retrieve results from all languages
  455. * @return TMDb result array
  456. */
  457. public function getMoviesByGenre($id, $page = 1, $lang = NULL)
  458. {
  459. $params = array(
  460. 'page' => (int) $page,
  461. 'language' => ($lang !== NULL) ? $lang : $this->getLang(),
  462. );
  463. return $this->_makeCall('genre/'.$id.'/movies', $params);
  464. }
  465. /**
  466. * Authentication: retrieve authentication token
  467. * More information about the authentication process: http://help.themoviedb.org/kb/api/user-authentication
  468. *
  469. * @return TMDb result array
  470. */
  471. public function getAuthToken()
  472. {
  473. $result = $this->_makeCall('authentication/token/new');
  474. if( ! isset($result['request_token']))
  475. {
  476. if($this->getDebugMode())
  477. {
  478. throw new TMDbException('No valid request token from TMDb');
  479. }
  480. else
  481. {
  482. return FALSE;
  483. }
  484. }
  485. return $result;
  486. }
  487. /**
  488. * Authentication: retrieve authentication session and set it to the class
  489. * More information about the authentication process: http://help.themoviedb.org/kb/api/user-authentication
  490. *
  491. * @param string $token
  492. * @return TMDb result array
  493. */
  494. public function getAuthSession($token)
  495. {
  496. $params = array(
  497. 'request_token' => $token,
  498. );
  499. $result = $this->_makeCall('authentication/session/new', $params);
  500. if(isset($result['session_id']))
  501. {
  502. $this->setAuthSession($result['session_id']);
  503. }
  504. return $result;
  505. }
  506. /**
  507. * Authentication: set retrieved session id in the class for authenticated requests
  508. * More information about the authentication process: http://help.themoviedb.org/kb/api/user-authentication
  509. *
  510. * @param string $session_id
  511. */
  512. public function setAuthSession($session_id)
  513. {
  514. $this->_session_id = $session_id;
  515. }
  516. /**
  517. * Retrieve basic account information
  518. *
  519. * @param string $session_id Set session_id for the account you want to retrieve information from
  520. * @return TMDb result array
  521. */
  522. public function getAccount($session_id = NULL)
  523. {
  524. $session_id = ($session_id === NULL) ? $this->_session_id : $session_id;
  525. return $this->_makeCall('account', NULL, $session_id);
  526. }
  527. /**
  528. * Retrieve favorite movies for a particular account
  529. *
  530. * @param int $account_id TMDb account-id
  531. * @param string $session_id Set session_id for the account you want to retrieve information from
  532. * @param int $page Number of the page with results (default first page)
  533. * @param mixed $lang Get result in other language then default for this user account (ISO 3166-1)
  534. * @return TMDb result array
  535. */
  536. public function getAccountFavoriteMovies($account_id, $session_id = NULL, $page = 1, $lang = FALSE)
  537. {
  538. $session_id = ($session_id === NULL) ? $this->_session_id : $session_id;
  539. $params = array(
  540. 'page' => (int) $page,
  541. 'language' => ($lang !== NULL) ? $lang : '',
  542. );
  543. return $this->_makeCall('account/'.$account_id.'/favorite_movies', $params, $session_id);
  544. }
  545. /**
  546. * Retrieve rated movies for a particular account
  547. *
  548. * @param int $account_id TMDb account-id
  549. * @param string $session_id Set session_id for the account you want to retrieve information from
  550. * @param int $page Number of the page with results (default first page)
  551. * @param mixed $lang Get result in other language then default for this user account (ISO 3166-1)
  552. * @return TMDb result array
  553. */
  554. public function getAccountRatedMovies($account_id, $session_id = NULL, $page = 1, $lang = FALSE)
  555. {
  556. $session_id = ($session_id === NULL) ? $this->_session_id : $session_id;
  557. $params = array(
  558. 'page' => (int) $page,
  559. 'language' => ($lang !== NULL) ? $lang : '',
  560. );
  561. return $this->_makeCall('account/'.$account_id.'/rated_movies', $params, $session_id);
  562. }
  563. /**
  564. * Retrieve movies that have been marked in a particular account watchlist
  565. *
  566. * @param int $account_id TMDb account-id
  567. * @param string $session_id Set session_id for the account you want to retrieve information from
  568. * @param int $page Number of the page with results (default first page)
  569. * @param mixed $lang Get result in other language then default for this user account (ISO 3166-1)
  570. * @return TMDb result array
  571. */
  572. public function getAccountWatchlistMovies($account_id, $session_id = NULL, $page = 1, $lang = FALSE)
  573. {
  574. $session_id = ($session_id === NULL) ? $this->_session_id : $session_id;
  575. $params = array(
  576. 'page' => (int) $page,
  577. 'language' => ($lang !== NULL) ? $lang : '',
  578. );
  579. return $this->_makeCall('account/'.$account_id.'/movie_watchlist', $params, $session_id);
  580. }
  581. /**
  582. * Add a movie to the account favorite movies
  583. *
  584. * @param int $account_id TMDb account-id
  585. * @param string $session_id Set session_id for the account you want to retrieve information from
  586. * @param int $movie_id TMDb movie-id
  587. * @param bool $favorite Add to favorites or remove from favorites (default TRUE)
  588. * @return TMDb result array
  589. */
  590. public function addFavoriteMovie($account_id, $session_id = NULL, $movie_id = 0, $favorite = TRUE)
  591. {
  592. $session_id = ($session_id === NULL) ? $this->_session_id : $session_id;
  593. $params = array(
  594. 'movie_id' => (int) $movie_id,
  595. 'favorite' => (bool) $favorite,
  596. );
  597. return $this->_makeCall('account/'.$account_id.'/favorite', $params, $session_id, TMDb::POST);
  598. }
  599. /**
  600. * Add a movie to the account watchlist
  601. *
  602. * @param int $account_id TMDb account-id
  603. * @param string $session_id Set session_id for the account you want to retrieve information from
  604. * @param int $movie_id TMDb movie-id
  605. * @param bool $watchlist Add to watchlist or remove from watchlist (default TRUE)
  606. * @return TMDb result array
  607. */
  608. public function addMovieToWatchlist($account_id, $session_id = NULL, $movie_id = 0, $watchlist = TRUE)
  609. {
  610. $session_id = ($session_id === NULL) ? $this->_session_id : $session_id;
  611. $params = array(
  612. 'movie_id' => (int) $movie_id,
  613. 'movie_watchlist' => (bool) $watchlist,
  614. );
  615. return $this->_makeCall('account/'.$account_id.'/movie_watchlist', $params, $session_id, TMDb::POST);
  616. }
  617. /**
  618. * Add a rating to a movie
  619. *
  620. * @param string $session_id Set session_id for the account you want to retrieve information from
  621. * @param int $movie_id TMDb movie-id
  622. * @param float $value Value between 1 and 10
  623. * @return TMDb result array
  624. */
  625. public function addMovieRating($session_id = NULL, $movie_id = 0, $value = 0)
  626. {
  627. $session_id = ($session_id === NULL) ? $this->_session_id : $session_id;
  628. $params = array(
  629. 'value' => is_numeric($value) ? floatval($value) : 0,
  630. );
  631. return $this->_makeCall('movie/'.$movie_id.'/rating', $params, $session_id, TMDb::POST);
  632. }
  633. /**
  634. * Get configuration from TMDb
  635. *
  636. * @return TMDb result array
  637. */
  638. public function getConfiguration()
  639. {
  640. $config = $this->_makeCall('configuration');
  641. if( ! empty($config))
  642. {
  643. $this->setConfig($config);
  644. }
  645. return $config;
  646. }
  647. /**
  648. * Get Image URL
  649. *
  650. * @param string $filepath Filepath to image
  651. * @param const $imagetype Image type: TMDb::IMAGE_BACKDROP, TMDb::IMAGE_POSTER, TMDb::IMAGE_PROFILE
  652. * @param string $size Valid size for the image
  653. * @return string
  654. */
  655. public function getImageUrl($filepath, $imagetype, $size)
  656. {
  657. $config = $this->getConfig();
  658. if(isset($config['images']))
  659. {
  660. $base_url = $config['images']['base_url'];
  661. $available_sizes = $this->getAvailableImageSizes($imagetype);
  662. if(in_array($size, $available_sizes))
  663. {
  664. return $base_url.$size.$filepath;
  665. }
  666. else
  667. {
  668. throw new TMDbException('The size "'.$size.'" is not supported by TMDb');
  669. }
  670. }
  671. else
  672. {
  673. throw new TMDbException('No configuration available for image URL generation');
  674. }
  675. }
  676. /**
  677. * Get available image sizes for a particular image type
  678. *
  679. * @param const $imagetype Image type: TMDb::IMAGE_BACKDROP, TMDb::IMAGE_POSTER, TMDb::IMAGE_PROFILE
  680. * @return array
  681. */
  682. public function getAvailableImageSizes($imagetype)
  683. {
  684. $config = $this->getConfig();
  685. if(isset($config['images'][$imagetype.'_sizes']))
  686. {
  687. return $config['images'][$imagetype.'_sizes'];
  688. }
  689. else
  690. {
  691. throw new TMDbException('No configuration available to retrieve available image sizes');
  692. }
  693. }
  694. /**
  695. * Get ETag to keep track of state of the content
  696. *
  697. * @param string $uri Use an URI to know the version of it. For example: 'movie/550'
  698. * @return string
  699. */
  700. public function getVersion($uri)
  701. {
  702. $headers = $this->_makeCall($uri, NULL, NULL, TMDb::HEAD);
  703. return isset($headers['Etag']) ? $headers['Etag'] : '';
  704. }
  705. /**
  706. * Makes the call to the API
  707. *
  708. * @param string $function API specific function name for in the URL
  709. * @param array $params Unencoded parameters for in the URL
  710. * @param string $session_id Session_id for authentication to the API for specific API methods
  711. * @param const $method TMDb::GET or TMDb:POST (default TMDb::GET)
  712. * @return TMDb result array
  713. */
  714. private function _makeCall($function, $params = NULL, $session_id = NULL, $method = TMDb::GET)
  715. {
  716. $params = ( ! is_array($params)) ? array() : $params;
  717. $auth_array = array('api_key' => $this->_apikey);
  718. if($session_id !== NULL)
  719. {
  720. $auth_array['session_id'] = $session_id;
  721. }
  722. $url = $this->_apischeme.TMDb::API_URL.'/'.TMDb::API_VERSION.'/'.$function.'?'.http_build_query($auth_array, '', '&');
  723. if($method === TMDb::GET)
  724. {
  725. if(isset($params['language']) AND $params['language'] === FALSE)
  726. {
  727. unset($params['language']);
  728. }
  729. $url .= ( ! empty($params)) ? '&'.http_build_query($params, '', '&') : '';
  730. }
  731. $results = '{}';
  732. if (extension_loaded('curl'))
  733. {
  734. $headers = array(
  735. 'Accept: application/json',
  736. );
  737. $ch = curl_init();
  738. if($method == TMDB::POST)
  739. {
  740. $json_string = json_encode($params);
  741. curl_setopt($ch,CURLOPT_POST, 1);
  742. curl_setopt($ch,CURLOPT_POSTFIELDS, $json_string);
  743. $headers[] = 'Content-Type: application/json';
  744. $headers[] = 'Content-Length: '.strlen($json_string);
  745. }
  746. elseif($method == TMDb::HEAD)
  747. {
  748. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD');
  749. curl_setopt($ch, CURLOPT_NOBODY, 1);
  750. }
  751. curl_setopt($ch, CURLOPT_URL, $url);
  752. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  753. curl_setopt($ch, CURLOPT_HEADER, 1);
  754. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  755. $response = curl_exec($ch);
  756. $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
  757. $header = substr($response, 0, $header_size);
  758. $body = substr($response, $header_size);
  759. $error_number = curl_errno($ch);
  760. $error_message = curl_error($ch);
  761. if($error_number > 0)
  762. {
  763. throw new TMDbException('Method failed: '.$function.' - '.$error_message);
  764. }
  765. curl_close($ch);
  766. }
  767. else
  768. {
  769. throw new TMDbException('CURL-extension not loaded');
  770. }
  771. $results = json_decode($body, TRUE);
  772. if(strpos($function, 'authentication/token/new') !== FALSE)
  773. {
  774. $parsed_headers = $this->_http_parse_headers($header);
  775. $results['Authentication-Callback'] = $parsed_headers['Authentication-Callback'];
  776. }
  777. if($results !== NULL)
  778. {
  779. return $results;
  780. }
  781. elseif($method == TMDb::HEAD)
  782. {
  783. return $this->_http_parse_headers($header);
  784. }
  785. else
  786. {
  787. throw new TMDbException('Server error on "'.$url.'": '.$response);
  788. }
  789. }
  790. /**
  791. * Setter for the default language
  792. *
  793. * @param string $lang (ISO 3166-1)
  794. * @return void
  795. */
  796. public function setLang($lang)
  797. {
  798. $this->_lang = $lang;
  799. }
  800. /**
  801. * Setter for the TMDB-config
  802. *
  803. * $param array $config
  804. * @return void
  805. */
  806. public function setConfig($config)
  807. {
  808. $this->_config = $config;
  809. }
  810. /**
  811. * Getter for the default language
  812. *
  813. * @return string
  814. */
  815. public function getLang()
  816. {
  817. return $this->_lang;
  818. }
  819. /**
  820. * Getter for the TMDB-config
  821. *
  822. * @return array
  823. */
  824. public function getConfig()
  825. {
  826. if(empty($this->_config))
  827. {
  828. $this->_config = $this->getConfiguration();
  829. }
  830. return $this->_config;
  831. }
  832. /*
  833. * Internal function to parse HTTP headers because of lack of PECL extension installed by many
  834. *
  835. * @param string $header
  836. * @return array
  837. */
  838. protected function _http_parse_headers($header)
  839. {
  840. $return = array();
  841. $fields = explode("\r\n", preg_replace('/\x0D\x0A[\x09\x20]+/', ' ', $header));
  842. foreach($fields as $field)
  843. {
  844. if(preg_match('/([^:]+): (.+)/m', $field, $match))
  845. {
  846. $match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower(trim($match[1])));
  847. if( isset($return[$match[1]]) )
  848. {
  849. $return[$match[1]] = array($return[$match[1]], $match[2]);
  850. }
  851. else
  852. {
  853. $return[$match[1]] = trim($match[2]);
  854. }
  855. }
  856. }
  857. return $return;
  858. }
  859. }
  860. /**
  861. * TMDb Exception class
  862. *
  863. * @author Jonas De Smet - Glamorous
  864. */
  865. class TMDbException extends Exception{}
  866. ?>