2016-06-23 26 views
0

PHPとCURLを使用してsitemap.xmlからすべてのURLを抽出します。私のコードはコンテンツサイトマップで動作しますが(例:http://www.phanmemtoday.com/sitemap.xml?page=1)、サイトマップインデックスでは機能しません(例:http://www.phanmemtoday.com/sitemap.xml)。 私を助けてください。ありがとうございました!sitemap.xmlからすべてのURLをPHPで抽出CURL

<?php 
$sUrl="http://domain.com/sitemap.xml"; 

$aXmlLinks = array($sUrl); 
$aOtherLinks = array(); 
while (!empty($aXmlLinks)) { 
    foreach ($aXmlLinks as $i =>$sTmpUrl){ 
     unset($aXmlLinks[$i]); 
     $aTmp = getlinkfromxmlsitemap($sTmpUrl); 
     echo "Array temp link:<br>"; 
     print_r($aTmp); 
     foreach ($aTmp as $sTmpUrl2) { 
      if (strpos($sTmpUrl2, '.xml') !== false) { 
       array_push($aXmlLinks,$sTmpUrl2); 
      } else { 
       array_push($aOtherLinks,$sTmpUrl2); 
      } 
     } 
    } 
    echo "<br>Array xml link:<br>"; 
    print_r($aXmlLinks); 
    echo "<br>Array product link:<br>"; 
    print_r($aOtherLinks); 
    echo "<br>-----------------------------------------<br>"; 
} 
print_r($aOtherLinks); 


function getlinkfromxmlsitemap($sUrl) { 
    // echo "Get link from: $sUrl<br>"; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch,CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0"); 
    curl_setopt($ch, CURLOPT_URL, $sUrl); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    $links = array(); 
    $count = preg_match_all('@<loc>(.+?)<\/loc>@', $data, $matches); 
    for ($i = 0; $i < $count; ++$i) { 
     $links[] = $matches[0][$i]; 
    } 
    return $links; 
} 
?> 
+0

sitemap.xmlとは、少数の児童・サイトマップリンクを持っています。私はすべての子サイトマップのリンクをキャッチし、それらからすべてのページのリンクを抽出したい –

答えて

0

あなたのコードはうまく動作しますが、あなたはいくつかのことを向上させることができ、次の例のタールは、リンクあなたが探しているとネストされた配列が返されます確認してください。

<?php 
$sUrl1="http://www.phanmemtoday.com/sitemap.xml?page=1"; 
$sUrl2="http://www.phanmemtoday.com/sitemap.xml"; 

$aXmlLinks = array($sUrl1,$sUrl2); 
$aOtherLinks = array(); 
while (!empty($aXmlLinks)) { 
    foreach ($aXmlLinks as $i =>$sTmpUrl){ 
     unset($aXmlLinks[$i]); 
     $aTmp = getlinkfromxmlsitemap($sTmpUrl);   
     array_push($aOtherLinks,$aTmp);   
    } 
    echo "<br>Array xml link:<br>"; 
    print_r($aXmlLinks); 
    echo "<br>Array product link:<br>"; 
    print_r($aOtherLinks); 
    echo "<br>-----------------------------------------<br>"; 
} 
print_r($aOtherLinks); 


function getlinkfromxmlsitemap($sUrl) { 
    // echo "Get link from: $sUrl<br>"; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch,CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0"); 
    curl_setopt($ch, CURLOPT_URL, $sUrl); 
    $data = curl_exec($ch); 
    $error= curl_error($ch); 
    curl_close($ch); 
    $links = array(); 
    $count = preg_match_all('@<loc>(.+?)<\/loc>@', $data, $matches); 
    for ($i = 0; $i < $count; ++$i) { 
     $links[] = $matches[0][$i]; 
    } 
    return $links; 
} 
?> 
+0

うまくいきません。私は、サイトマップインデックスからすべての子サイトマップを取得し、子サイトマップから他のすべてのリンクをキャッチするスクリプトを作成したいと思います。 –

関連する問題