Как получить посты изображений из RSS? - PullRequest
0 голосов
/ 27 июня 2018

Я хочу получать миниатюры сообщений из RSS-каналов, но код не содержит изображений.

Это выглядит так:

<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
        <title></title>
        <link></link>
        <description>Main feed</description>
        <language>is-IS</language>
        <pubDate>Wed, 27 Jun 2018 02:47:24 GMT</pubDate>
        <docs>http://blogs.law.harvard.edu/tech/rss</docs>
        <ttl>100</ttl>
        <generator>RSS</generator>

        <item>
            <title></title>
            <description>
                <![CDATA[

                ]]>
            </description>
            <link></link>
            <guid/>
            <pubDate>Tue, 26 Jun 2018 12:00:00 GMT</pubDate>
        </item>
    </channel>
</rss>

Есть ли способ получить изображения? Они существуют на странице новостей в виде миниатюр.

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Если вы хотите получить изображение поста, мы можем сделать это - при условии, что в содержании / теле поста есть изображение. Вот что я бы сделал.

Я создал пакет для упрощения анализа XML. Вы можете найти его здесь: https://github.com/mtownsend5512/xml-to-array

Затем выполните следующее:

$xml = \Mtownsend\XmlToArray\XmlToArray::convert(file_get_contents('https://www.yourrssfeed.com'));

Теперь у вас есть хороший массив php-канала rss.

Далее мы создадим вспомогательную функцию для получения первого изображения из тела поста. Мы будем использовать это как избранное изображение поста.

function getPostImage($content)
{
    $output = preg_match_all('/<img[^>]+src=[\'"]([^\'"]+)[\'"][^>]*>/i', $content, $matches);
    if (empty($matches[1][0])) {
        return 'http://yoursite.com/images/fallback-image.jpg';
    }
    return $matches[1][0];
}

Вы захотите заменить http://yoursite.com/images/fallback-image.jpg URL-адресом вашего резервного изображения, если в сообщении нет изображения.

Теперь мы перебираем сообщения:

foreach ($xml['channel']['item'] as $post) {
    $title = $post['title']);
    $link = $post['link'];
    $description = $post['description'];
    $pubDate = $post['pubDate'];
    $image = getPostImage($post["content:encoded"]);
}

Надеюсь, это поможет.

0 голосов
/ 27 июня 2018

Однако вы еще не опубликовали свой код. Простой код будет выглядеть так: если есть путаница, пожалуйста, спросите

Документация на PHP

php файл

<?php
  $xml =simplexml_load_file('read.xml');
  echo $xml->channel->title;
  echo '<br/>';
  echo $xml->channel->link;  
?>

XML-файл (немного изменен только что добавленный контент)

<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
<channel>
    <title>title is here</title>
    <link>link is here</link>
    <description>Main feed</description>
    <language>is-IS</language>
    <pubDate>Wed, 27 Jun 2018 02:47:24 GMT</pubDate>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>100</ttl>
    <generator>RSS</generator>

    <item>
        <title></title>
        <description>
            <![CDATA[

            ]]>
        </description>
        <link></link>
        <guid/>
        <pubDate>Tue, 26 Jun 2018 12:00:00 GMT</pubDate>
    </item>
</channel>

enter image description here

...