Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?
- $_SERVER['DOCUMENT_ROOT']="/home/bitrix/www";
- define("NO_KEEP_STATISTIC", true);
- define("NOT_CHECK_PERMISSIONS", true);
- // подгружаем пролог
- require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
- // отключаем таймаут
- set_time_limit(0);
- // ограничения по памяти
- ini_set('memory_limit', '2048M');
- // выполняем все действия от админа битрикса
- global $USER;
- $USER->Authorize(1);
- CModule::IncludeModule('iblock');
- $iblock_id = 1;
- $start = microtime(true);
- $date = date("d/m/Y"); // Текущая дата
- $content = simplexml_load_file("https://www.cbr.ru/scripts/XML_daily.asp?date_req=".$date);
- foreach($content->Valute as $cur) {
- if($cur->NumCode == 036) { $aud = str_replace(",", ".", $cur->Value); } // Австралийский доллар
- if($cur->NumCode == 826) { $gbr = str_replace(",", ".", $cur->Value); } // Фунт стерлингов Соединенного королевства
- if($cur->NumCode == 974) { $byr = str_replace(",", ".", $cur->Value); } // Белорусских рублей
- if($cur->NumCode == 208) { $dkk = str_replace(",", ".", $cur->Value); } // Датских крон
- if($cur->NumCode == 840) { $usd = str_replace(",", ".", $cur->Value); } // Доллар США
- if($cur->NumCode == 978) { $eur = str_replace(",", ".", $cur->Value); } // Евро
- if($cur->NumCode == 352) { $isk = str_replace(",", ".", $cur->Value); } // Исландских крон
- if($cur->NumCode == 398) { $kzt = str_replace(",", ".", $cur->Value); } // Казахстанских тенге
- if($cur->NumCode == 124) { $cad = str_replace(",", ".", $cur->Value); } // Канадский доллар
- if($cur->NumCode == 578) { $nok = str_replace(",", ".", $cur->Value); } // Норвежских крон
- if($cur->NumCode == 960) { $xdr = str_replace(",", ".", $cur->Value); } // СДР (специальные права заимствования)
- if($cur->NumCode == 702) { $sgd = str_replace(",", ".", $cur->Value); } // Сингапурский доллар
- if($cur->NumCode == 949) { $try = str_replace(",", ".", $cur->Value); } // Турецкая лира
- if($cur->NumCode == 980) { $uah = str_replace(",", ".", $cur->Value); } // Украинских гривен
- if($cur->NumCode == 752) { $sek = str_replace(",", ".", $cur->Value); } // Шведских крон
- if($cur->NumCode == 756) { $chf = str_replace(",", ".", $cur->Value); } // Швейцарский франк
- if($cur->NumCode == 392) { $jpy = str_replace(",", ".", $cur->Value); } // Японских иен
- }
- function getSectionIdByCode($iblock_id, $sCategory) {
- $dbSection = CIBlockSection::GetList(
- Array(),
- Array(
- 'IBLOCK_ID' => $iblock_id,
- 'ACTIVE' => 'Y',
- 'CODE' => $sCategory,
- ),
- false
- );
- while( $arSection = $dbSection-> GetNext() ){
- $SID[] = $arSection['ID'];
- }
- return ($SID[0]);
- }
- // Запись элементов в инфоблок.
- $elements = CIBlockElement::GetList(Array(), Array("IBLOCK_ID" => $iblock_id, "ACTIVE" => "Y"), false, false, Array("ID", "NAME", "IBLOCK_SECTION_ID", "PROPERTY_articul"));
- while($ar_fields = $elements->GetNext()){
- $elems[] = $ar_fields;
- }
- function searchElementArr($articul, $el)
- {
- foreach ($el as $i => $element) {
- if ($element["PROPERTY_ARTICUL_VALUE"] == $articul) {
- return $element["ID"];
- }
- }
- }
- function createSection($iblock_id, $code, $name, $sCategory) {
- global $ID;
- $bs = new CIBlockSection;
- $arFields = Array(
- "ACTIVE" => "Y",
- "CODE" => $code,
- "IBLOCK_ID" => $iblock_id,
- "IBLOCK_SECTION_ID" => (!empty($sCategory) ? getSectionIdByCode($iblock_id, $sCategory) : ""),
- "NAME" => $name,
- "SORT" => "500"
- );
- $ID = $bs->Add($arFields);
- }
- $soapClientParams = array('connection_timeout' => 300);
- $soapClient = new SoapClient("https://api.treolan.ru/webservices/treolan.wsdl",$soapClientParams);
- try {
- $param = array(
- 'Login' => '***',
- 'password' => '***',
- 'category' => '',
- 'vendorid' => 0,
- 'keywords' => '',
- 'criterion' => 0,
- 'inArticul' => 0,
- 'inName' => 0,
- 'inMark' => 0,
- 'ShowNc' => 0);
- $info = $soapClient->__call("GenCatalogV2", $param);
- $arResult = ($info['Result']);
- $xml = simplexml_load_string($arResult);
- $json = json_encode($xml);
- $xmlArr = json_decode($json, true);
- }
- catch (SoapFault $fault) {
- print("Sorry, WS returned the following ERROR:
- ".$fault->faultcode."-".$fault->faultstring);
- }
- function recarray($ar, $searchfor) {
- static $result = array();
- foreach($ar as $k => $v) {
- if ($k === $searchfor) $result[] = $v;
- if (is_array($ar[$k])) recarray($v, $searchfor);
- }
- return $result;
- }
- $result = recarray($xmlArr, '@attributes');
- function TrimArray($Input){
- if (!is_array($Input))
- return trim($Input);
- return array_map('TrimArray', $Input);
- }
- $add_item = 0;
- $error_item = 0;
- $update_item = 0;
- $no_parent = 0;
- $parent = 0;
- $upd_sect = 0;
- foreach ($result as $i => $attr) {
- $trimArr = TrimArray($attr);
- if (array_key_exists('dr', $trimArr)) {
- if (empty(getSectionIdByCode($iblock_id, $trimArr["id"]))) {
- if ($trimArr["parent"]=="04030AB1-678B-457D-8976-AC7297C65CE6") {
- $no_parent++;
- createSection($iblock_id, $trimArr["id"], $trimArr["name"], "");
- } else {
- $parent++;
- createSection($iblock_id, $trimArr["id"], $trimArr["name"], $trimArr["parent"]);
- }
- $category_id = $ID;
- } else {
- $upd_sect++;
- $bs = new CIBlockSection;
- $arFields = Array(
- "IBLOCK_SECTION_ID" => ($trimArr["parent"] !== "04030AB1-678B-457D-8976-AC7297C65CE6" ? getSectionIdByCode($iblock_id, $trimArr["parent"]) : ""),
- "IBLOCK_ID" => $iblock_id,
- );
- $res = $bs->Update(getSectionIdByCode($iblock_id, $trimArr["id"]), $arFields);
- $category_id = getSectionIdByCode($iblock_id, $trimArr["id"]);
- }
- } else {
- $el = new CIBlockElement;
- if ($trimArr["currency"] == "USD") {
- $curr = "USD";
- $price = round($trimArr["price"] * $usd, 2);
- } else {
- $curr = "RUB";
- }
- // конвертация валют
- switch ($trimArr["currency"]) {
- case "USD":
- $curr = "RUB";
- $price = round($trimArr["price"] * $usd, 2);
- $dprice = round($trimArr["dprice"] * $usd, 2);
- break;
- default:
- $curr = $trimArr["currency"];
- $price = $trimArr["price"];
- $dprice = $trimArr["dprice"];
- }
- $arLoadProductArray = Array(
- "IBLOCK_SECTION_ID" => $category_id,
- "IBLOCK_ID" => $iblock_id,
- "PROPERTY_VALUES" => array(
- "id" => $trimArr["id"],
- "prid" => $trimArr["prid"],
- "articul" => strtoupper($trimArr["articul"]),
- "vendor" => $trimArr["vendor"],
- "vendor_id" => $trimArr["vendor-id"],
- "gp" => $trimArr["gp"],
- "price" => $price,
- "dprice" => $dprice,
- "currency" => $curr,
- "discount" => $trimArr["discount"],
- "outoftrade" => $trimArr["outoftrade"],
- "uchmark" => $trimArr["uchmark"],
- "sale" => $trimArr["sale"],
- "freenom" => $trimArr["freenom"],
- "freeptrans" => $trimArr["freeptrans"],
- "ntdate" => $trimArr["ntdate"],
- "ntstatus" => $trimArr["ntstatus"],
- "GTIN" => $trimArr["GTIN"],
- ),
- "NAME" => $trimArr["name"],
- "ACTIVE" => "Y",
- );
- if (empty(searchElementArr($trimArr["articul"], $elems)) && !empty($trimArr["articul"])) {
- if($PRODUCT_ID = $el->Add($arLoadProductArray))
- $add_item++;
- else
- $error_item++;
- } else {
- $el->Update(searchElementArr($trimArr["articul"], $elems), $arLoadProductArray);
- $update_item++;
- }
- }
- }
- $finish = microtime(true);
- $delta = $finish - $start;
- echo round($delta, 2)." сек. \n";
- echo "Создано не родительских разделов: ".$no_parent."\n";
- echo "Создано родительских разделов: ".$parent."\n";
- echo "Изменено разделов: ".$upd_sect."\n";
- echo "Добавлено товаров: ".$add_item."\n";
- echo "Товаров ошибками: ".$error_item."\n";
- echo "Изменено товаров: ".$update_item."\n";
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement