如何从 PHP 中的 tumblr rss 提要获取第一张图片
How to get first image from a tumlbr rss feed in PHP
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><figure><img src="https://31.media.tumblr.com/c78c7t3abd23423549d3bb0f705/tumblr_inline_nkp9z234d0uj.jpg"/></figure></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
返回一个空数组
是否与标签 < >
等有关?
如果可以,我该怎么办?
我不确定您是否可以使用这种方法 - 正如 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
您可以从描述中获取它,其中似乎包含图像的 HTML 图像标签,方法是使用带有 preg_match
:
的简单正则表达式
$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
在描述中使用 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
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><figure><img src="https://31.media.tumblr.com/c78c7t3abd23423549d3bb0f705/tumblr_inline_nkp9z234d0uj.jpg"/></figure></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
是否与标签 < >
等有关?
如果可以,我该怎么办?
我不确定您是否可以使用这种方法 - 正如 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
您可以从描述中获取它,其中似乎包含图像的 HTML 图像标签,方法是使用带有 preg_match
:
$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
在描述中使用 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