1. Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!
    Скрыть объявление

Новый шаблонизатор в A-Parser

Тема в разделе "Новости", создана пользователем Forbidden, 27 фев 2014.

  1. Forbidden

    Forbidden Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    9 мар 2013
    Сообщения:
    3.337
    Симпатии:
    1.795
    Зачем?
    • Расширение возможностей - старый шаблонизатор был ограничен в возможностях, фактически он не умел ничего кроме вывода переменных и массивов
    • Наглядный пример: используя шаблоны можно результаты парсинга автоматически преобразовать в дорвеи, готовые для загрузки на хостинг! Другой пример: готовый отчет по анализу доменов в виде HTML или CSV файла
    • Лёгкий способ использовать переменные данные(запросы, результаты парсинга) на всех этапах работы парсера(формирование запроса; фильтрация, уникализация, форматирование, дополнительная обработка результатов)
    • Исчерпывающая документация: Template Toolkit - проверенный времен шаблонный движок, который имеет большое сообщество пользователей
    Массив? Переменная? Мне нужно программировать?
    • Однозначно нет :) A-Parser рассчитан на широкую аудиторию и из коробки позволяет выполнять все основные задачи без каких либо дополнительных знаний
    • Шаблоны призваны упростить решение сложных комплексных задач, например подсчет количества ссылок в топ10 выдачи Яндекса, в которых встречается исходный запрос в анкоре
    • Шаблон - не язык программирования, он содержит около 5 основных макросов которые легко запомнить и использовать
    Хочу примеров!
    Перед примером пару слов о том как парсер выдаёт результаты

    Представление результатов в A-Parser
    Для удобства все результаты парсинга в A-Parser представлены в виде одиночных результатов(Flat) и массивов результатов(Array). Для легкого понимания рассмотрим пример страницы выдачи Google:
    [​IMG]
    На странице можно увидеть следующие данные которые собирает парсер:
    • Количество результатов в выдачи по запросу test - 1940000000, это одиночный результат, встречается на странице один раз, в парсере он представлен переменной totalcount
    • Непосредственно элементы выдачи, каждый из которых содержит ссылку, анкор и сниппет. Это повторяющиеся результаты(их от 10 до 100 на страницу в зависимости от настроек, помноженное на количество страниц), соответственно они сохраняются в массив serp, каждый элемент которого содержит переменные link, anchor, snippet
    • Список связанных ключевых слов, поскольку их несколько то они также сохраняются в массив под именем related, каждый элемент этого массива содержит одну переменную key
    Названия массивов и переменных для каждого парсера можно посмотреть наведя на парсер курсором, после чего появится подсказка отображающая все результаты которые выдаёт данный парсер, пример для парсера Гугла:
    [​IMG]
    На скриншоте можно увидеть:
    • Простые результаты(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&nbsp;<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 &quot;<b>Test</b> status&quot;, as determined by the&nbsp;<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&nbsp;<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&#39; knowledge or other abilities&nbsp;<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&nbsp;<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&nbsp;<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>&nbsp;<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&nbsp;<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 отчета

    [​IMG]
    Полный код шаблона в удобном виде:
    Код:
    [% 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ей итерации выходим из цикла
    В результате получаем готовый отчет по доменам:
    [​IMG]
    Примечание: для оформления таблицы использовался Bootstrap, заголовок и конец HTML опущен

    Заключение
    Я думаю преимущество нового шаблонизатора очевидно всем, любые вопросы можно задать в этом топике
     
  2. maddin

    maddin A-Parser Enterprise License
    A-Parser Enterprise

    Регистрация:
    13 дек 2012
    Сообщения:
    59
    Симпатии:
    1
    Forbidden, спасибо что радуешь обновами, но только вот печально что старые прессеты работать не будут.
    Может есть возможность оставить прежний синтаксис, например галкой какой-нибудь в настройке прессета?
     
  3. Forbidden

    Forbidden Administrator
    Команда форума A-Parser Enterprise

    Регистрация:
    9 мар 2013
    Сообщения:
    3.337
    Симпатии:
    1.795
    старые очень легко адаптировать под новые
    если что то не получится - с радостью сами за тебя сделаем :)

    поддерживать старый код слишком накладно для динамично развивающегося продукта
     
    maddin нравится это.

Поделиться этой страницей