我很感激一些帮助。我正在尝试使用' file_get_contents'来保存xml Feed中的图像。但问题是,它现在只需要1张图像,输入的URL也是如此。我正在寻找一个代码,它可以在每次刷新Feed时自动保存Feed中的图像,但只保存新图像,而不是已存储的图像。此外,问题是,该链接位于' ContentItem'内。标签,不易提取
这是我的XML Feed代码:
<xml>
<channel><title></title>
<link>http://www.yournewssite.com</link>
<description>gossip</description>
<item>
<title>title of article</title>
<link>http://yourwebsite.com/</link>
<description><![CDATA[<img src=http://yourwebsite.com/i.php?k=d88d4e2b336966b5389837832 width=100 height=100>
<BR>article content<BR>]]></description>
<ContentItem Href="http://yourwebiste.com/i.php?k=d88d4e2b336966b538983783230051c7">
<MediaType FormalName="Picture" />
<MimeType FormalName="image/jpg" />
<Property FormalName="caption" value="Nick Carter" />
</ContentItem>
</xml>
PHP代码:
<?php
$doc = new DOMDocument();
$doc->load('http://yourwebsite.com/clients/d51b83e5/index.xml');
$xpath = new DOMXpath($doc);
$nodeLists = $xpath->query ('//ContentItem[@Href]');
$arrFeeds = array();
foreach ($doc->getElementsByTagName('item') as $node) {
$itemRSS = array (
'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
'ContentItem'=>$nodeLists->item(0)->getAttribute('Href'),
);
array_push($arrFeeds, $itemRSS);
}
echo file_get_contents("http://yourwebsite.com/clients/d51b83e5/index.xml");
$url = '';
$img = 'C:\xampp\htdocs\trial\images\image.jpg';
file_put_contents($img, file_get_contents($url));
?>
我非常感谢你对此的帮助。提前致谢。
答案 0 :(得分:0)
您检索<ContentItem Href>
的代码有点扭曲,但对我来说似乎有效。
您可以通过以下方式简化它:
$nodeLists = $xpath->query ('//ContentItem[@Href]');
foreach( $nodeLists as $node )
{
$itemRSS = array (
'title' => $node->parentNode->getElementsByTagName('title')->item(0)->nodeValue,
'ContentItem' => $node->getAttribute('Href'),
);
/* Following syntax is equivalent to array_push() when you add only one item to array: */
$arrFeeds[] = $itemRSS;
}
要仅检索新图像,我们可以帮助您进行猜测。如果URL中的图像名称是唯一的,您可以使用它来保存图片并检查已保存的文件。
在您的示例中,链接为:
http://yourwebiste.com/i.php?k=d88d4e2b336966b538983783230051c7
所以,使用此代码:
$url = parse_url( 'http://yourwebiste.com/i.php?k=d88d4e2b336966b538983783230051c7' );
parse_str( $url['query'], $query );
在$query['k']
中你有:
d88d4e2b336966b538983783230051c7
如果要将其用作唯一文件名,可以编写代码以这种方式保存图像:
$localPath = '/Your/Path/To/Image/Directory';
foreach( $arrFeeds as $feed )
{
$url = parse_url( $feed['ContentItem'] );
parse_str( $url['query'], $query );
$localName = "$localPath/{$query['k']}.jpg";
if( file_exists( $localName ) )
{
echo "Already downloaded: '$localName'".PHP_EOL;
}
else
{
$data = file_get_contents( $feed['ContentItem'] );
if( ! $data )
{
echo "Error downloading '{$feed['ContentItem']}'".PHP_EOL;
}
else
{
if( ! file_put_contents( $localName, $data ) )
{
echo "Error saving '$localName'".PHP_EOL;
}
else
{
echo "'$localName' successful saved".PHP_EOL;
}
}
}
}