Зачем? Расширение возможностей - старый шаблонизатор был ограничен в возможностях, фактически он не умел ничего кроме вывода переменных и массивов Наглядный пример: используя шаблоны можно результаты парсинга автоматически преобразовать в дорвеи, готовые для загрузки на хостинг! Другой пример: готовый отчет по анализу доменов в виде HTML или CSV файла Лёгкий способ использовать переменные данные(запросы, результаты парсинга) на всех этапах работы парсера(формирование запроса; фильтрация, уникализация, форматирование, дополнительная обработка результатов) Исчерпывающая документация: Template Toolkit - проверенный времен шаблонный движок, который имеет большое сообщество пользователей Массив? Переменная? Мне нужно программировать? Однозначно нет A-Parser рассчитан на широкую аудиторию и из коробки позволяет выполнять все основные задачи без каких либо дополнительных знаний Шаблоны призваны упростить решение сложных комплексных задач, например подсчет количества ссылок в топ10 выдачи Яндекса, в которых встречается исходный запрос в анкоре Шаблон - не язык программирования, он содержит около 5 основных макросов которые легко запомнить и использовать Хочу примеров! Перед примером пару слов о том как парсер выдаёт результаты Представление результатов в A-Parser Для удобства все результаты парсинга в A-Parser представлены в виде одиночных результатов(Flat) и массивов результатов(Array). Для легкого понимания рассмотрим пример страницы выдачи Google: На странице можно увидеть следующие данные которые собирает парсер: Количество результатов в выдачи по запросу test - 1940000000, это одиночный результат, встречается на странице один раз, в парсере он представлен переменной totalcount Непосредственно элементы выдачи, каждый из которых содержит ссылку, анкор и сниппет. Это повторяющиеся результаты(их от 10 до 100 на страницу в зависимости от настроек, помноженное на количество страниц), соответственно они сохраняются в массив serp, каждый элемент которого содержит переменные link, anchor, snippet Список связанных ключевых слов, поскольку их несколько то они также сохраняются в массив под именем related, каждый элемент этого массива содержит одну переменную key Названия массивов и переменных для каждого парсера можно посмотреть наведя на парсер курсором, после чего появится подсказка отображающая все результаты которые выдаёт данный парсер, пример для парсера Гугла: На скриншоте можно увидеть: Простые результаты(Flat): query, origquery, success, retries, stats, totalcount, misspell Массивы результатов(Array): related, ads, serp, pages Примечание:на скриншоте представлен старый формат записи результатов, к следующей версии он будет обновлен Стандартные приемы форматирования Рассмотрим несколько простых задач на примере парсера Google, самая простая задача - вывести все ссылки по одной на строку: Старый формат форматирования: Код: serp[{link}\n] Новый формат: Код: [% join(serp, '$link\n') %] Результат: Код: http://www.speedtest.net/ http://www.test.com/ http://www.speakeasy.net/speedtest/ http://en.wikipedia.org/wiki/Test_cricket http://html5test.com/ http://www.humanmetrics.com/cgi-win/jtypes2.asp http://test-ipv6.com/ http://acid3.acidtests.org/ http://www.politicalcompass.org/test Алгоритм простой: выводим весь массив serp, при этом форматируя строку выводя сначала ссылку(link), потом символ переноса строка \n Несколько слов о синтаксисе нового шаблонизатора: [% ... %] - теги в которых находится сам шаблон, все что за пределами тегов считается обычным текстом Макрос join(x, y) создан для удобного вывода всех элементов массива x по шаблону y, например в качестве массива мы указываем serp - основная выдача Google, в шаблоне вывода можно использовать все переменные этого массива: $link, $anchor, $snippet Далее будем использовать только новый синтаксис, пример вывода ссылки, анкора и снипппета всех результатов, при этом будем ссылку и анкор разделять через дефис -, а сниппет указывать в скобках Формат результата: Код: [% join(serp, '$link - $anchor ($snippet)\n') %] Результат: Код: http://www.speedtest.net/ - Speedtest.net by Ookla - The Global Broadband Speed <b>Test</b> (<b>Test</b> your Internet connection bandwidth to locations around the world with this <br>interactive broadband speed <b>test</b> from Ookla.) http://www.test.com/ - Create <b>Tests</b> for Organizational Training and Certification Programs <b>...</b> (<b>Test</b>.com provides a complete software solution for creating online <b>tests</b> and <br>managing enterprise and specialist certification programs, in up to 22 languages.) http://www.speakeasy.net/speedtest/ - Speakeasy Speed <b>Test</b> (Speakeasy Speed <b>Test</b> - Broadband Speed <b>Test</b>. Go to MegaPath Speed <b>Test</b> <b>...</b> <br>The Speakeasy Speed <b>Test</b> requires Flash v7 or higher. Please update your <b>...</b>) http://en.wikipedia.org/wiki/Test_cricket - <b>Test</b> cricket - Wikipedia, the free encyclopedia (<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 <b>...</b>) http://en.wikipedia.org/wiki/Test_(wrestler) - <b>Test</b> (wrestler) - Wikipedia, the free encyclopedia (Andrew James Robert Patrick Martin (March 17, 1975 – March 13, 2009) was a <br>Canadian professional wrestler. Under the ring name <b>Test</b>, Martin wrestled for <b>...</b>) http://en.wikipedia.org/wiki/Test - <b>Test</b> - Wikipedia, the free encyclopedia (<b>Test</b>, <b>TEST</b> or Tester may refer to: <b>Test</b> (assessment), an assessment intended to <br>measure the respondents' knowledge or other abilities <b>...</b>) http://html5test.com/ - HTML5 <b>Test</b> (The HTML5 <b>test</b> score is an indication of how well your browser supports the <br>upcoming HTML5 standard and related specifications. Even though the <b>...</b>) http://www.humanmetrics.com/cgi-win/jtypes2.asp - Personality <b>test</b> based on C. Jung and I. Briggs Myers type theory (Humanmetrics Jung Typology <b>Test</b>™ instrument uses methodology, <br>questionnaire, scoring and software that are proprietary to Humanmetrics, and <br>shall not be <b>...</b>) http://test-ipv6.com/ - <b>Test</b> your IPv6. (This will <b>test</b> your browser and connection for IPv6 readiness, as well as show <br>you your current IPV4 and IPv6 address. <b>...</b> <b>Test</b> your IPv6 connectivity. JavaScript<br> <b>...</b>) http://acid3.acidtests.org/ - The Acid3 <b>Test</b> (JS/? To pass the <b>test</b>, a browser must use its default settings, the animation has to <br>be smooth, the score has to end on 100/100, and the final page has to look <b>...</b>) Примечание: по умолчанию все HTML теги в анкорах и сниппетах сохраняются, в A-Parser встроена возможность автоматически очищать HTML теги на случай если они не требуются Следующий пример, проверка количества страниц в выдаче по запросу(оно же проверка количества проиндексированных страниц сайта при использовании оператора site:): Формат: Код: [% "$query.query: $totalcount\n" %] Результат: Код: site:a-parser.com: 1410 site:google.com: 1150000000 Примечание: Переменная $query это хэш(ассоциативный массив) который содержит несколько ключей: query - запрос после форматирования origquery - оригинальный запрос lvl - уровень вложенности запроса(при использовании опций Parser to level/Parse all results) Комплексный пример Для следующего примера рекомендую ознакомиться с документации к шаблонизатору на русском или английском При использовании общего формата результата при добавлении задания(Add Task) необходимо указывать от какого парсера выводить результат - т.к. A-Parser поддерживает одновременный парсинг одного запроса сразу несколькими парсерами, несколько примеров: Вывести шаблон заданный в настройках первого парсера: Код: [% p1.preset %] Вывести количество результатов от первого и второго парсера(допустим первый Google, второй - Bing): Код: [% "$query.query: $p1.totalcount, $p2.totalcount\n" %] Составим задание, допустим необходимо проанализировать список доменов, нас интересует Google PR, количество страниц в индексе гугла и бинга, а так же список топ 3 анкоров по версии гугла, все это требуется представить в виде готового HTML отчета Полный код шаблона в удобном виде: Код: [% p = p + 1 %] <tr[% IF p2.totalcount < 1000000 %] class="success"[% END %]> <td>[% p %].</td> <td>[% query.origquery %]</td> <td>[% p1.pr %]</td> <td>[% p2.totalcount %]</td> <td>[% p3.totalcount %]</td> <td> <ul> [% FOREACH p2.serp %] <li>[% loop.count %]. [% anchor %]</li> [% LAST IF loop.count == 3 %] [% END %] </ul> </td> </tr> Ключевые моменты в данном шаблоне: Используем переменную p в качестве счетчика запросов, увеличивая её каждый раз на 1, выводим её в первом столбце Используем условное выражение - если количество результатов в гугле менее 1 миллиона то подсвечиваем строку зелёным цветом Для вывода топ 3 анкоров используем цикл по массиву p2.serp, выводим текущую позицию в массиве в качестве нумерации и сам анкор, по условному выражению после 3ей итерации выходим из цикла В результате получаем готовый отчет по доменам: Примечание: для оформления таблицы использовался Bootstrap, заголовок и конец HTML опущен Заключение Я думаю преимущество нового шаблонизатора очевидно всем, любые вопросы можно задать в этом топике
Forbidden, спасибо что радуешь обновами, но только вот печально что старые прессеты работать не будут. Может есть возможность оставить прежний синтаксис, например галкой какой-нибудь в настройке прессета?
старые очень легко адаптировать под новые если что то не получится - с радостью сами за тебя сделаем поддерживать старый код слишком накладно для динамично развивающегося продукта