Парсер Fapi для сайта автозапчастей на Битриксе


https://fapi.iisis.ru/api-dostup
https://app.swaggerhub.com/apis/serp83/fapi/1.0.4#/
define("FAPI_API_KEY", 'XXXXXXXXXXXXXXX'); //это ключ, который вам выдают для доступа
Получаем список производителей с FAPI
function GetBrandsFapi(){
    $url = 'http://fapi.iisis.ru/fapi/v2/manufacturerList?ui='.FAPI_API_KEY;
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
    $result = curl_exec($curl);
    curl_close($curl);
    return $result;
} 
Получить картинку детали с FAPI
function GetImageFapi($mfi,$numDetail){
   $url = 'https://static.fapi.iisis.ru/fapi/v2/imageList?ui='.FAPI_API_KEY;
   $result = '';
   if(!empty($mfi) && !empty($numDetail)){
   $numDetail = urlencode($numDetail);
   $url = $url.'&mfi='.$mfi."&n=".$numDetail."&width=1000&imgd=false";

   $curl = curl_init();
   curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
    $result = curl_exec($curl);     
   curl_close($curl);       
   }
   return $result;
}
Получить применяемость с FAPI
function GetApplicabilityFapi($mfi,$numDetail){
   $url = 'https://fapi.iisis.ru/fapi/v2/productApplicabilityList?ui='.FAPI_API_KEY;
   $result = '';
   if(!empty($mfi) && !empty($numDetail)){
   $numDetail = urlencode($numDetail);
   $url = $url.'&mfi='.$mfi."&n=".$numDetail;      
   $curl = curl_init();
   curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
        $result = curl_exec($curl);     
        curl_close($curl);       
   }
   return $result;
}
получить список аналогов для детали с FAPI
function GetAnalogsFapi($mfi,$numDetail){
   $url = 'https://fapi.iisis.ru/fapi/v2/analogList?ui='.FAPI_API_KEY;
   $result = '';
   if(!empty($mfi) && !empty($numDetail)){
    $numDetail = urlencode($numDetail);
   $url = $url.'&mfi='.$mfi."&n=".$numDetail."&r=2&O=CORRECT_AR";      
   $curl = curl_init();
   curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
        $result = curl_exec($curl);     
        curl_close($curl);       
   }
   return $result;
}

Заполняем бренды

$result = GetBrandsFapi();
$result = json_decode($result);

$arBrandsFapi = array();
if(property_exists($result,'mf')){
   foreach ($result->mf as $item) {
      if(property_exists($item,'dbi') && property_exists($item,'ds')){             
        $arBrands[$item->dbi] = $item->ds;
      }
   }
}

В инфоблоке брендов завела свойство MFI типа строка
обновляем их
CModule::IncludeModule('iblock');
$arSelect = Array("ID", "NAME");
$arFilter = Array("IBLOCK_ID"=>$iblockBrandsId); 
$res = CIBlockElement::GetList(Array("id"=>"asc"), $arFilter, false, Array(), $arSelect);
while ($arBrand = $res->Fetch()) {   
        $brandName = strtoupper($arBrand["NAME"]);
   $brandName = str_replace(array(" ","-","'",'/'), "", $brandName);        
       $mfi = array_search($brandName, $arBrandsFapi);
       if($mfi !== false){                           
           CIBlockElement::SetPropertyValuesEx($arBrand["ID"], false, array("MFI"=>$mfi));
       }
       else{
          echo $brandName." не найден<br>"; 
       }
}
функция для отбора брендов
function GetBrandsByFilter($iblockBrandsId,$filter=array()){
   $arBrands = array();
   if(!empty($filter) && CModule::IncludeModule('iblock')){      
      $arSelect = Array("ID", "NAME","PROPERTY_MFI");
      $arFilter = Array(
         "IBLOCK_ID"=>$iblockBrandsId, 
         "ID" => $filter,
         "!PROPERTY_MFI"=>false
         
      );
      $res = CIBlockElement::GetList(Array("id"=>"asc"), $arFilter, false, Array("nPageSize"=>500,"iNumPage"=>1), $arSelect);   
      while ($arBrand = $res->Fetch()) {
         $arBrands[$arBrand["ID"]] = $arBrand;
      }
   }
   return $arBrands;
}