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

Особенности работы шаблонов в A-Parser

Тестирование шаблонов

Для отладки и тестирования шаблонов в A-Parser существует специальный инструмент: Тестирование шаблонов

Метод .format для массивов

В A-Parser большинство результатов представлено в виде массивов со вложенными элементами. Выражаясь техническим языком - результаты представлены в виде массива хэшей, где каждый хэш имеет фиксированные ключи. Разберем это на примере парсера SE::GoogleSE::Google, в результатах он содержит массив $serp c элементами $link, $anchor и $snippet (и другими):

"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 &quot;<b>Test</b> status&quot;, as determined by the&nbsp;..."
}
]

Для удобного обхода и вывода данных из такого массива был создан метод .format который позволяет соединять все элементы массива по определенному формату, например все ссылки через перевод строки:

$serp.format('$link\n')

Что в результате сохранит каждую ссылку с новой строки:

http://www.speedtest.net/
http://www.speakeasy.net/speedtest/
http://en.wikipedia.org/wiki/Test_cricket

Вывод сниппетов:

$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 &quot;<b>Test</b> status&quot;, as determined by the&nbsp;...

Ссылки, анкоры и сниппеты одновременно:

$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 &quot;<b>Test</b> status&quot;, as determined by the&nbsp;...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 &quot;<b>Test</b> status&quot;, as determined by the&nbsp;...

В формате также можно использовать исходный запрос (либо другие доступные переменные), что позволяет задать соответствие запрос - каждый элемент массива:

$serp.format('$query: $link\n')
test: http://www.speedtest.net/
test: http://www.speakeasy.net/speedtest/
test: http://en.wikipedia.org/wiki/Test_cricket

Метод .json для обьектов

Как известно, все данные в А-Парсере представлены в виде переменных. Существует метод сериализации (преобразования к типу String) таких данных в JSON формат: .json. Например:

$results.json
Пример

Флаг статичного шаблона в Имени файла результата

Флаг isStaticTemplate() позволяет сделать динамичный шаблон в Имени файла результата статичным. Принцип работы: при использовании данного флага в Имени файла результата, шаблон выполнится один раз при старте задания и тем самым будет считаться статичным. Это позволит более гибко называть файлы и при этом сохранять возможность получать ссылки на них через API метод getTaskResultsFile.

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

[% isStaticTemplate(); tools.js.eval('Date.now()') %]

Доступные переменные

При форматировании запросов

При форматировании результатов

При формировании имени файла результатов

При фильтрации результатов

Интерполяция переменных

По-умолчанию шаблоны записываются между тегами [% и %], все что за пределами тегов - обычный текст, который будет передан в результат как есть. В A-Parser дополнительно включена интерполяция переменных, что позволяет обращаться к переменным в тексте через символ $. Помимо этого, также интерполируется \n как явный перенос строки.

Пример:

Всего результатов по запросу $query: $totalcount\n

На место $query и $totalcount подставятся значения соответствующих переменных, \n заменится на перенос строки. Эквивалентная запись без использования интерполяции:

Всего результатов по запросу [% query %]: [% totalcount; "\n" %]
примечание

Обратите внимание, в шаблонах Template Toolkit переменные записываются без префикса $.

Варианты использования шаблонов

Форматирование запросов

Пример

В этом примере к каждому домену из файла Alexa top500.txt будет добавлен поисковый оператор site: и через пробел будут добавлены подстановки из файла words.txt.

Форматирование результатов

Шаблон в формате результата

В этом примере будет выведен запрос, количество результатов в выдаче и количество связанных ключевых слов. А также будет выведен список собранных анкоров.

Шаблоны при фильтрации результатов

Шаблон при фильтрации результатов

Чтобы иметь возможность задавать шаблон, в выпадающем списке следует выбрать Custom Template.
В этом примере в качестве результата будут выведены только те запросы, по которым собрано менее 5 результатов.

Шаблоны при использовании опции Использовать регулярку

Шаблон при использовании регулярки

В этом примере парсер соберет предложения, которые содержат в себе слово, переданное вторым аргументом запроса. Алгоритм работы такой: запрос разделяется Конструктором запросов по указанному разделителю на ссылку и слово; парсер переходит по ссылке, выбирает текст; слово из запроса подставляется в регулярное выражение и им собираются предложения.

Скачать пример

Как импортировать пример в А-Парсер

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=

Шаблоны в настройках парсеров

Пример подстановки случайного user-agent

Настройка предустановленных макросов

В A-Parser можно настроить макросы шаблонов и предустановленные переменные, которые будут доступны глобально для всех шаблонов, указать глобальные макросы можно в Настройки -> Дополнительные настройки.

По умолчанию там уже содержится предопределение объекта $datefile, который используется для форматирования времени для имени файла результата.

Добавление и использование макроса

В данном примере приведена установка глобальной переменной. Это может быть полезно, например, если необходимо использовать одинаковые куки в нескольких парсерах Instagram.

Пример установки:

Шаблон
предупреждение

Обратите внимание на синтаксис закрывающей скобки шаблона -%]. Это нужно для удаления перевода строки, в противном случае при использовании любого шаблона в начале будет добавляться пустая строка.

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

Шаблон