Особенности работы шаблонов в A-Parser
Тестирование шаблонов
Для отладки и тестирования шаблонов в A-Parser существует специальный инструмент: Тестирование шаблонов
Метод .format
для массивов
В A-Parser большинство результатов представлено в виде массивов со вложенными элементами. Выражаясь техническим языком - результаты представлены в виде массива хэшей, где каждый хэш имеет фиксированные ключи. Разберем это на примере парсера SE::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 "<b>Test</b> status", as determined by the ..."
}
]
Для удобного обхода и вывода данных из такого массива был создан метод .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 "<b>Test</b> status", as determined by the ...
Ссылки, анкоры и сниппеты одновременно:
$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 ...
В формате также можно использовать исходный запрос (либо другие доступные переменные), что позволяет задать соответствие запрос - каждый элемент массива:
$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.
Пример установки:
Обратите внимание на синтаксис закрывающей скобки шаблона -%]
. Это нужно для удаления перевода строки, в противном случае при использовании любого шаблона в начале будет добавляться пустая строка.
Пример использования: