Вторник, 18 апреля 2017 10:27

Astronomy Picture of the Day на вашем сайте. Продолжение

Оцените материал
(4 голосов)

Продолжаем усовершенствовать код, предназначенный для получения актуальной астрономической "картинки дня" с сайта NASA; начало см. в статье Astronomy Picture of the Day на вашем сайте. Работая с API Astronomy Picture of the Day, внезапно мы с вами осознаем, что с сервера NASA может транслироваться вовсе не линк на изображение, а... ссылка на ролик Youtube, и наш с вами код обязан это учитывать. Можно, разумеется, ограничиться проверкой на наличие изображения в полученном JSON, и в случае отсутствия такового - рандомно показать одну из заранее заготовленных картинок; но мы ведь не ищем легких путей, не правда ли?

 

Dev banner 1

 

Прежде всего, хотелось бы извлечь из полученной ссылки Youtube - идентификатор видео, как это сделать? С этим вполне справляется следующее регулярное выражение:

 

preg_match('#(\.be/|/embed/|/v/|/watch\?v=)([A-Za-z0-9_-]{5,11})#', $YoutubeCode, $matches);
if(isset($matches[2]) && $matches[2] != ''){
$YoutubeCode = $matches[2];
}

 

, и теперь ID видео находится у нас в переменной $YoutubeCode. Отлично, полдела сделано; публикация ролика уже не вызывает никаких затруднений:

 

echo '<iframe src="https://www.youtube.com/embed/' . $YoutubeCode . '" type="text/html" width="640" height="360" frameborder="0"></iframe>';

 

Идем далее. Как проверить, содержит ли полученный JSON ссылку на изображение? Вариантов подобной проверки немало; в частности, fopen, этот способ описан на форуме, в топике, посвященном Extended weather informer. Wunderground.com, взгляните:

 

} elseif (!@fopen($obj->url, 'r')) {
$best_images = Array(

 

Ну и вот, приходим наконец к коду, который полностью показан, как всегда, на форуме; демка в начале страницы. Данный API, как уже отмечалось, имеет ярко выраженную тенденцию к перманентному изменению, поэтому... поэтому разговор, безусловно, не закончен. Заходите на огонек.

Последнее изменениеВторник, 18 апреля 2017 10:44

Оставить комментарий

Добавьте ваш комментарий