Ferramentas do mecanismo de templates (ferramentas)
No Template Toolkit, a variável global $tools está disponível, que armazena um conjunto de ferramentas disponível em qualquer template e dentro de scrapers JS.
Também existe a variável $tools.error, que contém a descrição dos erros, se eles ocorrerem durante a execução de todas as ferramentas.
Adição de consultas $tools.query.*
Esta ferramenta permite adicionar consultas às já existentes diretamente durante a execução da tarefa, formando-as com base nos resultados já extraídos. Pode ser usada como equivalente à função Parse to level nos scrapers em que ela não está implementada. Existem 2 métodos:
[% tools.query.add(query, maxLevel) %]- adiciona uma consulta única[% tools.query.addAll(array, item, maxLevel) %]- adiciona um array de consultas
O parâmetro maxLevel indica até que nível adicionar as consultas, e é opcional: se for omitido, na prática o scraper adicionará novas consultas enquanto houver consultas. Também é recomendável ativar a opção Unique queries (Consultas únicas), para evitar loops e trabalho excessivo do scraper.
É possível definir um nível arbitrário para as subconsultas. Isso pode ser usado para distribuir a lógica, isto é, quando cada nível é uma funcionalidade separada.
exemplo:
[% tools.query.add({query => query, lvl => 1}) %]- adiciona a consulta em um nível específico.
exemplo para JS:
this.query.add({
query: "some query",
lvl: 1,
})

Resultado da execução do preset na captura de tela:
scraper:
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
...
Desserialização de estruturas JSON $tools.parseJSON()
Esta ferramenta permite desserializar dados no formato JSON em variáveis (objeto), acessíveis no motor de templates. Exemplo de uso:
[% tools.parseJSON(data) %]
Após a desserialização, as chaves do objeto obtido podem ser acessadas como variáveis e arrays comuns.
Se for passada como argumento uma string com JSON inválido, o scraper registrará um erro em $tools.error.

Saída em CSV $tools.CSVline
Esta ferramenta converte automaticamente os valores para o formato CSV e adiciona uma quebra de linha, de modo que, no formato de resultado, basta listar as variáveis necessárias, e na saída haverá um arquivo CSV válido, pronto para importação no Google Docs / Excel / etc.
Exemplo de uso:
[% tools.CSVline(query, p1.serp.0.link, p2.title) %]
Vídeo usando $tools.CSVline():
Trabalho com base de dados SQLite $tools.sqlite.*
Esta ferramenta permite trabalhar de forma fácil e completa com bases de dados SQLite. Existem três métodos:
$tools.sqlite.get()- método que permite obter uma única informação da base de dados com SELECT, por exemplo:
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT COUNT(*) AS count FROM test') %]
$tools.sqlite.run()- método que permite executar operações na base de dados (INSERT, DROP etc.), por exemplo:
[% res = tools.sqlite.run('results/test.sqlite', 'INSERT INTO test VALUES(?)', 'test') %]
$tools.sqlite.all()- método que permite exibir todos os dados da tabela, por exemplo:
[% res = tools.sqlite.get('results/test.sqlite', 'SELECT * FROM test') %]
Substituição de user-agent $tools.ua.*
Esta ferramenta destina-se à substituição de user-agent em scrapers que o utilizam (por exemplo,
Net::HTTP). Existem dois métodos:
$tools.ua.list()- contém a lista completa de user-agents disponíveis.$tools.ua.random()- retorna um user-agent aleatório entre os disponíveis.
Exemplo de uso:

A lista de todos os user-agents está armazenada no arquivo files/tools/user-agents.txt, que pode ser editado se necessário.
Ao usar esta ferramenta para o parâmetro User agent nos scrapers, é necessário especificá-lo explicitamente:
[% tools.ua.random() %]
Suporte a JS em tools $tools.js.*
Esta ferramenta permite adicionar suas próprias funções JS e usá-las diretamente no motor de templates. Também é suportado o uso de módulos Node.js. As funções são adicionadas em Tools -> JavaScript Editor
Trabalho com base64 $tools.base64.*
Esta ferramenta permite trabalhar com base64 diretamente no scraper. Esta ferramenta tem 2 métodos:
$tools.base64.encode()- codifica texto em base64$tools.base64.decode()- decodifica uma string base64 em texto
Exemplo de uso:

Referência de dados $tools.data.*
Esta ferramenta é, na prática, um objeto que contém uma grande quantidade de informações predefinidas - idiomas, regiões, domínios para mecanismos de busca etc. A lista completa de elementos (pode mudar no futuro):
"YandexWordStatRegions", "TopDomains", "CountryCodes", "YahooLocalDomains", "GoogleDomains", "BingTranslatorLangs", "Top1000Words", "GoogleLangs", "GoogleInterfaceLangs", "EnglishMonths", "GoogleTrendsCountries"
Cada um desses elementos representa um array ou hash de dados, o conteúdo pode ser visualizado exibindo os dados, por exemplo, em JSON:
[% tools.data.GoogleDomains.json() %]
Armazenamento de dados em memória $tools.memory.*
Um armazenamento simples de key/value em memória, compartilhado por todas as tarefas, requisições de API etc., é zerado ao reiniciar o scraper. Existem três métodos:
[% tools.memory.set(key, value) %]- define o valorvaluepara a chavekey[% tools.memory.get(key) %]- retorna o valor correspondente à chavekey[% tools.memory.delete(key) %]- remove da memória a entrada pela chavekey
Obtenção de informações sobre a versão do A-Parser $tools.aparser.version()
Esta ferramenta permite obter informações sobre a versão do A-Parser e exibi-las no resultado.
Exemplo de uso:
[% tools.aparser.version() %]
Obtenção do ID da tarefa e do número de threads $tools.task.*
Esta ferramenta permite obter informações sobre o ID da tarefa e mostrar o número de threads. Existem dois métodos:
[% tools.task.id %]- retorna o ID da tarefa[% tools.task.threadsCount %]- retorna a quantidade de threads usadas na tarefa
Interrupção da tarefa $tools.task.stop()
Esta ferramenta permite interromper a execução da tarefa a qualquer momento. Como argumento, recebe uma string que deve conter o motivo da interrupção da tarefa.
Exemplo de uso:
[% IF query.num == 3;
tools.task.stop('Stop after 3 queries');
END %]