отображать только изображения в простом формате, используя rss-канал

как отображать только изображение в simplepie при использовании rss-канала. Я использую simplepie, но могу извлекать только изображение из rss. Как это сделать?


person Fawwad Shafi    schedule 14.05.2012    source источник


Ответы (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.

person Carey Estes    schedule 06.06.2012

Возможно, вы хотели бы сделать это на стороне клиента. Тогда это довольно просто с 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 для получения дополнительной информации.

Таким образом, я удалил элементы, добавил некоторые или добавил классы к различным элементам в контенте, чтобы показать пост по-моему.

person MojitoJoe    schedule 20.06.2012