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

31.05.2018

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?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:

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


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