Пишем фид для Google AdWords DSA под Bitrix CMS

Привет дорогой гость!

Сегодня хочу затронуть тему написания фидов для Bitrix и попробовать написать один из них для Google AdWords DSA (выгрузка товара в рекламную компанию). Сразу перехожу к делу, так — как сам не люблю прелюдии.

Что ждет Google AdWords DSA

Файл выгрузки в формате CSV в кодировке UTF-8 колонками:

Page URL,Custom label

https://www.example.com/1,FOUR_STAR;Brand

https://www.example.com/2,FOUR_STAR;Brand

В качестве Page URL — выгружаем ссылки на товары

Page URL отделяется от Custom label запятой

В качестве Custom label — выгружаем: Категорию товара и Бренд товара. Эти параметры разделены между собой точкой с запятой

Файл должен быть доступен для скачивания по ссылке.
(Ссылка может быть любой. Ниже просто пример):
http://somesite.com/google_price/GOOGLE_DSA.csv

к содержанию ↑

Пишем функцию для создания CSV и записи в него информации:

//Create cvs function
function create_csv_file( $data, $file = null, $col_delimiter = ';', $row_delimiter = "\r\n" ){
	if( ! is_array($data) )
		return false;
	if( $file && ! is_dir( dirname($file) ) )
		return false;
	// Empty string
	$CSV_str = '';
	// Foreach all data
	foreach( $data as $row ){
		$cols = array();
		foreach( $row as $col_val ){
			// strings must be in quotation marks ""
			// "
			if( $col_val && preg_match('/[",;\r\n]/', $col_val) ){
				// correct the line transfer
				if( $row_delimiter === "\r\n" ){
					$col_val = str_replace( "\r\n", '\n', $col_val );
					$col_val = str_replace( "\r", '', $col_val );
				}
				elseif( $row_delimiter === "\n" ){
					$col_val = str_replace( "\n", '\r', $col_val );
					$col_val = str_replace( "\r\r", '\r', $col_val );
				}
				$col_val = str_replace( '"', '""', $col_val ); //  "
				$col_val = '"'. $col_val .'"'; //  "
			}
			$cols[] = $col_val; // Add  column to data
		}
		$CSV_str .= implode( $col_delimiter, $cols ) . $row_delimiter; // Add string to data
	}
	$CSV_str = rtrim( $CSV_str, $row_delimiter );
	if( $file ){
		$CSV_str = iconv( "UTF-8", "cp1251",  $CSV_str );
		//create a csv file and write a string to it
		$done = file_put_contents( $file, $CSV_str );
		return $done ? $CSV_str : false;
	}
	return $CSV_str;
}
к содержанию ↑

Затем пишем механизм чтения товара под Bitrix CMS

Данный механизм будет вытягивать товар из инфо-блока каталога моего интернет магазина, собирать данные в массив и затем отправлять в созданный CVS.

$surl = 'http://www.site.com'; //Website url
$file_name = 'export_dsa.csv'; //File name
$path = '/export_dsa/'; //Path to file after server folder
$catalog_iblock_id = '1'; //Catalog iblock id
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
//Create head
$data = array
(
	array(
		'Page URL',
		'Custom label',
	)
);
//Products from catalog cicle
if(CModule::IncludeModule('iblock'))
{
	$arOrder = array();
	$arFilter = array("IBLOCK_ID"=>$catalog_iblock_id);
	$arSelectFields = array("ID",  "NAME", "DETAIL_PAGE_URL", "PROPERTY_CML2_MANUFACTURER");
	$rsElements = CIBlockElement::GetList($arOrder, $arFilter, FALSE, FALSE, $arSelectFields);
	while($arElement = $rsElements->GetNext())
	{
		array_push($data, 
			array(
				''.$surl.''.$arElement[DETAIL_PAGE_URL],
				''.$arElement[NAME].';'.$arElement[PROPERTY_CML2_MANUFACTURER_VALUE],
			) 
		);
	}
}
//Start
echo create_csv_file( $data, $_SERVER["DOCUMENT_ROOT"].''.$path.''.$file_name);
к содержанию ↑

Как выглядит собранный файл в итоге


<?php
/*
	Name: Export to google DSA
	Developer: Shevchuk A. A.
	Contacts: shevchuk-studio.pw, office@shevchuk-studio.pw, skype: andrew.shevchuk2
*/
$surl = 'http://www.dsp.land'; //Website url
$file_name = 'export_dsa.csv'; //File name
$path = '/export_dsa/'; //Path to file after server folder
$catalog_iblock_id = '1'; //Catalog iblock id
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
//Create head
$data = array
(
	array(
		'Page URL',
		'Custom label',
	)
);
//Products from catalog cicle
if(CModule::IncludeModule('iblock'))
{
	$arOrder = array();
	$arFilter = array("IBLOCK_ID"=>$catalog_iblock_id);
	$arSelectFields = array("ID",  "NAME", "DETAIL_PAGE_URL", "PROPERTY_CML2_MANUFACTURER");
	$rsElements = CIBlockElement::GetList($arOrder, $arFilter, FALSE, FALSE, $arSelectFields);
	while($arElement = $rsElements->GetNext())
	{
		array_push($data, 
			array(
				''.$surl.''.$arElement[DETAIL_PAGE_URL],
				''.$arElement[NAME].';'.$arElement[PROPERTY_CML2_MANUFACTURER_VALUE],
			) 
		);
	}
}
//Start
echo create_csv_file( $data, $_SERVER["DOCUMENT_ROOT"].''.$path.''.$file_name);
//Create cvs function
function create_csv_file( $data, $file = null, $col_delimiter = ';', $row_delimiter = "\r\n" ){
	if( ! is_array($data) )
		return false;
	if( $file && ! is_dir( dirname($file) ) )
		return false;
	// Empty string
	$CSV_str = '';
	// Foreach all data
	foreach( $data as $row ){
		$cols = array();
		foreach( $row as $col_val ){
			// strings must be in quotation marks ""
			// "
			if( $col_val && preg_match('/[",;\r\n]/', $col_val) ){
				// correct the line transfer
				if( $row_delimiter === "\r\n" ){
					$col_val = str_replace( "\r\n", '\n', $col_val );
					$col_val = str_replace( "\r", '', $col_val );
				}
				elseif( $row_delimiter === "\n" ){
					$col_val = str_replace( "\n", '\r', $col_val );
					$col_val = str_replace( "\r\r", '\r', $col_val );
				}
				$col_val = str_replace( '"', '""', $col_val ); //  "
				$col_val = '"'. $col_val .'"'; //  "
			}
			$cols[] = $col_val; // Add  column to data
		}
		$CSV_str .= implode( $col_delimiter, $cols ) . $row_delimiter; // Add string to data
	}
	$CSV_str = rtrim( $CSV_str, $row_delimiter );
	if( $file ){
		$CSV_str = iconv( "UTF-8", "cp1251",  $CSV_str );
		//create a csv file and write a string to it
		$done = file_put_contents( $file, $CSV_str );
		return $done ? $CSV_str : false;
	}
	return $CSV_str;
}
?>
к содержанию ↑

Результат работы кода

Закидываем файл с приведенным мною кодом в какую нибудь папку с предустановленным Bitrix CMS. Выполняем код и в результате работы данного фида мы получаем CSV файл, который сохранится в папку, указанную в переменной «$path», собственно на этот файл и делаем ссылку в кабинете Google AdWords DSA.

к содержанию ↑

Вывод

Данный пример подойдет не большим магазинам от 1 до 500 товаров, что бы сервер не убивать. Рекомендую поставить на CRON (например: выполнять данный скрипт 1 раз в сутки) для обновления CVS.

Скачать

Смотреть на GitHub

[Всего голосов: 1    Средний: 4/5]