Проект: Поставщики
Шаблоны выгрузки
В настоящий момент Diggernaut поддерживает шаблоны только для формата XML.
Шаблон выгрузки позволяет настроить необходимую структуру данных при экспорте в ручном режиме или через API. Переключите редактор сценария диггера в режим Экспорт кликнув мышкой на соответствующую закладку и выбрав формат XML:

Если у диггера присутствует шаблон выгрузки данных, Diggernaut подключит его автоматически как только вы попытаетесь скачать данные из любой сессии или через API.

Шаблон представляет собой XML документ со встроенными управляющими структурами, похожими на язык шаблонов Django. Все управляющие элементы этого языка достаточно просты и не требуют длительного изучения. Вы можете использовать официальную документацию для ознакомления со всеми командами.
Обратите внимание!
Diggernaut имеет небольшие отличия от языка шаблонов Django в работе некоторых команд. Более подробно об этих отличиях вы можете прочитать здесь.
В качестве бонуса мы приводим пример шаблона выгрузки данных с одного из рабочих диггеров :)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="{{current_datetime_utc.strftime("%Y-%m-%dT%H:%M:%S")}}">
<shop>
<categories>
<category id="1">Матрасы</category>
<category id="2">Кровати</category>
<category id="3">Наматрасники</category>
<category id="4">Основания</category>
<category id="5">Подушки</category>
<category id="6">Мебель</category>
<category id="7" parentId="6">Декоративные подушки</category>
<category id="8" parentId="6">Зеркала и столики</category>
<category id="9" parentId="6">Кресла</category>
<category id="10" parentId="6">Пуфики и банкетки</category>
<category id="11" parentId="6">Тумбы и комоды</category>
<category id="12" parentId="6">Шкафы и стеллажи</category>
</categories>
<offers date="{{current_datetime_utc.strftime("%Y-%m-%dT%H:%M:%S")}}">
{% for dt in data %}
{% if dt.offer.categoryId == "1" %}
<offer id="{{dt.offer.checksum}}">
<categoryId>{% if dt.offer.subcategoryId %}{{dt.offer.subcategoryId}}{% else %}{{dt.offer.categoryId}}{% endif %}</categoryId>
<name>{{dt.offer.model}}</name>
<description><![CDATA[
{{dt.offer.description|safe}}
]]>
</description>
{% if dt.offer.original_url %}
<param name="URL для парсинга">{{dt.offer.original_url}}</param>{% endif %}
{% if dt.offer.brand %}
<param name="Бренд">{{dt.offer.brand}}</param>{% endif %}
{% if dt.offer.warranty %}{% if dt.offer.warranty != -1 %}
<param name="Гарантия">{{dt.offer.warranty}}</param>{% endif %}{% endif %}
{% if dt.offer.ves %}
<param name="Вес">{{dt.offer.ves}}</param>{% endif %}
{% if dt.offer.lifetime %}{% if dt.offer.lifetime != -1 %}
<param name="Срок службы">{{dt.offer.lifetime}}</param>{% endif %}{% endif %}
{% if dt.offer.hardness %}
<param name="Жесткость">{{dt.offer.hardness}}</param>{% endif %}
{% if dt.offer.hardness_side_1 %}
<param name="Жесткость 1-й стороны">{{dt.offer.hardness_side_1}}</param>{% endif %}
{% if dt.offer.hardness_side_2 %}
<param name="Жесткость 2-й стороны">{{dt.offer.hardness_side_2}}</param>{% endif %}
{% if dt.offer.height%}{% if dt.offer.height !="0"%}
<param name="Высота">{{dt.offer.height}}</param>{% endif %}{% endif %}
{% if dt.offer.width %}
<param name="Ширина">{{dt.offer.width}}</param>{% endif %}
{% if dt.offer.length %}
<param name="Длина">{{dt.offer.length}}</param>{% endif %}
{% if dt.offer.weight_diff %}{% if dt.offer.weight_diff != -1 %}
<param name="Допустимая разница в весе">{{dt.offer.weight_diff}}</param>{% endif %}{% endif %}
{% if dt.offer.load %}{% if dt.offer.load != -1 %}
<param name="Нагрузка на спальное место">{{dt.offer.load}}</param>{% endif %}{% endif %}
{% if dt.offer.is_roll %}{% if dt.offer.is_roll == "1" %}
<param name="В рулоне">Y</param>{% endif %}{% endif %}
{% if dt.offer.is_round %}{% if dt.offer.is_round == "1" %}
<param name="Круглый">Y</param>{% endif %}{% endif %}
{% if dt.offer.is_child %}{% if dt.offer.is_child == "1" %}
<param name="Детский">Y</param>{% endif %}{% endif %}
{% if dt.offer.transform %}{% if dt.offer.transform != -1 %}
<param name="Трансформация">{{dt.offer.transform}}</param>{% endif %}{% endif %}
{% if dt.offer.basis %}
<param name="Основа">{{dt.offer.basis}}</param>{% endif %}
{% if dt.offer.natur %}
<param name="Натуральность компонентов">{{dt.offer.natur}}</param>{% endif %}
{% if dt.offer.deepening %}
<param name="Углубление под матрас">{{dt.offer.deepening}}</param>{% endif %}
{% if dt.offer.height_izn %}
<param name="Высота изножья">{{dt.offer.height_izn}}</param>{% endif %}
{% if dt.offer.height_on_pol %}
<param name="Просвет над полом">{{dt.offer.height_on_pol}}</param>{% endif %}
{% if dt.offer.height_bok %}
<param name="Высота боковины">{{dt.offer.height_bok}}</param>{% endif %}
{% if dt.offer.status %}
<param name="Статус">{{dt.offer.status}}</param>{% endif %}
{% if dt.offer.height_nozhek %}
<param name="Высота ножек">{{dt.offer.height_nozhek}}</param>{% endif %}
{% for doc in dt.offer.documents %}
<param name="Документы" desc="{{doc.name}}">{{doc.url}}</param>
{% endfor %}
{% for pic in dt.offer.pictures %}{% if pic.picture|length >0 %}
<param name="Фото">{{pic.picture}}</param>{% endif %}
{% endfor %}
{% for pic in dt.offer.sizepicture %}
<param name="Фото с размерами">{{pic}}</param>
{% endfor %}
{% for trait in dt.offer.traits %}
<param name="Особенности">{{trait.trait}}</param>
{% endfor %}
{% for youtube in dt.offer.youtube %}
<param name="Ссылка на youtube">{{youtube.src}}</param>
{% endfor %}
{% for layer in dt.offer.layers %}
<param name="Состав слоев">{{layer.layer}}</param>
{% endfor %}
{% for review in dt.offer.reviews %}
<comment>
{% if review.author %}<author>{{review.author}}</author>{% endif %}
{% if review.date %}<date>{{review.date}}</date>{% endif %}
{% if review.likes %}<like>{{review.likes}}</like>{% endif %}
{% if review.rating %}<rating>{{review.rating}}</rating>{% endif %}
{% if review.message %}<message>{{review.message}}</message>{% endif %}
<source>ormatek</source>
</comment>
{% endfor %}
{% for sku in dt.offer.sku %}
<sku>
{% for pic in sku.pictures %}
<param name="Фото">{{pic.picture}}</param>
{% endfor %}
{% for pic in sku.detail_pictures %}
<param name="Фото">{{pic.picture}}</param>
{% endfor %}
{% if sku.sizepicture %}
<param name="Фото с размерами">{{sku.sizepicture}}</param>
{% endif %}
{% if sku.discountper %}{% if sku.discountper !="0" %}
<param name="Процент скидки">{{sku.discountper}}</param>{% endif %}{% endif %}
{% if sku.width %}
<param name="Ширина" sku="Y">{{sku.width}}</param>{% endif %}
{% if sku.length %}
<param name="Длина" sku="Y">{{sku.length}}</param>{% endif %}
{% if sku.height %}
<param name="Высота" sku="Y">{{sku.height}}</param>{% endif %}
{% if sku.box %}
<param name="Чехол" sku="Y">{{sku.box}}</param>{% endif %}
{% if sku.price %}{% if sku.old_price %}{% if sku.old_price != sku.price %}
<param name="Старая цена">{{sku.old_price}}</param>{% endif %}{% endif %}
{% endif %}
{% if sku.width_g %}
<param name="Ширина габаритов">{{sku.width_g}}</param>{% endif %}
{% if sku.length_g %}
<param name="Длина габаритов">{{sku.length_g}}</param>{% endif %}
{% if sku.color %}
<param name="Цвет" sku="Y">{{sku.color}}</param>{% endif %}
{% if sku.material %}
<param name="Тип материала" sku="Y">{{sku.material}}</param>{% endif %}
<price>{{sku.price}}</price>
</sku>
{% endfor %}
</offer>
{% endif %}
{% endfor %}
</offers>
</shop>
</yml_catalog>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="2017-10-05T22:12:34">
<shop>
<categories>
<category id="1">Матрасы</category>
<category id="2">Кровати</category>
<category id="3">Наматрасники</category>
<category id="4">Основания</category>
<category id="5">Подушки</category>
<category id="6">Мебель</category>
<category id="7" parentId="6">Декоративные подушки</category>
<category id="8" parentId="6">Зеркала и столики</category>
<category id="9" parentId="6">Кресла</category>
<category id="10" parentId="6">Пуфики и банкетки</category>
<category id="11" parentId="6">Тумбы и комоды</category>
<category id="12" parentId="6">Шкафы и стеллажи</category>
</categories>
<offers date="2017-10-05T22:12:34">
<offer id="5df67cf15aab714e013ba00c19a62ec7">
<categoryId>5</categoryId>
<name>Подушка Light</name>
<description><![CDATA[
<div>
<p>Подушка эргономичной формы, изготовленная из экологически чистого материала.
Благодаря своей эластичности и особой форме подушка обеспечивает правильное положение головы,
что позволяет минимизировать мышечное напряжение, а также способствует полному расслаблению и
отдыху от дневной нагрузки.</p>
</div>
]]>
</description>
<param name="URL для парсинга">https://domain.com/catalog/pillows/product/pillow-light/123123123/</param>
<param name="Бренд">Отличный</param>
<param name="Гарантия">1.5</param>
<param name="Срок службы">3</param>
<param name="Жесткость 1-й стороны">Средний</param>
<param name="Жесткость 2-й стороны">Средний</param>
<param name="Высота">10.5</param>
<param name="Пружинный блок">0</param>
<param name="Фото">https://domain.com/upload/products/123.jpg</param>
<param name="Фото">https://domain.com/upload/products/456.jpg</param>
<param name="Особенности">Подушка эргономичной формы, изготовленная из экологически чистого материала.</param>
</offer>
</offers>
</shop>
</yml_catalog>
Если вы допустите ошибку в написании шаблона, Diggernaut выдаст сообщение об ошибке при попытке выгрузки данных, укажет место ее расположения в шаблоне и тип ошибки.
