Intereting Posts
не удалось сортировать дату, используя usort Как разобрать любой формат даты Использование цикла PHP для добавления строк Bootstrap и соответствующих номеров столбцов к элементам Доступ к узлам узлов пространства имен в XML с помощью SimpleXML PHP $ _GET как параметры в функциях PHP HTML – изменение цвета в текстовой области из опции внутри поля выбора, сгенерированного из mysql Как использовать сеансы в Symfony? Использование следующего в цикле foreach PHP scandir для определения содержимого удаленного диска Разделение логики / стиля в PHP должным образом Отображать все строки и обновлять все строки с помощью отправки Является ли PHP или Perl правильным выбором для моего веб-проекта? Написание запроса, содержащего переменную WHERE на основе ввода пользователем Пользовательский интерфейс JQuery, несколько датпикеров на одной странице Многомерный массив PHP – поиск значения и получение подматрицы

Выберите конкретные значения Tumblr XML с помощью PHP

Моя цель – встраивать сообщения Tumblr в веб-сайт, используя предоставленный XML. Проблема в том, что Tumblr сохраняет 6 разных размеров каждого изображения, которое вы публикуете. Мой код ниже получит первое изображение, но оно слишком велико. Как я могу выбрать одну из фотографий меньшего размера из XML, если все фотографии имеют один и тот же тег <photo-url> ?

→ Это XML из моего Tumblr, который я использую: Tumblr XML .

→ Это мой PHP-код:

 <?php $request_url = "http://kthornbloom.tumblr.com/api/read?type=photo"; $xml = simplexml_load_file($request_url); $title = $xml->posts->post->{'photo-caption'}; $photo = $xml->posts->post->{'photo-url'}; echo '<h1>'.$title.'</h1>'; echo '<img src="'.$photo.'"/>"'; echo "…"; echo "</br><a target=frame2 href='".$link."'>Read More</a>"; ?> 

Функция getPhoto принимает массив из $photos и $desiredWidth . Он возвращает фотографию, max-width которой (1) ближе всего и (2) меньше или равна $desiredWidth . Вы можете адаптировать функцию в соответствии с вашими потребностями. Важно отметить следующие:

  • $xml->posts->post->{'photo-url'} – массив.
  • $photo['max-width'] получает доступ к атрибуту max-width в <photo> .

Я использовал echo '<pre>'; print_r($xml->posts->post); echo '</pre>'; echo '<pre>'; print_r($xml->posts->post); echo '</pre>'; для поиска $xml->posts->post->{'photo-url'} был массив.

Я нашел синтаксис для доступа к атрибутам (например, $photo['max-width'] ) в документации для SimpleXMLElement .

 function getPhoto($photos, $desiredWidth) { $currentPhoto = NULL; $currentDelta = PHP_INT_MAX; foreach ($photos as $photo) { $delta = abs($desiredWidth - $photo['max-width']); if ($photo['max-width'] <= $desiredWidth && $delta < $currentDelta) { $currentPhoto = $photo; $currentDelta = $delta; } } return $currentPhoto; } $request_url = "http://kthornbloom.tumblr.com/api/read?type=photo"; $xml = simplexml_load_file($request_url); foreach ($xml->posts->post as $post) { echo '<h1>'.$post->{'photo-caption'}.'</h1>'; echo '<img src="'.getPhoto($post->{'photo-url'}, 450).'"/>"'; echo "..."; echo "</br><a target=frame2 href='".$post['url']."'>Read More</a>"; } 

Чтобы получить фотографию с max-width="100" :

 $xml = simplexml_load_file('tumblr.xml'); echo '<h1>'.$xml->posts->post->{'photo-caption'}.'</h1>'; foreach($xml->posts->post->{'photo-url'} as $url) { if ($url->attributes() == '100') echo '<img src="'.$url.'" />'; } 

Может быть, это:

 $doc = simplexml_load_file( 'http://kthornbloom.tumblr.com/api/read?type=photo' ); foreach ($doc->posts->post as $post) { foreach ($post->{'photo-url'} as $photo_url) { echo $photo_url; echo "\n"; } }