Using theMovieDB to display Image Poster with PHP

Refresh

November 2018

Views

16.6k time

8

I'm new to using the themoviedb JSON api, and I'm currently trying to do something that seems simple: Display a movie's main poster. I got an API key and here is the code / response I'm using.

$ca = curl_init();
curl_setopt($ca, CURLOPT_URL, "http://api.themoviedb.org/3/configuration?api_key=MYAPIKEY");
curl_setopt($ca, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ca, CURLOPT_HEADER, FALSE);
curl_setopt($ca, CURLOPT_HTTPHEADER, array("Accept: application/json"));
$response = curl_exec($ca);
curl_close($ca);
//var_dump($response);
$config = json_decode($response, true);
//print_r($config);
//$base = $config['base_url'];
//echo($base);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://api.themoviedb.org/3/search/movie?query=Monsters+University&api_key=MYAPIKEY");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/json"));
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
//print_r($result);
//var_dump($response);
echo("<img src='" . $config[0]['base_url'] . $config[0]['poster_sizes'][2] . $result[0]['poster_path'] . "'/>");

My only question now is I'm trying to echo a tag to display the poster, but I'm not sure what the correct code would be would it be something like this?

$responsePHP = json_decode($response);
echo("<img src='" . $responsePHP['poster_path'] . "'/>");

Any help would be appreciated!

Edit: Added the config array, but it the echo returns with nothing. The JSON for both print out fine and print_r seems to work with json_decode, I just don't know why I can't pull out any values from the arrays

3 answers

6

Похоже , что вам нужно сделать дополнительный запрос /3/configuration, чтобы получить некоторую дополнительную информацию.

Параметр , который вы ищете, base_urlкоторые вы можете использовать для построения ссылок.

Подробнее здесь: http://docs.themoviedb.apiary.io/#get-%2F3%2Fconfiguration

Вы можете быть удивлены , почему это необходимо. По их сайт, они сделали это , чтобы они могли держать их API свет, и кажется , что base_urlредко меняется (см https://www.themoviedb.org/talk/515a72d0760ee3615a0b5256 более)

Таким образом, вы могли бы сделать этот запрос только один раз каждый раз , когда X (например , один раз в день, например) , а затем использовать base_urlя получаю там во всех последующих запросах я , возможно , придется сделать.


EDIT: Вздох, я думал , что у вас были проблемы только не имея base_url, не с получением данных из JSON.

Во всяком случае, просто заменить последнюю строку на это:

echo("<img src='" . $config['images']['base_url'] . $config['images']['poster_sizes'][2] . $result['results'][0]['poster_path'] . "'/>");

И это все.

0

вы близки. вы должны захватить base_url от конфигурации так же , как вы сделали для запроса фильма ( http://docs.themoviedb.apiary.io/#configuration ) и предварять base_url к тому , что у вас есть , и тогда вы также должны плакат или фон размер , это должно быть что - то вроде этого:

echo("<img src='" . $config['base_url'] . $config['poster_sizes'][2] . $responsePHP['poster_path'] . "'/>");

поэтому выход должен быть что - то вроде: http://d3gtl9l2a4fn1j.cloudfront.net/t/p/w185/2lECpi35Hnbpa4y46JX0aY3AWTy.jpg

0

Далее будет распечатать путь плаката. Я думаю, что это то, что вы хотите.

$responsePHP = json_decode($response);
$movies = $responsePHP->results;
$firstMovie = $movies[0];
echo $firstMovie->poster_path;

Если ваш вопрос о том, как получить base_url затем посмотреть на ответ vadderung в.