Скрипт для парсинга YML

31.05.2018

Периодически нужно парсить YML файлы и, например, формировать таблицу изображений товаров. Также выводить каких картинок на сайт не хватает.

 
<?php
  ini_set('display_errors', '1');
  error_reporting(2047);

  function checkUrl($sUrl)
  {
    $oRet = new stdClass();
    $oRet->status = 'error';
    $oRet->result = '';
    $oRet->code = 0;

    $aOptions = array (
      CURLOPT_URL => $sUrl,
      CURLOPT_RETURNTRANSFER => 1,
      CURLOPT_TIMEOUT => 45,
      CURLOPT_VERBOSE => 0,
      CURLOPT_SSL_VERIFYHOST => 0,
      CURLOPT_SSL_VERIFYPEER => 0,
    );

    $ch = curl_init();
    curl_setopt_array($ch, $aOptions);
    $response = curl_exec($ch);
    
    if ($response)
    {
      $oRet->status = 'ok';
      //$oRet->result = $response; 
      //$oRet->result = json_decode($oRet->result, TRUE); 
    }
    else
    {
      $oRet->status = 'error';
      $oRet->result = 'Curl error: ' . curl_error($ch); 
    }
    $oRet->code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    

    return $oRet;
  }

  $oXml = simplexml_load_file('https://oddler.ru/yml/');

  foreach($oXml->shop->offers->offer as $oOffer)
  {
    $sPicUrl = $oOffer->picture;
    
    $oRes = checkUrl($sPicUrl);
    
    if($oRes->code != 200)
    {
      echo '<b>'.$sPicUrl.'</b><br />';
      echo '<a target="_blank" href="'.$oOffer->url.'">'.$oOffer->name.'</a><br />';
    }
    else
    {
      echo '<b>Error pic url: "'.$sPicUrl.'"</b><br />';
    }
    echo '<hr />';

  }

Вместо CURL, можно использовать get_headers:

 
$headers = get_headers('http://...');
$headers  = explode(' ',$headers [0]);
if ($headers [1] == 200) {
    // OK
} else {
    // Error
}


Яндекс.Метрика