如何从RSS获取帖子图像?

时间:2018-06-27 03:37:32

标签: php xml xml-parsing rss feed

我想从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 :(得分:0)

但是您尚未发布代码,简单代码将如下所示: 如有任何疑问,请询问

Documentation at 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

答案 1 :(得分:0)

如果您想获取帖子的图片,我们可以这样做-假定帖子的内容/正文中有图片。这就是我要做的。

我创建了一个程序包来使xml解析变得轻而易举。您可以在这里找到它:https://github.com/mtownsend5512/xml-to-array

然后执行以下操作:

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

现在您有了一个很好的rss feed的php数组。

接下来,我们将创建一个辅助函数,以从帖子的正文中获取第一张图片。我们将其用作帖子的特色图片。

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

现在,我们遍历帖子:

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

希望有帮助。