Recursos de funcionamento de modelos no A-Parser
Teste de modelos
Para depuração e teste de modelos no A-Parser, existe uma ferramenta especial: Teste de modelos
Método .format para arrays
No A-Parser, a maioria dos resultados é apresentada na forma de arrays com elementos aninhados. Em linguagem técnica, os resultados são apresentados na forma de um array de hashes, em que cada hash tem chaves fixas. Vamos analisar isso no exemplo do scraper
SE::Google, nos resultados ele contém um array $serp com os elementos $link, $anchor e $snippet (e outros):
"serp" : [
{
"link" : "http://www.speedtest.net/",
"anchor" : "Speedtest.net by Ookla - The Global Broadband Speed <b>Test</b>",
"snippet" : "<b>Test</b> your Internet connection bandwidth to locations around the world with this <br>interactive broadband speed <b>test</b> from Ookla."
},
{
"link" : "http://www.speakeasy.net/speedtest/",
"anchor" : "Speakeasy Speed <b>Test</b>",
"snippet" : "Speakeasy Speed <b>Test</b> - Broadband Speed <b>Test</b>. Go to MegaPath Speed <b>Test</b> ... <br>02:38:36 PM Your IP: The Speakeasy Speed <b>Test</b> requires Flash v7 or higher."
},
{
"link" : "http://en.wikipedia.org/wiki/Test_cricket",
"anchor" : "<b>Test</b> cricket - Wikipedia, the free encyclopedia",
"snippet" : "<b>Test</b> cricket is the longest form of the sport of cricket. <b>Test</b> matches are played <br>between national representative teams with "<b>Test</b> status", as determined by the ..."
}
]
Para percorrer e exibir dados de tal array de forma conveniente, foi criado o método .format, que permite unir todos os elementos do array de acordo com um formato específico, por exemplo, todos os links separados por quebra de linha:
$serp.format('$link\n')
O que resultará no salvamento de cada link em uma nova linha:
http://www.speedtest.net/
http://www.speakeasy.net/speedtest/
http://en.wikipedia.org/wiki/Test_cricket
Exibição de snippets:
$serp.format('$snippet\n')
<b>Test</b> your Internet connection bandwidth to locations around the world with this <br>interactive broadband speed <b>test</b> from Ookla.
Speakeasy Speed <b>Test</b> - Broadband Speed <b>Test</b>. Go to MegaPath Speed <b>Test</b> ...<br>02:38:36 PM Your IP: The Speakeasy Speed <b>Test</b> requires Flash v7 or higher.
<b>Test</b> cricket is the longest form of the sport of cricket. <b>Test</b> matches are played <br>between national representative teams with "<b>Test</b> status", as determined by the ...
Links, âncoras e snippets simultaneamente:
$serp.format('Link: $link, Anchor: $anchor, Snippet: $snippet\n')
Link: http://www.speedtest.net/, Anchor: Speedtest.net by Ookla - The Global Broadband Speed <b>Test</b>, Snippet: <b>Test</b> your Internet connection bandwidth to locations around the world with this <br>interactive broadband speed <b>test</b> from Ookla.Link: http://www.speedtest.net/, Anchor: Speedtest.net by Ookla - The Global Broadband Speed <b>Test</b>, Snippet: <b>Test</b> your Internet connection bandwidth to locations around the world with this <br>interactive broadband speed <b>test</b> from Ookla.
Link: http://www.speakeasy.net/speedtest/, Anchor: Speakeasy Speed <b>Test</b>, Snippet: Speakeasy Speed <b>Test</b> - Broadband Speed <b>Test</b>. Go to MegaPath Speed <b>Test</b> ... <br>02:38:36 PM Your IP: The Speakeasy Speed <b>Test</b> requires Flash v7 or higher.Link: http://www.speakeasy.net/speedtest/, Anchor: Speakeasy Speed <b>Test</b>, Snippet: Speakeasy Speed <b>Test</b> - Broadband Speed <b>Test</b>. Go to MegaPath Speed <b>Test</b> ... <br>02:38:36 PM Your IP: The Speakeasy Speed <b>Test</b> requires Flash v7 or higher.
Link: http://en.wikipedia.org/wiki/Test_cricket, Anchor: <b>Test</b> cricket - Wikipedia, the free encyclopedia, Snippet: <b>Test</b> cricket is the longest form of the sport of cricket. <b>Test</b> matches are played <br>between national representative teams with "<b>Test</b> status", as determined by the ...Link: http://en.wikipedia.org/wiki/Test_cricket, Anchor: <b>Test</b> cricket - Wikipedia, the free encyclopedia, Snippet: <b>Test</b> cricket is the longest form of the sport of cricket. <b>Test</b> matches are played <br>between national representative teams with "<b>Test</b> status", as determined by the ...
No formato, também é possível usar a consulta original (ou outras variáveis disponíveis), o que permite definir a correspondência consulta - cada elemento do array:
$serp.format('$query: $link\n')
test: http://www.speedtest.net/
test: http://www.speakeasy.net/speedtest/
test: http://en.wikipedia.org/wiki/Test_cricket
Método .json para objetos
Como se sabe, todos os dados no A-Parser são representados na forma de variáveis. Existe um método de serialização (conversão para o tipo String) desses dados para o formato JSON: .json. Por exemplo:
$results.json

Flag de modelo estático no Nome do arquivo de resultado
A flag isStaticTemplate() permite tornar um modelo dinâmico no Nome do arquivo de resultado estático.
Princípio de funcionamento: ao usar esta flag no Nome do arquivo de resultado, o modelo será executado uma vez no início da tarefa e, assim, será considerado estático. Isso permite nomear arquivos de forma mais flexível e, ao mesmo tempo, manter a capacidade de obter links para eles através do método de API getTaskResultsFile.
Exemplo de uso:
[% isStaticTemplate(); tools.js.eval('Date.now()') %]
Variáveis disponíveis
Ao formar o nome do arquivo de resultados
Interpolação de variáveis
Por padrão, os modelos são gravados entre as tags [% e %], tudo o que estiver fora das tags é texto comum, que será passado para o resultado como está.
No A-Parser, a interpolação de variáveis está adicionalmente habilitada, o que permite acessar variáveis no texto através do símbolo $.
Além disso, \n também é interpolado como uma quebra de linha explícita.
Exemplo:
Total de resultados para a consulta $query: $totalcount\n
No lugar de $query e $totalcount, serão inseridos os valores das variáveis correspondentes, e \n será substituído por uma quebra de linha.
Gravação equivalente sem o uso de interpolação:
Total de resultados para a consulta [% query %]: [% totalcount; "\n" %]
Observe que, nos modelos do Template Toolkit, as variáveis são gravadas sem o prefixo $.
Casos de uso de modelos
Formatação de consultas

Neste exemplo, para cada domínio do arquivo Alexa top500.txt, será adicionado o operador de pesquisa site: e, após um espaço, serão adicionadas as substituições do arquivo words.txt.
Formatação de resultados

Neste exemplo, serão exibidos a consulta, a quantidade de resultados na listagem e a quantidade de palavras-chave relacionadas. Além disso, será exibida a lista de âncoras coletadas.
Modelos na filtragem de resultados

Para poder definir um modelo, deve-se selecionar Custom Template na lista suspensa.
Neste exemplo, como resultado, serão exibidas apenas as consultas para as quais foram coletados menos de 5 resultados.
Modelos ao usar a opção Usar regex

Neste exemplo, o scraper coletará frases que contenham a palavra passada como segundo argumento da consulta. O algoritmo de funcionamento é o seguinte: a consulta é dividida pelo Construtor de Consultas pelo separador especificado em link e palavra; o scraper acessa o link, seleciona o texto; a palavra da consulta é inserida na expressão regular e as frases são coletadas por ela.
Baixar exemplo
Como importar o exemplo para o A-Parser
eJyNVE1T2zAQ/StUEwYo1EkoDK0vncA003YCoSScHLejxmtXjWwZSYZkQv57d2XH
diiHXmTp6b3d1X54zSw3C3OrwYA1zA/WLHd75rMIYl5Iy05YzrUBTdcB+zK9Hvn+
FJb289JqPrdKI6Pmrpld5YDqeWGsSu/AlCZ0ufEDZlFqEKEvC+kmgSUKDoNZ0Tvr
997R5zQOgx/em0+zWTab6fA42N97KECvvAWs9vZ37t4GuA+Pj1hlalr6F0nttUK4
1nyFoPve8JQwY7XIElNT6Y0VyMJNGNb4UOmUU1Y6ed+rVF7swMODTglgQAdHjakJ
f4SpQkksJDTwEE+V907ELdDt1tKRZ5eULR5FwgqVcVn6pbCaWO4zgclAfaaQS3kR
YIZapQi5rJbgahtzwDruTNkunPZ7qWF+zKWBE2Yw1CHHQKKXN8KC5ljjcU7xIL5m
KhtIOYJHkA3N2b8shIywTwYxir5Wwtcp439sbOrntV09gn7SGENtxZ0ux9eNKlIj
lWyTIUUqLJ7NlSoyKlcPwQVAXufshmip0lC7qSxX3nEUcsgiZDYlG+QNtPMMNzBG
FXpOpsskn2wnoGyKSS4FVcQATlGZEPZMJEWF2Uqwranfao8tBwjOVRaLZIzJ0CKC
bTMU2RRnd5xdqTSXQDnKCimxxAbumlYbmKqkdGge+1J85VzsTL1VSppvk/LZuRYY
8DkFmGJV2l4rk3Mu5f3dqH3DmvbEw29rc+N3u7rwnsRC5BAJ7imddOnUdVPfp/X9
B7dGtJ6dun3PrdwhLc7Zhduft3DesvDxZ0sctfa/WqSL5/8hMXqfhURhtTD7VKnq
p1j/Otev/hr99QZ79I+5LdlUBOIihtU02IDM72/+Ar1q4iA=
Modelos nas configurações dos scrapers
Exemplo de substituição de user-agent aleatório
Configuração de macros predefinidas
No A-Parser, é possível configurar macros de modelos e variáveis predefinidas que estarão disponíveis globalmente para todos os modelos. É possível especificar macros globais em Settings -> Advanced Settings.
Por padrão, já contém a predefinição do objeto $datefile, que é usado para formatar a hora para o nome do arquivo de resultado.
Adição e uso de macro
Neste exemplo, é mostrada a definição de uma variável global. Isso pode ser útil, por exemplo, se for necessário usar os mesmos cookies em vários scrapers do Instagram.
Exemplo de definição:

Observe a sintaxe da tag de fechamento do modelo -%]. Isso é necessário para remover a quebra de linha, caso contrário, ao usar qualquer modelo, uma linha vazia será adicionada no início.
Exemplo de uso:
