[Brainstorm] Как считается "Рейтинг" dtf ?

Есть на нашем сайтеце такая вот занимательная страница с лучшими людьми города:

[Brainstorm] Как считается "Рейтинг" dtf ?

Список заполняется по запросу из

Где судя по имени поля рейтингом считается сумма "статистики" за 7 дней

[Brainstorm] Как считается "Рейтинг" dtf ?

Скрипт для визуализации таблицы с рейтингом

async function main() { let blogs = null const response = await fetch(`https://api.dtf.ru/v2.7/discovery/blogs`); const response_json = await response.json(); if (response_json.result) { blogs = response_json.result; } if (!blogs) return; let results_text = ` <h1>Топ 50 блогов по количеству реакций на постах за 7 дней</h1> <table> <thead> <tr> <td>Место</td> <td>Юзер</td> <td>Реакций на постах за 7 дней</td> </tr> </thead> <tbody>`; for (let i=0; i<blogs.length; i++) { const blog = blogs[i].data; results_text += ` <tr> <td>${i+1}</td> <td> <a href="https://dtf.ru/u/${blog.id}" > <img style="width: 36px; height: 36px; float:left;" src="https://leonardo.osnova.io/${blog.avatar.data.uuid}/-/scale_crop/72x72/" /> <span style="line-height: 36px; margin: 0 0 0 10px;" >${blog.name}</span> </a> </td> <td>${blog.count_stats_7d}</td> </tr>`; } results_text += ` </tbody> </table>`; document.querySelector('.view').innerHTML = results_text; } main();
[Brainstorm] Как считается "Рейтинг" dtf ?

Я всегда думал что count_stats_7d это сумма реакций на постах за 7 дней. Пока не написал скрипт для его подчета.

Скрипт для подсчета реакций на постах за 7 дней

Замените user_id на нужный

async function main() { const user_id = 2164790 let reactions_summ = 0; const delay_time_ms = 200; let last_sorting_value = 0; let last_id = 0; let cursor= ''; let must_break = false; while (true) { let url; const base_url = 'https://api.dtf.ru/v2.10/timeline'; const params = { markdown: 'false', sorting: 'new', subsitesIds: user_id }; if (last_sorting_value) params.lastSortingValue = last_sorting_value; if (last_id) params.lastId = last_id; if (cursor) params.cursor = cursor; const url_params = new URLSearchParams(params); url = `${base_url}?${url_params.toString()}`; let entity_response_json; await delay(delay_time_ms); const entry_response = await fetch(url); entity_response_json = await entry_response.json(); if (!entity_response_json?.result?.items?.length) break; last_sorting_value = entity_response_json.result.items[entity_response_json.result.items.length - 1].data.date; last_id = entity_response_json.result.items[entity_response_json.result.items.length - 1].data.id; cursor = entity_response_json.result.cursor; for (let k = 0; k < entity_response_json.result.items.length; k++) { if (entity_response_json.result.items[k].type !=="entry") continue; if (entity_response_json.result.items[k].data.isPinned === true) continue; //пропускаем закреп if ( (entity_response_json.result.items[k].data.date * 1000) < (Date.now() - 7 * 24 * 60 * 60 * 1000) ) { console.log('break'); must_break = true; break; } let counters = entity_response_json.result.items[k].data.reactions.counters; for (let c = 0; c < counters.length; c++) { reactions_summ += counters[c].count; } } if (must_break || !last_id || !last_sorting_value) break; } console.log(reactions_summ); document.querySelector('.view').innerHTML = ` <p>Сумма реакций на постах за 7 дней юзера id=${user_id} - ${reactions_summ}</p> `; } //функция для паузы function delay(milliseconds){ return new Promise(resolve => { setTimeout(resolve, milliseconds); }); } main();

Сумма реакций на постах за неделю:
Бегиныч - 1295, 1669 - в рейтинге
Анапасик - 1120, 273 - в рейтинге

Внимание вопрос:

По какой формуле считается рейтинг?

В рейтинге кстати зашедоубанены шитпостеры делающие посты 24/7 типа Маминой Умницы и Гвиздона. Иначе они постоянно были бы в топе.

16
5
3
1
51 комментарий