Манипулируем объектами
Работа с переменными
Как вы уже знаете, переменные контексто-независимы и поэтому их значения сохраняются на протяжении всей работы диггера. Этот факт может быть использован для объединения разрозненных по разным документам данных в единый объект. Для этого вы парсите один документ, сохраняете данные в переменный, а при парсинге другого документа - читаете значения переменных в регистр и записываете их в объект. Также переменные часто используются для подстановки значений в запросы или CSS селекторы.
Команда variable_set позволяет установить значение переменной. Она может быть использована в любом контексте, но если нотация команды подразумевает использование значения регистра - то такая нотация может быть использована только в блоковом контексте.
Обратите внимание!
Если в регистре пустое значение, и вы пытаетесь записать это пустое значение в переменную, команда будет проигнорирована, это сделано для того, чтобы отрабатывать случаи когда нужно сохранять предыдущее значение поля, если поле отсутствует в последующих циклах.
Для стирания переменной используйте команду variable_clear.
Ниже приведены различные примеры записи значений в переменные:
# ПЕРЕХОДИМ В БЛОКОВЫЙ КОНТЕКСТ
- find:
path: .somepath
do:
# ПАРСИМ КОНТЕНТ ИЗ БЛОКА И ЗАПИСЫВАЕМ РЕЗУЛЬТАТ В РЕГИСТР
- parse
# ЗАПИСЫВАЕМ ЗНАЧЕНИЕ РЕГИСТРА В ПЕРЕМЕННУЮ С ИМЕНЕМ `somevar`
- variable_set: somevar
# ПЕРЕХОДИМ В БЛОК
- find:
path: .somepath
do:
# ПАРСИМ КОНТЕНТ ИЗ БЛОКА И ЗАПИСЫВАЕМ РЕЗУЛЬТАТ В РЕГИСТР
- parse
# ДОПУСТИМ В РЕГИСТРЕ СЕЙЧАС ЗНАЧЕНИЕ: 123
# ЗАПИСЫВАЕМ ЗНАЧЕНИЕ РЕГИСТРА В ПЕРЕМЕННУЮ С ИМЕНЕМ `somevar`
- variable_set: somevar
# ПЕРЕХОДИМ В ДРУГОЙ БЛОК
- find:
path: .anotherpath
do:
# ПАРСИМ КОНТЕНТ ИЗ БЛОКА И ЗАПИСЫВАЕМ РЕЗУЛЬТАТ В РЕГИСТР
- parse
# ЗАПИСЫВАЕМ ЗНАЧЕНИЕ РЕГИСТРА В ПЕРЕМЕННУЮ
# ИМЯ КОТОРОЙ СКЛАДЫВАЕТСЯ ИЗ `another_` И ЗНАЧЕНИЯ ПЕРЕМЕННОЙ `somevar`
- variable_set: another_<%somevar%>
# ИМЯ НОВОЙ ПЕРЕМЕННОЙ БУДЕТ `another_123`
- walk:
to: http://www.somesite.com/
do:
# УСТАНАВЛИВАЕМ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ
# ЕСЛИ ВЫ НЕ НАХОДИТЕСЬ В БЛОКОВОМ КОНТЕКСТЕ, ТО ДОПУСТИМА ТОЛЬКО ТАКАЯ НОТАЦИЯ ЗАПИСИ КОМАНДЫ!
- variable_set:
field: somevar
value: 123
# В ЭТО НОТАЦИИ ТАКЖЕ МОЖНО ИСПОЛЬЗВАТЬ ПЕРЕМЕННЫЕ В ПАРАМЕТРАХ `field` И `value`
# ЭТОТ КОД ЗАДАСТ ЗНАЧЕНИЕ "123" ПЕРЕМЕННОЙ С ИМЕНЕМ `another_123`
- variable_set:
field: another_<%somevar%>
value: <%somevar%>
Команда variable_get используется для записи значения переменной в регистр.
Команды variable_append и variable_prepend для добавления
содержимого переменной в конец или начало регистра.
Для очистки содержимого переменной используется команда variable_clear.
Она полезна при итерации по блокам с нестабильной структурой, когда какой-то блок может отсутствовать и команда на запись
переменной не будет выполнена, в этом случае в переменной останется старое значение, которое можно будет записать в объект.
Если вам требуется избежать подобного подхода, вы можете производить очистку содержимого переменной этой командой.
# ПЕРЕХОДИМ В БЛОК
- find:
path: .somepath
do:
# ЗАПОЛНЯЕМ РЕГИСТР ЗНАЧЕНИЕМ ПЕРЕМЕННОЙ `somevar`
- variable_get: somevar
# ПРЕДУСТАНАВЛИВАЕМ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ `somevar`
- variable_set:
field: somevar
value: 123
# ПРЕДУСТАНАВЛИВАЕМ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ `another_123`
- variable_set:
field: another_123
value: 456
# ПЕРЕХОДИМ В БЛОК
- find:
path: .somepath
do:
# ЗАПОЛНЯЕМ РЕГИСТР ЗНАЧЕНИЕМ ПЕРЕМЕННОЙ `another_123`
- variable_get: another_<%somevar%>
# В РЕГИСТРЕ ПОЛУЧАЕМ ЗНАЧЕНИЕ: 456
# ПРЕДУСТАНАВЛИВАЕМ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ `somevar`
- variable_set:
field: somevar
value: 123
# ПЕРЕХОДИМ В БЛОК
- find:
path: .somepath
do:
# ПРЕДУСТАНАВЛИВАЕМ ЗНАЧЕНИЕ РЕГИСТР В `data`
- register_set: data
# ДОБАВЛЯЕМ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ `somevar` В КОНЕЦ РЕГИСТРА,
# ИСПОЛЬЗУЯ СТРОКОВОЕ ЗНАЧЕНИЕ " - " ДЛЯ СОЕДИНЕНИЯ ЗНАЧЕНИЙ
- variable_append:
field: somevar
joinby: " - "
# В РЕГИСТРЕ СЕЙЧАС: data - 123
# ДОБАВЛЯЕМ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ `somevar` В НАЧАЛО РЕГИСТРА,
# ИСПОЛЬЗУЯ СТРОКОВОЕ ЗНАЧЕНИЕ "" ДЛЯ СОЕДИНЕНИЯ ЗНАЧЕНИЙ
- variable_prepend:
field: somevar
joinby: ""
# В РЕГИСТРЕ СЕЙЧАС: 123data - 123
# СТИРАЕМ ПЕРЕМЕННУЮ `somevar`
- variable_clear: somevar
Далее мы расскажем о том как использовать аргументы.