Herramientas de la plantilla (tools)
En el motor de plantillas Template Toolkit, está disponible la variable global $tools, que contiene un conjunto de herramientas accesibles en cualquier plantilla y dentro de los extractores JS.
También existe la variable $tools.error, que contiene la descripción de los errores si estos ocurren durante el funcionamiento de todas las herramientas.
Añadir consultas $tools.query.*
Esta herramienta permite añadir consultas a las ya existentes directamente durante la ejecución de la tarea, formándolas a partir de los resultados ya extraídos. Puede utilizarse como un análogo de la función Parse to level en aquellos extractores donde no está implementada. Existen 2 métodos:
[% tools.query.add(query, maxLevel) %]- añade una consulta individual[% tools.query.addAll(array, item, maxLevel) %]- añade un array de consultas
El parámetro maxLevel indica hasta qué nivel añadir las consultas y es opcional: si se omite, el extractor añadirá nuevas consultas mientras existan. También se recomienda activar la opción Unique queries (Consultas únicas) para evitar bucles infinitos y trabajo innecesario del extractor.
Existe la posibilidad de definir un nivel arbitrario para las subconsultas. Esto puede usarse para distribuir la lógica, es decir, cuando cada nivel representa una funcionalidad distinta.
ejemplo:
[% tools.query.add({query => query, lvl => 1}) %]- añade una consulta a un nivel específico.
ejemplo para JS:
this.query.add({
query: "some query",
lvl: 1,
})

Resultado del funcionamiento del ajuste preestablecido en la captura de pantalla:
extractor:
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
...
Análisis de estructuras JSON $tools.parseJSON()
Esta herramienta permite deserializar datos en formato JSON en variables (objeto) disponibles en el motor de plantillas. Ejemplo de uso:
[% tools.parseJSON(data) %]
Después de la deserialización, se puede acceder a las claves del objeto obtenido como a variables y arrays normales.
Si se indica como argumento una cadena con un JSON no válido, el extractor registrará el error en $tools.error.

Salida en CSV $tools.CSVline
Esta herramienta convierte automáticamente los valores al formato CSV y añade un salto de línea; de este modo, en el formato del resultado basta con enumerar las variables deseadas y la salida será un archivo CSV válido, listo para importar en Google Docs / Excel / etc.
Ejemplo de uso:
[% tools.CSVline(query, p1.serp.0.link, p2.title) %]
Video con el uso de $tools.CSVline():
Trabajo con BD SQLite $tools.sqlite.*
Esta herramienta permite trabajar de forma fácil y completa con bases de datos SQLite. Existen tres métodos:
$tools.sqlite.get()- método que permite obtener una información única de la BD mediante SELECT, por ejemplo:
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT COUNT(*) AS count FROM test') %]
$tools.sqlite.run()- método que permite realizar operaciones en la BD (INSERT, DROP, etc.), por ejemplo:
[% res = tools.sqlite.run('results/test.sqlite', 'INSERT INTO test VALUES(?)', 'test') %]
$tools.sqlite.all()- método que permite extraer todos los datos de una tabla, por ejemplo:
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT * FROM test') %]
Sustitución de user-agent $tools.ua.*
Esta herramienta está diseñada para sustituir el user-agent en los extractores que lo utilizan (por ejemplo,
Net::HTTP). Existen dos métodos:
$tools.ua.list()- contiene la lista completa de user-agents disponibles.$tools.ua.random()- devuelve uno aleatorio de los user-agents disponibles.
Ejemplo de uso:

La lista de todos los user-agent se almacena en el archivo files/tools/user-agents.txt, que puede editarse si es necesario.
Al utilizar esta herramienta para el parámetro User agent en los extractores, es necesario indicarlo explícitamente:
[% tools.ua.random() %]
Soporte de JS en tools $tools.js.*
Esta herramienta permite añadir sus propias funciones JS y utilizarlas directamente en el motor de plantillas. También se admite el uso de módulos de Node.js. Las funciones se añaden en Tools (Herramientas) -> JavaScript Editor (Editor de JavaScript)
Trabajo con base64 $tools.base64.*
Esta herramienta permite trabajar con base64 directamente en el extractor. Esta herramienta tiene 2 métodos:
$tools.base64.encode()- codifica texto en base64$tools.base64.decode()- decodifica una cadena base64 a texto
Ejemplo de uso:

Directorio de datos $tools.data.*
Esta herramienta es esencialmente un objeto que contiene una gran cantidad de información preestablecida: idiomas, regiones, dominios para motores de búsqueda, etc. Lista completa de elementos (puede cambiar en el futuro):
"YandexWordStatRegions", "TopDomains", "CountryCodes", "YahooLocalDomains", "GoogleDomains", "BingTranslatorLangs", "Top1000Words", "GoogleLangs", "GoogleInterfaceLangs", "EnglishMonths", "GoogleTrendsCountries"
Cada uno de estos elementos es un array o un hash de datos; puede ver el contenido imprimiendo los datos, por ejemplo, en JSON:
[% tools.data.GoogleDomains.json() %]
Almacenamiento de datos en memoria $tools.memory.*
Un almacenamiento simple de clave/valor en memoria, común para todas las tareas, solicitudes de API, etc., se restablece al reiniciar el extractor. Existen tres métodos:
[% tools.memory.set(key, value) %]- establece el valorvaluepara la clavekey[% tools.memory.get(key) %]- devuelve el valor correspondiente a la clavekey[% tools.memory.delete(key) %]- elimina de la memoria el registro por la clavekey
Obtención de información sobre la versión de A-Parser $tools.aparser.version()
Esta herramienta permite obtener información sobre la versión de A-Parser y mostrarla en el resultado.
Ejemplo de uso:
[% tools.aparser.version() %]
Obtención del ID de la tarea y número de hilos $tools.task.*
Esta herramienta permite obtener información sobre el id de la tarea y mostrar el número de hilos. Existen dos métodos:
[% tools.task.id %]- devuelve el id de la tarea[% tools.task.threadsCount %]- devuelve la cantidad de hilos utilizados en la tarea
Detención de la tarea $tools.task.stop()
Esta herramienta permite detener la ejecución de la tarea en cualquier momento. Se acepta como argumento una cadena que debe contener el motivo de la detención de la tarea.
Ejemplo de uso:
[% IF query.num == 3;
tools.task.stop('Stop after 3 queries');
END %]