2016-04-23 7 views
1

私はいくつかの助けていただきたいと思います。私は 'file_get_contents'を使用してXMLフィードから画像を保存しようとしています。しかし、問題は、今の時点で1つの画像しか取り込まれておらず、URLに入力されたときにも同様です。フィードを更新するたびに画像を自動的に保存するコードを探していますが、既に保存されている画像ではなく新しい画像のみを保存します。また、問題がある、そのリンクを抽出することは容易ではありません 'のContentItem' タグ、内側にあるxmlタグを使用して一度に 'file_get_contents'を使用して複数の画像を保存するには

これは私のXMLフィードコードです:

 <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コード:

​​

本当にありがとうございます。前もって感謝します。

答えて

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 

、このコードで:あなたが持っている$query['k']

$url = parse_url('http://yourwebiste.com/i.php?k=d88d4e2b336966b538983783230051c7'); 
parse_str($url['query'], $query); 

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; 
      } 
     } 
    } 
} 
+0

ありがとうございました!これは完全に機能します。私はあなたに本当に感謝しています。 :) – ika

関連する問題