【问题标题】:How to get first image from a tumlbr rss feed in PHP如何从 PHP 中的 tumlbr rss 提要中获取第一张图片
【发布时间】:2015-05-05 22:31:00
【问题描述】:

0这是我的 rss 提要的相关部分:

    <channel>
        <description></description>
        <title>Untitled</title>
        <generator>Tumblr (3.0; @xxx)</generator>
        <link>http://xxx.tumblr.com/</link> 
        <item>
            <title>Title</title>
            <description>&lt;figure&gt;&lt;img src="https://31.media.tumblr.com/c78c7t3abd23423549d3bb0f705/tumblr_inline_nkp9z234d0uj.jpg"/&gt;&lt;/figure&gt;</description>
            <link>http://xxx.tumblr.com/post/99569244093</link>
            <guid>http://xxx.tumblr.com/post/99569244093</guid>
            <pubDate>Thu, 09 Oct 2014 11:19:33 -0400</pubDate>
        </item>
    </channel>

使用此处其他问题的答案,我尝试了这个:

$content = file_get_contents("http://xxx.tumblr.com/rss"); 
$feed = new SimpleXmlElement($content); 
$imgs = $feed->channel->item[0]->description->xpath('//img');
    foreach($imgs as $image) {
            echo (string)$image['src'];     
};

这将为$imgs返回一个空数组

这与&amp;lt; &amp;gt;等标签有关吗?

如果可以,我该怎么办?

【问题讨论】:

  • 您发布的 XML 中没有 img 元素。 &amp;lt;img src="..."/&amp;gt; 不算数。
  • 这就是我认为可能是问题所在.. :-/

标签: php xml xpath rss tumblr


【解决方案1】:

我不确定您是否可以使用这种方法 - 正如 kjhughes 已经在评论中提到的那样,您的输入 XML 不包含任何 img 元素。但是可以使用 XPath 子字符串函数检索图像源:

substring-before(substring-after(substring-after(//item/description[contains(.,'img')],
'src='),'"'),'"')

结果:

https://31.media.tumblr.com/c78c7t3abd23423549d3bb0f705/tumblr_inline_nkp9z234d0uj.jpg

【讨论】:

    【解决方案2】:

    您可以通过使用带有preg_match 的简单正则表达式从描述中获取它,该描述似乎包含图像的 HTML 图像标记:

    $content = file_get_contents("http://xxx.tumblr.com/rss");
    $feed    = new SimpleXmlElement($content);
    $img     = (string)$feed->channel->item[0]->description;
    
    if (preg_match('/src="(.*?)"/', $img, $matches)) {
        $src = $matches[1];
        echo "src = $src", PHP_EOL;
    }
    

    输出:

    src = http://40.media.tumblr.com/58d24c3009638514325b113859ba369f/tumblr_nk0mwfhKXU1sl87kjo1_500.jpg
    

    【讨论】:

    • 谢谢,我认为正则表达式是最好的方法......但它仍然让我害怕 xD
    【解决方案3】:

    在您可以在描述上使用xapth() 之前,您需要从中创建一个新的 XML 文档:

    $url  = "http://xxx.tumblr.com/rss";
    $desc = simplexml_load_file($url)->xpath('//item/description[1]')[0];
    $src  = simplexml_load_string("<x>$desc</x>")->xpath('//img/@src')[0];
    
    echo $src;
    

    输出:

    http://40.media.tumblr.com/58d24c3009638514325b113859ba369f/tumblr_nk0mwfhKXU1sl87kjo1_500.jpg
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多