/ / Jak zdobyć pierwszy obraz z RSS rss tumlbr w PHP - php, xml, xpath, rss, tumblr

Jak uzyskać pierwszy obraz z kanału rss tumlbr w PHP - php, xml, xpath, rss, tumblr

0 Oto odpowiednia część mojego kanału 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="/images/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>

Korzystając z odpowiedzi z innych pytań tutaj, wypróbowałem to:

$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"];
};

Zwraca pustą tablicę dla $imgs

Czy ma to coś wspólnego z tagami &lt; &gt; itp?

a jeśli tak, co mogę zrobić?

Odpowiedzi:

1 dla odpowiedzi № 1

Możesz go pobrać z opisu, który wydaje się zawierać znacznik HTML obrazu, używając prostego wyrażenia regularnego z 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="/images/(.*?)"/", $img, $matches)) {
$src = $matches[1];
echo "src = $src", PHP_EOL;
}

Wydajność:

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

1 dla odpowiedzi nr 2

Zanim będziesz mógł użyć xapth() w opisie musisz utworzyć z niego nowy dokument 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;

Wydajność:

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

0 dla odpowiedzi № 3

Nie jestem pewien, czy możesz użyć tego podejścia - jak już wspomniano w komentarzu kjhughes, twój wejściowy XML nie zawiera żadnych img element. Możliwe jest jednak odzyskanie źródła obrazu za pomocą funkcji podciągowych XPath:

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

Wynik:

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