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

Инструменты шаблонизатора(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.ua.random()

Результат работы пресета на скриншоте:

парсер:
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.

$tools.parseJSON

Вывод в 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() - выводит случайный из доступных юзерагентов.

Пример использования:#

$tools.ua.random()

tip

Cписок всех user-agent хранится в файле files/tools/user-agents.txt, который при необходимости можно редактировать.

important

При использовании данного инструмента для параметра User agent в парсерах, необходимо указывать его явно:

[% tools.ua.random() %]

Поддержка JS в tools $tools.js.*#

Данный инструмент позволяет добавлять свои JS функции и использовать их прямо в шаблонизаторе. Также поддерживается использование Node.js модулей. Функции добавляются в Инструменты -> Редактор JavaScript (на скриншоте ниже добавлена функция Tools.prototype.sum(a, b)):

$tools.js.sum_1

Пример использования созданной функции:

$tools.js.sum_1

Работа с base64 $tools.base64.*#

Данный инструмент позволяет работать с base64 прямо в парсере. Этот инструмент имеет 2 метода:

  • $tools.base64.encode() - кодирует текст в base64
  • $tools.base64.decode() - декодирует base64 строку в текст

Пример использования:#

$tools.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 %] - возвращает количество потоков, используемых в задании
Последнее обновление