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

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

Доступно владельцам лицензии
  • Автор темы Автор темы Support
  • Дата начала Дата начала

Support

Administrator
Команда форума
A-Parser Enterprise
Благодаря этому улучшению, начиная с версии 1.1.336 мы также можем сортировать результаты парсинга прямо в парсере. Ниже показан способ сортировки на примере сбора ТИЦ и вывода результатов в порядке его спадания.
erGU6.png

Код:
eyJwcmVzZXQiOiJkZWZhdWx0IiwidmFsdWUiOnsicHJlc2V0IjoiZGVmYXVsdCIs
InBhcnNlcnMiOltbIlNFOjpZYW5kZXg6OlRJQyIsImRlZmF1bHQiXV0sInJlc3Vs
dHNGb3JtYXQiOiJbJSBsaXN0LiRxdWVyeSA9IHAxLnRpYyAlXSIsInJlc3VsdHNT
YXZlVG8iOiJmaWxlIiwicmVzdWx0c0ZpbGVOYW1lIjoiJGRhdGVmaWxlLmZvcm1h
dCgpLnR4dCIsImFkZGl0aW9uYWxGb3JtYXRzIjpbXSwicmVzdWx0c1VuaXF1ZSI6
Im5vIiwicXVlcnlGb3JtYXQiOlsiJHF1ZXJ5Il0sInVuaXF1ZVF1ZXJpZXMiOmZh
bHNlLCJzYXZlRmFpbGVkUXVlcmllcyI6ZmFsc2UsIml0ZXJhdG9yT3B0aW9ucyI6
eyJvbkFsbExldmVscyI6ZmFsc2UsInF1ZXJ5QnVpbGRlcnNBZnRlckl0ZXJhdG9y
IjpmYWxzZSwicXVlcnlCdWlsZGVyc09uQWxsTGV2ZWxzIjpmYWxzZX0sInJlc3Vs
dHNPcHRpb25zIjp7Im92ZXJ3cml0ZSI6ZmFsc2V9LCJkb0xvZyI6Im5vIiwia2Vl
cFVuaXF1ZSI6Ik5vIiwibW9yZU9wdGlvbnMiOnRydWUsInJlc3VsdHNQcmVwZW5k
IjoiWyUgbGlzdCA9IHt9ICVdIiwicmVzdWx0c0FwcGVuZCI6IlslIEZPUkVBQ0gg
a2V5IElOIGxpc3QubnNvcnQucmV2ZXJzZTtcblx0a2V5IF8gXCIgLSBcIiBfIGxp
c3QuJGtleSBfIFwiXFxuXCI7XG5FTkQgJV0iLCJxdWVyeUJ1aWxkZXJzIjpbXSwi
cmVzdWx0c0J1aWxkZXJzIjpbXSwiY29uZmlnT3ZlcnJpZGVzIjpbXX19
  • Чтобы вывести результаты в порядке возрастания - нужно в Конечном тексте (Append text) убрать функцию .reverse
    rauIZ.png
 
Подскажите как для парсера SE::Yandex::WordStat сделать сортировку.
 
Зависит от того, что именно сортировать, но в целом - также, как показано выше.
 
Зависит от того, что именно сортировать, но в целом - также, как показано выше.
разобрался, для отчёта на лету такая сортировка подойдёт. А так лучше юзать базу, там и сортировка. Сортировка в парсере лишнее.
 
Как добавить в сортировку ещё один пресет Rank::Alexa
тоже с сортировкой, для быстрого отчёта будет очень хорошо
[% list.$query = p1.rank ; list.$query =p2.tic %] это понятно, только не выводит результат.
 
[% list.$query = p1.rank ; list.$query =p2.tic %]
Это неправильно, т.к. вы перезаписываете одну и ту же переменную.

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

Для решения вашей задачи, когда для каждого запроса будет несколько значений, нужно создавать совсем другую структуру (массив хэшей) и писать функцию для ее сортировки, используя 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);
        });
    }
  • В результате получается отсортированная таблица:
    a-parser.com: 762141, 20
    4pda.ru: 828, 3900
    microsoft.com: 40, 26000
    lenta.ru: 522, 26000
    google.com: 1, 410000
Код:
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==
 
Назад
Верх