Перейти к основному содержимому

Инструменты шаблонизатора (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::HTTPNet::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 %] - возвращает количество потоков, используемых в задании