как отображать только изображение в simplepie при использовании rss-канала. Я использую simplepie, но могу извлекать только изображение из rss. Как это сделать?
отображать только изображения в простом формате, используя rss-канал
Ответы (2)
Учитывая, что некоторые структуры каналов различаются, я не знаю явного способа сделать это. Вот как я смог это сделать. Сначала ознакомьтесь с этой статьей:
Как отобразить миниатюру из WordPress RSS подавать с помощью SimplePie?
Я смог скопировать и вставить код и внести небольшие изменения.
Я не использовал Wordpress, но это помогло мне понять, что нужно сделать.
Вставьте этот код после feed->init();
//This function will get an image from the feed
function returnImage ($text) {
$text = html_entity_decode($text, ENT_QUOTES, 'UTF-8');
$pattern = "/<img[^>]+\>/i";
preg_match($pattern, $text, $matches);
$text = $matches[0];
return $text;
}
//This function will filter out image url which we got from previous returnImage() function
function scrapeImage($text) {
$pattern = '/src=[\'"]?([^\'" >]+)[\'" >]/';
preg_match($pattern, $text, $link);
$link = $link[1];
$link = urldecode($link);
return $link;
}
Теперь вы хотите вызвать функции, чтобы они искали описание или, в моем случае, содержимое, чтобы найти тег img и правильно структурировать вывод. Вот как выглядел мой код:
foreach ($feed->get_items(0 , 3) as $item):
$feedDescription = $item->get_content();
$image = returnImage($feedDescription);
$image = scrapeImage($image);
$image_url= $item->get_permalink();
$description = $item->get_description();
?>
<div class="item">
<h4><a href="<?php echo $item->get_permalink(); ?>"><?php echo $item->get_title(); ?></a></h4>
<div class="image-box"><?php echo '<a href="' . $image_url . '"><img src="' . $image . '" /></a>'."\n";?></div>
<p><?php echo $description ?></p>
<p><a href="<?php echo $item->get_permalink(); ?>">Continue Reading</a></p>
</div>
<?php endforeach; ?>
Это может занять некоторое время, но как только вы узнаете, где находится ваш тег img в ленте, вы можете заставить simplepie проанализировать ленту, и функция найдет тег и отформатирует его, чтобы он был готов к HTML.
Чтобы получить только один пост, вы можете отредактировать свой цикл:
foreach ($feed->get_items(0 , 1) as $item):
Первая цифра (0) — начальная точка, 0 — последние сообщения. Второе число (1) — это количество постов, которые нужно тянуть. Поскольку вам нужно только одно изображение, вы хотите, чтобы это число было 1.
Возможно, вы хотели бы сделать это на стороне клиента. Тогда это довольно просто с jQuery. Допустим, ваш элемент-контент в вашем javascript выглядит так
var content = '<div><a href="http://kwout.com/cutout/b/es/y2/ukn_rou_sha.jpg"
imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;">
<img border="0" height="239" src="http://kwout.com/cutout/b/es/y2/ukn_rou_sha.jpg"
width="320"></a>Erat austro rerum.</div>';
Затем вы можете легко идентифицировать и изолировать изображение в контенте с помощью селекторов jQuery. Например, используйте
$(content).find('img:first'); //find the FIRST image inside an element or
$(content).find('a:first'); //take the hyperlink AND the image
Если это не первое изображение внутри содержимого или содержимое более сложное, чем этот пример (в основном ;-) — не беспокойтесь — тогда некоторые другие селекторы сделают свое дело. Взгляните на документацию на jquery.com для получения дополнительной информации.
Таким образом, я удалил элементы, добавил некоторые или добавил классы к различным элементам в контенте, чтобы показать пост по-моему.