forked from glamorous/TMDb-PHP-API
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TMDb.php
456 lines (408 loc) · 10.1 KB
/
TMDb.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
<?php
/**
* TMDb PHP API class - API 'themoviedb.org'
* API Documentation: http://api.themoviedb.org/2.1/
* Documentation and usage in README file
*
* @author Jonas De Smet - Glamorous
* @since 09.11.2009
* @date 10.12.2010
* @copyright Jonas De Smet - Glamorous
* @version 0.9.10
* @license BSD http://www.opensource.org/licenses/bsd-license.php
*/
class TMDb
{
const TMDB = 'Themoviedb.org (TMDb)';
const IMDB = 'The Internet Movie Database (IMDb)';
const JSON = 'json';
const XML = 'xml';
const YAML = 'yaml';
const POST = 'post';
const GET = 'get';
const API_URL = 'http://api.themoviedb.org/2.1/';
const VERSION = '0.9.10';
/**
* The API-key
*
* @var string
*/
private $_apikey;
/**
* The default return format
*
* @var TMDb::JSON or TMDb::XML or TMDb::YAML
*/
private $_format;
/**
* The default language
*
* @var string
*/
private $_lang;
/**
* The available return formats
*
* @var array
*/
private $_formats = array(TMDb::JSON, TMDb::XML, TMDb::YAML);
/**
* Default constructor
*
* @param string $apikey API-key recieved from TMDb
* @param const[optional] $defaultFormat Default return format
* @param string $defaultLang Default language
* @return void
*/
public function __construct($apikey, $defaultFormat = TMDb::JSON, $defaultLang = 'en')
{
$this->setApikey($apikey);
$this->setFormat($defaultFormat);
$this->setLang($defaultLang);
}
/**
* Search a movie by title
*
* @param string $title Title to search after in the TMDb database
* @param const[optional] $format Return format for this function
* @return string
*/
public function searchMovie($title, $format = null)
{
return $this->_makeCall('Movie.search', $title, $format);
}
/**
* Get a movie by TMDb-id or IMDb-id
*
* @param string $id TMDb-id or IMDb-id
* @param const[optional] $type For use with IMDb-id you have to change this parameter to TMDb::IMDB
* @param const[optional] $format Return format for this function
* @return string
*/
public function getMovie($id, $type = TMDb::TMDB, $format = null)
{
if($type == TMDb::IMDB)
{
return $this->_makeCall('Movie.imdbLookup', $id, $format);
}
else
{
return $this->_makeCall('Movie.getInfo', $id, $format);
}
}
/**
* Get a movie by hash
*
* @param string $hash Hash
* @param string $bytesize Bitesize
* @param const[optional] $format Return format for this function
* @return string
*/
public function getMovieByHash($hash, $bytesize, $format = null)
{
return $this->_makeCall('Media.getInfo', $hash.'/'.$bytesize, $format);
}
/**
* Get images by the TMDb-id or IMDb-id
*
* @param string $id Movie TMDb-id or IMDb-id
* @param const[optional] $format Return format for this function
* @return string
*/
public function getImages($id, $format = null)
{
return $this->_makeCall('Movie.getImages', $id, $format);
}
/**
* Search a person by name
*
* @param string $name Name to search after in the TMDb database
* @param const[optional] $format Return format for this function
* @return string
*/
public function searchPerson($name, $format = null)
{
return $this->_makeCall('Person.search', $name, $format);
}
/**
* Get a person by his TMDb-id
*
* @param string $id Persons TMDb-id
* @param const[optional] $format Return format for this function
* @return string
*/
public function getPerson($id, $format = null)
{
return $this->_makeCall('Person.getInfo', $id, $format);
}
/**
* Get a Movie-version by its TMDb-id or IMDB-id
*
* @param string $id Movie TMDb-id or IMDB-id
* @param const[optional] $format Return format for this function
* @return string
*/
public function getMovieVersion($id, $format = null)
{
return $this->_makeCall('Movie.getVersion', $id, $format);
}
/**
* Get multiple Movie-versions by their TMDb-id or IMDB-id
*
* @param array $ids Array with Movie TMDb-id's or IMDB-id's
* @param const[optional] $format Return format for this function
* @return string
*/
public function getMovieVersions(array $ids, $format = null)
{
return $this->_makeCall('Movie.getVersion', implode(',', $ids), $format);
}
/**
* Get a Person-version by its TMDb-id
*
* @param string $id Person TMDb-id
* @param const[optional] $format Return format for this function
* @return string
*/
public function getPersonVersion($id, $format = null)
{
return $this->_makeCall('Person.getVersion', $id, $format);
}
/**
* Get multiple Person-versions by their TMDb-id
*
* @param array $ids Array with Person TMDb-id's
* @param const[optional] $format Return format for this function
* @return string
*/
public function getPersonVersions(array $ids, $format = null)
{
return $this->_makeCall('Person.getVersion', implode(',', $ids), $format);
}
/**
* Browse movies to get a list ordered by rating/release/title
*
* @param string $order_by Order by rating, release or title
* @param string $order Order asc or desc
* @param array[optional] $params Key => value pairs for optional parameters
* @param const[optional] $format Return format for this function
* @return mixed
*/
public function browseMovies($order_by, $order, $params = array(), $format = null)
{
$order_by_container = array('rating','release','title');
$order_container = array('asc','desc');
if(in_array($order_by, $order_by_container) AND in_array($order, $order_container))
{
$params['order_by'] = $order_by;
$params['order'] = $order;
return $this->_makeCall('Movie.browse', $params, $format);
}
else
{
return FALSE;
}
}
/**
* Get Movie-translations by its TMDb-id or IMDB-id
*
* @param string $id Movie TMDb-id or IMDB-id
* @param const[optional] $format Return format for this function
* @return string
*/
public function getMovieTranslations($id, $format = null)
{
return $this->_makeCall('Movie.getTranslations', $id, $format);
}
/**
* Get Latest Movie
*
* @param const[optional] $format Return format for this function
* @return string
*/
public function getLatestMovie($format = null)
{
return $this->_makeCall('Movie.getLatest', '', $format);
}
/**
* Get Latest Person
*
* @param const[optional] $format Return format for this function
* @return string
*/
public function getLatestPerson($format = null)
{
return $this->_makeCall('Person.getLatest', '', $format);
}
/**
* Get Genres
*
* @param const[optional] $format Return format for this function
* @return string
*/
public function getGenres($format = null)
{
return $this->_makeCall('Genres.getList', '', $format);
}
/**
* Authentication: getToken
*
* @return string
*/
public function getToken()
{
$result = json_decode($this->_makeCall('Auth.getToken', '', null), TRUE);
return $result['token'];
}
/**
* Authentication: getSession
*
* @return string
*/
public function getSession($token, $format = null)
{
return $this->_makeCall('Auth.getSession', $token, $format);
}
/**
* Add a rating to a movie
*
* @param string $id TMDb-id or IDMB-id of the Movie
* @param float $rating A value between 0.0 to 10.0
* @param string $session_key Session key that you received with getSession
*
* @return string
*/
public function addMovieRating($id, $rating, $session_key, $format = null)
{
$params = array(
'id' => $id,
'rating' => (float) $rating,
'session_key' => (string) $session_key,
);
return $this->_makeCall('Movie.addRating', $params, $format, TMDB::POST);
}
/**
* Makes the call to the API
*
* @param string $function API specific function name for in the URL
* @param string $param Unencoded paramter for in the URL
* @param const $format Return format for this function
* @return string
*/
private function _makeCall($function, $param, $format, $method = TMDB::GET)
{
$type = (!empty($format))? $format : $this->getFormat();
$params = '';
if($method == TMDB::GET)
{
if(is_array($param) AND ! empty($param))
{
$params .= '?'.http_build_query($param);
}
elseif($param != '')
{
$arr = explode('/', $param);
$arr = array_map('urlencode', $arr);
$params .= '/'.implode('/', $arr);
}
$lang = (substr($function, 0 ,strpos($function, '.')) !== 'Auth') ? '/'.$this->getLang() : '';
$url = TMDb::API_URL.$function.$lang.'/'.$type.'/'.$this->getApikey().$params;
}
elseif($method == TMDB::POST)
{
$params = (array) $param;
$params['type'] = $type;
$params['api_key'] = $this->getApikey();
$url = TMDb::API_URL.$function;
}
$results = '';
if (extension_loaded('curl'))
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
if($method == TMDB::POST)
{
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $params);
}
$results = curl_exec($ch);
$headers = curl_getinfo($ch);
$error_number = curl_errno($ch);
$error_message = curl_error($ch);
curl_close($ch);
}
else
{
$results = file_get_contents($url);
}
return (string) $results;
}
/**
* Setter for the default return format
*
* @param const $format
* @return void
*/
public function setFormat($format)
{
if(in_array($format, $this->_formats))
{
$this->_format = $format;
}
else
{
$this->_format = TMDb::JSON;
}
}
/**
* Getter for the default return format
*
* @return const
*/
public function getFormat()
{
return $this->_format;
}
/**
* Setter for the default language
*
* @param string $lang
* @return void
*/
public function setLang($lang)
{
$this->_lang = $lang;
}
/**
* Getter for the default language
*
* @return string
*/
public function getLang()
{
return $this->_lang;
}
/**
* Setter for the API-key
*
* @param string $apikey
* @return void
*/
public function setApikey($apikey)
{
$this->_apikey = (string) $apikey;
}
/**
* Getter for the API-key
*
* @return string
*/
public function getApikey()
{
return $this->_apikey;
}
}
?>