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

Пресет Сортировка результатов 1.0

Пример сортировки результатов во время парсинга

  1. Support

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

    Регистрация:
    16 мар 2012
    Сообщения:
    4.545
    Симпатии:
    2.163
    Благодаря этому улучшению, начиная с версии 1.1.336 мы также можем сортировать результаты парсинга прямо в парсере. Ниже показан способ сортировки на примере сбора ТИЦ и вывода результатов в порядке его спадания.
    [​IMG]
    Код:
    eyJwcmVzZXQiOiJkZWZhdWx0IiwidmFsdWUiOnsicHJlc2V0IjoiZGVmYXVsdCIs
    InBhcnNlcnMiOltbIlNFOjpZYW5kZXg6OlRJQyIsImRlZmF1bHQiXV0sInJlc3Vs
    dHNGb3JtYXQiOiJbJSBsaXN0LiRxdWVyeSA9IHAxLnRpYyAlXSIsInJlc3VsdHNT
    YXZlVG8iOiJmaWxlIiwicmVzdWx0c0ZpbGVOYW1lIjoiJGRhdGVmaWxlLmZvcm1h
    dCgpLnR4dCIsImFkZGl0aW9uYWxGb3JtYXRzIjpbXSwicmVzdWx0c1VuaXF1ZSI6
    Im5vIiwicXVlcnlGb3JtYXQiOlsiJHF1ZXJ5Il0sInVuaXF1ZVF1ZXJpZXMiOmZh
    bHNlLCJzYXZlRmFpbGVkUXVlcmllcyI6ZmFsc2UsIml0ZXJhdG9yT3B0aW9ucyI6
    eyJvbkFsbExldmVscyI6ZmFsc2UsInF1ZXJ5QnVpbGRlcnNBZnRlckl0ZXJhdG9y
    IjpmYWxzZSwicXVlcnlCdWlsZGVyc09uQWxsTGV2ZWxzIjpmYWxzZX0sInJlc3Vs
    dHNPcHRpb25zIjp7Im92ZXJ3cml0ZSI6ZmFsc2V9LCJkb0xvZyI6Im5vIiwia2Vl
    cFVuaXF1ZSI6Ik5vIiwibW9yZU9wdGlvbnMiOnRydWUsInJlc3VsdHNQcmVwZW5k
    IjoiWyUgbGlzdCA9IHt9ICVdIiwicmVzdWx0c0FwcGVuZCI6IlslIEZPUkVBQ0gg
    a2V5IElOIGxpc3QubnNvcnQucmV2ZXJzZTtcblx0a2V5IF8gXCIgLSBcIiBfIGxp
    c3QuJGtleSBfIFwiXFxuXCI7XG5FTkQgJV0iLCJxdWVyeUJ1aWxkZXJzIjpbXSwi
    cmVzdWx0c0J1aWxkZXJzIjpbXSwiY29uZmlnT3ZlcnJpZGVzIjpbXX19
    • Чтобы вывести результаты в порядке возрастания - нужно в Конечном тексте (Append text) убрать функцию .reverse
      [​IMG]
     
    limoshkaa нравится это.
  2. Vvtex

    Vvtex A-Parser Pro License
    A-Parser Pro

    Регистрация:
    9 окт 2017
    Сообщения:
    124
    Симпатии:
    24
    Подскажите как для парсера SE::Yandex::WordStat сделать сортировку.
     
  3. Support

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

    Регистрация:
    16 мар 2012
    Сообщения:
    4.545
    Симпатии:
    2.163
    Зависит от того, что именно сортировать, но в целом - также, как показано выше.
     
  4. Vvtex

    Vvtex A-Parser Pro License
    A-Parser Pro

    Регистрация:
    9 окт 2017
    Сообщения:
    124
    Симпатии:
    24
    разобрался, для отчёта на лету такая сортировка подойдёт. А так лучше юзать базу, там и сортировка. Сортировка в парсере лишнее.
     
    Support нравится это.
  5. Vvtex

    Vvtex A-Parser Pro License
    A-Parser Pro

    Регистрация:
    9 окт 2017
    Сообщения:
    124
    Симпатии:
    24
    Как добавить в сортировку ещё один пресет Rank::Alexa
    тоже с сортировкой, для быстрого отчёта будет очень хорошо
    [% list.$query = p1.rank ; list.$query =p2.tic %] это понятно, только не выводит результат.
     
  6. Support

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

    Регистрация:
    16 мар 2012
    Сообщения:
    4.545
    Симпатии:
    2.163
    Это неправильно, т.к. вы перезаписываете одну и ту же переменную.

    Описанный в первом посте метод подходит только для одного парсера, т.к. в нем создается хэш, ключами которого являются исходные запросы, а значениями этих ключей - полученный результат. И в конце работы пресета данный хэш выводится с сортировкой по значениям.

    Для решения вашей задачи, когда для каждого запроса будет несколько значений, нужно создавать совсем другую структуру (массив хэшей) и писать функцию для ее сортировки, используя Template Toolkit или JavaScript.
    Вот пример решения, когда парсится 2 показателя (TIC и Alexa rank); результат выводится с сортировкой по TIC; если TIC будет одинаковый, то дополнительно сортируется по Alexa rank:
    • в Начальном тексте создаем массив:
      Код:
      [% list = [] %]
    • в Общем формате результата формируем хэш с результатами по текущему запросу и добавляем его в массив:
      Код:
      [% item = {};
      item.query = query;
      item.tic = p1.tic;
      item.alexa = p2.rank;
      list.push(item) %]
    • в Конечном тексте выводим массив с нужной сортировкой:
      Код:
      [% res = tools.js.hashSortByDigit(tools.js.hashSortByDigit(list, 'alexa'), 'tic');
      FOREACH item IN res;
          item.query _ ': ' _ item.alexa _ ', ' _ item.tic _ "\n";
      END %]
    • Сортировка делается с помощью JS скрипта (через tools.js), на вход в который передается массив хэшей и ключ, по которому сортировать. Т.к. сортироваться могут как числовые, так и строковые данные, то лучше иметь 2 скрипта, каждый из которых будет выполнять сортировку по одному типу данных (в примере выше используется только числовая сортировка):
      Код:
      Tools.prototype.hashSortByDigit = function(obj, key) {
          return obj.sort(function(a, b) {
              return (+a[key] > +b[key]) ? 1 : ((+b[key] > +a[key]) ? -1 : 0);
          });
      }
      
      Tools.prototype.hashSortByString = function(obj, key) {
          return obj.sort(function(a, b) {
              return (a[key] > b[key]) ? 1 : ((b[key] > a[key]) ? -1 : 0);
          });
      }
    • В результате получается отсортированная таблица:
    Код:
    eJylVF1v2jAU/SuR1YoiZZE6bS+Z9kBp0TpV0EH7MAGqLOJQt46d2g4DRfz3nZuQ
    BNbtaU/2Pb7fPveWzHP36u6tcMI7Fs9Llld3FrOZsT4QW57lSrCQ5dw6YUlnzmY3
    cfyT60Rs4/jhdojXRKS8UJ6FJfO7XMDcbIS1MiFTmUAunMit2e4gb7gqoJJy5cR+
    Gc7ZlOvXOB4oRPs/X8uQIX0Yu5GxGacy5ueB9CILvgbl/stC0z16K4TdAanOBvRy
    BSi/pEuDcUqJ0I+RRY6AlXQ+ygv3fEEK/eB8ydqYM74RDwYxU1m1rEkF0phnVMhZ
    wr2g1yit8rvoR36LShlPEuml0VzViVOfu2IetXyjKpk20KWspXAjazJAXlQOqlKa
    oufsrJIZXBSV7Y/a5tCokDmkOuJIJPnzBWVZ7o2d5JQP8JIZPVDqTmyE6tQq/1eF
    VAlIMUhhdHsw/LvK5J2PfVvecSj89C+LHDqlxNyZdVP7qxB5240xIZmxonXgbSFa
    t2B1LnRSc4D+DR85X5782CDvNABBwRujXPTiomfunmkErnbXci39xT8fyHMY9Cqq
    9Pq4gT+9PqgymkxvBsNvNf1uxxQA6MIfUfAp6MVBD8cR24CFHUasfAoWbAFLBvOb
    8XVdwUl3T9hyCq6MTuV6cpigRrPQDxj8iR4aGm9qty6UCmmyph1rB+7ADhLaf31n
    PKxCoIvt5LKqW99nwGh1WImp+EwJZvjg46gHlyuu1OP07viFdUyHwD/U+ydamWyh
    18asMUPVPZMra5xJfS1+yhMe2QKDKrSnGyPvXqwNxgG1Y980q6zdeuW7hRaXIN7x
    VgIA5MXd16bUD1drobEO5GPx5f430ujYkw==
     
    relay и Vvtex нравится это.

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