Инструменты шаблонизатора (tools)
В шаблонизаторе Template Toolkit доступна глобальная переменная $tools
, которая хранит в себе набор инструментов доступных в любом шаблоне и внутри JS парсеров.
Также существует переменная $tools.error
, которая содержит описание ошибок, если таковые возникают во время работы всех инструментов.
Добавление запросов $tools.query.*
Данный инструмент позволяет добавлять запросы к уже существующим прямо во время работы задания, формируя их на основе уже спаршенных результатов. Может быть использован как аналог функции Parse to level в тех парсерах, где она не реализована. Существует 2 метода:
[% tools.query.add(query, maxLevel) %]
- добавляет одиночный запрос[% tools.query.addAll(array, item, maxLevel) %]
- добавляет массив запросов
Параметр maxLevel
указывает до какого уровня добавлять запросы, и является необязательным: если он опущен, то фактически парсер будет добавлять новые запросы пока они есть. Также рекомендуется включать опцию Уникальные запросы, чтобы избежать зацикливания и излишней работы парсера.
Есть возможность задавать произвольный уровень для подзапросов. Это можно использовать для распределения логики, т.е. когда каждый уровень это отдельный функционал.
пример:
[% tools.query.add({query => query, lvl => 1}) %]
- добавляет запрос на определенный уровень.
пример для JS:
this.query.add({
query: "some query",
lvl: 1,
})
Результат работы пресета на скриншоте:
парсер:
parser
what is parsing in programming
parsing in compiler
compiler and parser development
what is syntax analysis
difference between lexical analysis and syntax analysis
syntax analyzer
parser programming language
parser:
parser definition
xml parser
parser generator
parser swtor
parser c++
ffxiv parser
html parser
parser java
what is parsing in programming:
parse wikipedia
parser compiler
what is a parser
parsing programming languages
definition of parser
parsing c++
parser define
parsing java
html parser:
online html parser
html parser php
html parser java
...
Разбор JSON структур $tools.parseJSON()
Этот инструмент позволяет десериализовать данные в формате JSON в переменные (объект), доступные в шаблонизаторе. Пример использования:
[% tools.parseJSON(data) %]
После десериализации к ключам из полученного обьекта можно обращаться как к обычным переменным и массивам.
Если в качестве аргумента будет указана строка с невалидным JSON, парсер запишет ошибку в $tools.error
.
Вывод в CSV $tools.CSVline
Этот инструмент автоматически приводит значения к формату CSV и добавляет перенос строки, тем самым в формате результата достаточно перечислить нужные переменные, а на выходе будет валидный CSV файл, готовый для импорта в Google Docs / Excel / и т.п.
Пример использования:
[% tools.CSVline(query, p1.serp.0.link, p2.title) %]
Видео с использованием $tools.CSVline()
:
Работа с БД SQLite $tools.sqlite.*
Этот инструмент позволяет легко и полноценно работать с базами данных SQLite. Существует три метода:
$tools.sqlite.get()
- метод, позволяющий получить единичную информацию из БД с помощью SELECT, например:
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT COUNT(*) AS count FROM test') %]
$tools.sqlite.run()
- метод, позволяющий выполнить операции с БД (INSERT, DROP и т.п.), например:
[% res = tools.sqlite.run('results/test.sqlite', 'INSERT INTO test VALUES(?)', 'test') %]
$tools.sqlite.all()
- метод, позволяющий вывести все данные из таблицы, например:
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT * FROM test') %]
Подстановка user-agent $tools.ua.*
Данный инструмент предназначен для подмены user-agent в парсерах, которые его используют (например, Net::HTTP). Существует два метода:
$tools.ua.list()
- содержит полный список доступных юзерагентов.$tools.ua.random()
- выводит случайный из доступных юзерагентов.
Пример использования:
Cписок всех user-agent хранится в файле files/tools/user-agents.txt
, который при необходимости можно редактировать.
При использовании данного инструмента для параметра User agent в парсерах, необходимо указывать его явно:
[% tools.ua.random() %]
Поддержка JS в tools $tools.js.*
Данный инструмент позволяет добавлять свои JS функции и использовать их прямо в шаблонизаторе. Также поддерживается использование Node.js модулей. Функции добавляются в Инструменты -> Редактор JavaScript
Работа с base64 $tools.base64.*
Данный инструмент позволяет работать с base64 прямо в парсере. Этот инструмент имеет 2 метода:
$tools.base64.encode()
- кодирует текст в base64$tools.base64.decode()
- декодирует base64 строку в текст
Пример использования:
Справочник данных $tools.data.*
Этот инструмент - по сути объект, в котором содержится большое количество предустановленной информации - языки, регионы, домены для поисковых систем и т.п. Полный перечень элементов (может меняться в будущем):
"YandexWordStatRegions", "TopDomains", "CountryCodes", "YahooLocalDomains", "GoogleDomains", "BingTranslatorLangs", "Top1000Words", "GoogleLangs", "GoogleInterfaceLangs", "EnglishMonths", "GoogleTrendsCountries"
Каждый из этих элементов представляет собой массив или хэш данных, посмотреть содержимое можно выводя данные, например, в JSON:
[% tools.data.GoogleDomains.json() %]
Хранилище данных в памяти $tools.memory.*
Простое key/value хранилище в памяти, общее для всех заданий, API запросов и т.д., обнуляется при перезапуске парсера. Существует три метода:
[% tools.memory.set(key, value) %]
- устанавливает значениеvalue
для ключаkey
[% tools.memory.get(key) %]
- возвращает значение соответствующее ключуkey
[% tools.memory.delete(key) %]
- удаляет из памяти запись по ключуkey
Получение информации о версии A-Parser $tools.aparser.version()
Этот инструмент позволяет получить информацию о версии A-Parser и вывести ее в результат.
Пример использования:
[% tools.aparser.version() %]
Получение ID задания и числа потоков $tools.task.*
Этот инструмент позволяет получить информацию об id задания и показать число потоков. Существует два метода:
[% tools.task.id %]
- возвращает id задания[% tools.task.threadsCount %]
- возвращает количество потоков, используемых в задании
Остановка задания $tools.task.stop()
Этот инструмент позволяет останавливать выполнение задания в любой момент. В качестве аргумента принимается строка, которая должна содержать причину остановки задания.
Пример использования:
[% IF query.num == 3;
tools.task.stop('Stop after 3 queries');
END %]