Advertisement
SpeakeazyYT

Untitled

Jul 5th, 2019
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.07 KB | None | 0 0
  1. <?
  2. $_SERVER['DOCUMENT_ROOT']="/home/bitrix/www";
  3.  
  4. define("NO_KEEP_STATISTIC", true);
  5. define("NOT_CHECK_PERMISSIONS", true);
  6.  
  7. // подгружаем пролог
  8. require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
  9.  
  10. // отключаем таймаут
  11. set_time_limit(0);
  12.  
  13. // ограничения по памяти
  14. ini_set('memory_limit', '2048M');
  15.  
  16. // выполняем все действия от админа битрикса
  17. global $USER;
  18. $USER->Authorize(1);
  19. CModule::IncludeModule('iblock');
  20.  
  21. $iblock_id = 1;
  22.  
  23. $start = microtime(true);
  24.  
  25. $date = date("d/m/Y"); // Текущая дата
  26. $content = simplexml_load_file("https://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date);
  27.  
  28. foreach($content->Valute as $cur) {
  29.  
  30.     if($cur->NumCode == 036) { $aud = str_replace(",", ".", $cur->Value); } // Австралийский доллар
  31.     if($cur->NumCode == 826) { $gbr = str_replace(",", ".", $cur->Value); } // Фунт стерлингов Соединенного королевства
  32.     if($cur->NumCode == 974) { $byr = str_replace(",", ".", $cur->Value); } // Белорусских рублей
  33.     if($cur->NumCode == 208) { $dkk = str_replace(",", ".", $cur->Value); } // Датских крон
  34.     if($cur->NumCode == 840) { $usd = str_replace(",", ".", $cur->Value); } // Доллар США
  35.     if($cur->NumCode == 978) { $eur = str_replace(",", ".", $cur->Value); } // Евро
  36.     if($cur->NumCode == 352) { $isk = str_replace(",", ".", $cur->Value); } // Исландских крон
  37.     if($cur->NumCode == 398) { $kzt = str_replace(",", ".", $cur->Value); } // Казахстанских тенге
  38.     if($cur->NumCode == 124) { $cad = str_replace(",", ".", $cur->Value); } // Канадский доллар
  39.     if($cur->NumCode == 578) { $nok = str_replace(",", ".", $cur->Value); } // Норвежских крон
  40.     if($cur->NumCode == 960) { $xdr = str_replace(",", ".", $cur->Value); } // СДР (специальные права заимствования)
  41.     if($cur->NumCode == 702) { $sgd = str_replace(",", ".", $cur->Value); } // Сингапурский доллар
  42.     if($cur->NumCode == 949) { $try = str_replace(",", ".", $cur->Value); } // Турецкая лира
  43.     if($cur->NumCode == 980) { $uah = str_replace(",", ".", $cur->Value); } // Украинских гривен
  44.     if($cur->NumCode == 752) { $sek = str_replace(",", ".", $cur->Value); } // Шведских крон
  45.     if($cur->NumCode == 756) { $chf = str_replace(",", ".", $cur->Value); } // Швейцарский франк
  46.     if($cur->NumCode == 392) { $jpy = str_replace(",", ".", $cur->Value); } // Японских иен
  47.    
  48. }
  49.  
  50. function getSectionIdByCode($iblock_id, $sCategory) {
  51.    $dbSection = CIBlockSection::GetList(
  52.       Array(),
  53.       Array(
  54.         'IBLOCK_ID' => $iblock_id,
  55.         'ACTIVE' => 'Y',
  56.         'CODE' => $sCategory,
  57.       ),
  58.       false
  59.    );
  60.  
  61.    while( $arSection = $dbSection-> GetNext() ){
  62.        $SID[] = $arSection['ID'];
  63.    }
  64.  
  65.    return ($SID[0]);
  66. }
  67.  
  68. // Запись элементов в инфоблок.
  69. $elements = CIBlockElement::GetList(Array(), Array("IBLOCK_ID" => $iblock_id, "ACTIVE" => "Y"), false, false, Array("ID", "NAME", "IBLOCK_SECTION_ID", "PROPERTY_articul"));
  70.  
  71. while($ar_fields = $elements->GetNext()){
  72.     $elems[] = $ar_fields;
  73. }
  74.  
  75. function searchElementArr($articul, $el)
  76. {
  77.     foreach ($el as $i => $element) {
  78.         if ($element["PROPERTY_ARTICUL_VALUE"] == $articul) {
  79.             return $element["ID"];
  80.         }
  81.     }
  82. }
  83.  
  84. function createSection($iblock_id, $code, $name, $sCategory) {
  85.     global $ID;
  86.    
  87.     $bs = new CIBlockSection;
  88.     $arFields = Array(
  89.       "ACTIVE" => "Y",
  90.       "CODE" => $code,
  91.       "IBLOCK_ID" => $iblock_id,
  92.       "IBLOCK_SECTION_ID" => (!empty($sCategory) ? getSectionIdByCode($iblock_id, $sCategory) : ""),
  93.       "NAME" => $name,
  94.       "SORT" => "500"
  95.     );
  96.  
  97.     $ID = $bs->Add($arFields);
  98. }
  99.  
  100. $soapClientParams = array('connection_timeout' => 300);
  101. $soapClient = new SoapClient("https://api.treolan.ru/webservices/treolan.wsdl",$soapClientParams);
  102. try {
  103.     $param = array(
  104.     'Login' => '***',
  105.     'password' => '***',
  106.     'category' => '',
  107.     'vendorid' => 0,
  108.     'keywords' => '',
  109.     'criterion' => 0,
  110.     'inArticul' => 0,
  111.     'inName' => 0,
  112.     'inMark' => 0,
  113.     'ShowNc' => 0);
  114.     $info = $soapClient->__call("GenCatalogV2", $param);
  115.     $arResult = ($info['Result']);
  116.  
  117.     $xml = simplexml_load_string($arResult);
  118.     $json  = json_encode($xml);
  119.     $xmlArr = json_decode($json, true);
  120. }
  121. catch (SoapFault $fault) {
  122.     print("Sorry, WS returned the following ERROR:
  123.     ".$fault->faultcode."-".$fault->faultstring);
  124. }
  125.  
  126. function recarray($ar, $searchfor) {
  127.     static $result = array();
  128.  
  129.     foreach($ar as $k => $v) {
  130.     if ($k === $searchfor) $result[] = $v;
  131.         if (is_array($ar[$k]))  recarray($v, $searchfor);
  132.     }
  133.    
  134.     return $result;
  135. }
  136.  
  137. $result = recarray($xmlArr, '@attributes');
  138.  
  139. function TrimArray($Input){
  140.  
  141.     if (!is_array($Input))
  142.         return trim($Input);
  143.  
  144.     return array_map('TrimArray', $Input);
  145. }
  146.  
  147. $add_item = 0;
  148. $error_item = 0;
  149. $update_item = 0;
  150.  
  151. $no_parent = 0;
  152. $parent = 0;
  153. $upd_sect = 0;
  154.  
  155. foreach ($result as $i => $attr) {
  156.     $trimArr = TrimArray($attr);
  157.     if (array_key_exists('dr', $trimArr)) {
  158.         if (empty(getSectionIdByCode($iblock_id, $trimArr["id"]))) {
  159.             if ($trimArr["parent"]=="04030AB1-678B-457D-8976-AC7297C65CE6") {
  160.                 $no_parent++;
  161.                 createSection($iblock_id, $trimArr["id"], $trimArr["name"], "");
  162.             } else {
  163.                 $parent++;
  164.                 createSection($iblock_id, $trimArr["id"], $trimArr["name"], $trimArr["parent"]);
  165.             }
  166.            
  167.             $category_id = $ID;
  168.         } else {
  169.             $upd_sect++;
  170.             $bs = new CIBlockSection;
  171.             $arFields = Array(
  172.               "IBLOCK_SECTION_ID" => ($trimArr["parent"] !== "04030AB1-678B-457D-8976-AC7297C65CE6" ? getSectionIdByCode($iblock_id, $trimArr["parent"]) : ""),
  173.               "IBLOCK_ID" => $iblock_id,
  174.             );
  175.             $res = $bs->Update(getSectionIdByCode($iblock_id, $trimArr["id"]), $arFields);
  176.            
  177.             $category_id = getSectionIdByCode($iblock_id, $trimArr["id"]);
  178.         }
  179.     } else {
  180.         $el = new CIBlockElement;
  181.  
  182.         if ($trimArr["currency"] == "USD") {
  183.             $curr = "USD";
  184.             $price = round($trimArr["price"] * $usd, 2);
  185.         } else {
  186.             $curr = "RUB";
  187.            
  188.         }
  189.        
  190.         // конвертация валют
  191.         switch ($trimArr["currency"]) {
  192.             case "USD":
  193.                 $curr = "RUB";
  194.                 $price = round($trimArr["price"] * $usd, 2);
  195.                 $dprice = round($trimArr["dprice"] * $usd, 2);
  196.                 break;
  197.             default:
  198.                 $curr = $trimArr["currency"];
  199.                 $price = $trimArr["price"];
  200.                 $dprice = $trimArr["dprice"];
  201.         }
  202.  
  203.         $arLoadProductArray = Array(
  204.             "IBLOCK_SECTION_ID" => $category_id,
  205.             "IBLOCK_ID" => $iblock_id,
  206.             "PROPERTY_VALUES" => array(
  207.                 "id" => $trimArr["id"],
  208.                 "prid" => $trimArr["prid"],
  209.                 "articul" => strtoupper($trimArr["articul"]),
  210.                 "vendor" => $trimArr["vendor"],
  211.                 "vendor_id" => $trimArr["vendor-id"],
  212.                 "gp" => $trimArr["gp"],
  213.                 "price" => $price,
  214.                 "dprice" => $dprice,
  215.                 "currency" => $curr,
  216.                 "discount" => $trimArr["discount"],
  217.                 "outoftrade" => $trimArr["outoftrade"],
  218.                 "uchmark" => $trimArr["uchmark"],
  219.                 "sale" => $trimArr["sale"],
  220.                 "freenom" => $trimArr["freenom"],
  221.                 "freeptrans" => $trimArr["freeptrans"],
  222.                 "ntdate" => $trimArr["ntdate"],
  223.                 "ntstatus" => $trimArr["ntstatus"],
  224.                 "GTIN" => $trimArr["GTIN"],
  225.             ),
  226.             "NAME" => $trimArr["name"],
  227.             "ACTIVE" => "Y",
  228.         );
  229.  
  230.         if (empty(searchElementArr($trimArr["articul"], $elems)) && !empty($trimArr["articul"])) {
  231.             if($PRODUCT_ID = $el->Add($arLoadProductArray))
  232.                 $add_item++;
  233.             else
  234.                 $error_item++;
  235.         } else {
  236.             $el->Update(searchElementArr($trimArr["articul"], $elems), $arLoadProductArray);
  237.             $update_item++;
  238.         }
  239.     }
  240. }
  241.  
  242.  
  243. $finish = microtime(true);
  244. $delta = $finish - $start;
  245. echo round($delta, 2)." сек. \n";
  246.  
  247. echo "Создано не родительских разделов: ".$no_parent."\n";
  248. echo "Создано родительских разделов: ".$parent."\n";
  249. echo "Изменено разделов: ".$upd_sect."\n";
  250.  
  251. echo "Добавлено товаров: ".$add_item."\n";
  252. echo "Товаров ошибками: ".$error_item."\n";
  253. echo "Изменено товаров: ".$update_item."\n";
  254.  
  255. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement