Создание интерактивного рейтинга сообщества Steem-BRU. Часть 3. Первый результат.

in Steem-BRU (BY-RU-UA)4 years ago (edited)

Итак, продолжаем.

Рейтинг (1).png

Прошлые посты: https://steemit.com/hive-171319/@alexmove/sozdanie-interaktivnogo-reitinga-soobshestva-steem-bru-podschet-kommentariev-na-nodejs-dlya-steemit

https://steemit.com/hive-171319/@alexmove/sozdanie-interaktivnogo-reitinga-soobshestva-steem-bru-chast-2-telegram-bot-brustatbot

Еше раз подзадачи:

  1. Необходимо получить список всех комментариев нужного пользователя.
  2. Определение нужной даты. Проверка даты комментария с нужным нам диапазоном.
  3. Подсчет нужного аккаунта
  4. Заведение рейтинга - сохранение данных для определения рейтинга.
  5. Проделывание для всего списка сообщества.
  6. Вызов данных по комментарию (затем в иделает сделать в боте)

Сейчас нужно сделать получения списка всех активных пользователей.
Взял из поста со списком курирования: https://steemit.com/hive-171319/@steem-bru/spisok-kurirovaniya-s-akkaunta-steem-bru-or-ot-16-08-2021

Там наиболее активные, после добавлю других.

Помещаем в текстовый файл spisok.txt
Считываем в скрипте

const fs = require("fs");
let array = fs.readFileSync('spisok.txt').toString().split("\n");

И теперь добавляем цикл, чтобы обработать все данные из файла:

var i;
for (i = 0; i < 56; i++) {
console.log(array[i]);
}

Получилось.

Прикручиваем к основному скрипту.

Внимание! Тут я прочел комментарий от @greatketty

image.png

Ой-вей, а ведь телеграмм бот не запущен, даже прототип.
Срочно нужно разобраться, где взять бесплатный сервер для телеграмм-бота. Гуглю...

image.png

Так, для сервера есть определенные сложности. Запущу просто на своем ноуте, и продолжу работать над самим скриптом. Возвращаюсь к процессу.

Соединяю скрипты:

const fs = require("fs");
var y;

    let array = fs.readFileSync('spisok.txt').toString().split("\n");
//let fileContent = fs.readFileSync("spisok.txt", "utf8");

for (y = 0; y < 4; y++) {

    //console.log(array[y]);
    
    
    const steem = require('steem');
 let stat;
test = array[y].split();
console.log(test);

 steem.api.getDiscussionsByComments({
            "start_author": test,
            "limit": 10
        }, function (err, result) {
          //  console.log(err, result);
            
            if (err === null) {
                 var stat = 0;
                      console.log(stat);

                var i, len = result.length;
                for (i = 0; i < len; i++) {
                    var discussion = result[i];
                //  console.log(discussion.created);
                    const moment= require('moment');
                    var now = moment();
                    var input = moment(discussion.created);
                    var isThisWeek = (now.isoWeek() == input.isoWeek())
                //  console.log(isThisWeek);
                
                    if (isThisWeek === true) {
                      stat=stat+1;
                      console.log(stat);
  
                }}
                console.log(array[y]);
                console.log(stat);
                console.log(array[y]);
                        
                    
            }
            
                //console.log('alexmove: ', stat);
            }
            
            );



}

Итак, новый затык - почему не срабатывает из данных скрипта.
array[y].trim()

Функция trim - и все заработало!

const fs = require("fs");
var y;

    let array = fs.readFileSync('spisok.txt').toString().split("\n");
//let fileContent = fs.readFileSync("spisok.txt", "utf8");

for (y = 0; y < 4; y++) {

    //console.log(array[y]);
    
    
    const steem = require('steem');
 let stat;


 steem.api.getDiscussionsByComments({
            "start_author": array[y].trim(),
            "limit": 10
        }, function (err, result) {
          //  console.log(err, result);
            
            if (err === null) {
                 var stat = 0;
                      console.log(stat);

                var i, len = result.length;
                for (i = 0; i < len; i++) {
                    var discussion = result[i];
                //  console.log(discussion.created);
                    const moment= require('moment');
                    var now = moment();
                    var input = moment(discussion.created);
                    var isThisWeek = (now.isoWeek() == input.isoWeek())
                //  console.log(isThisWeek);
                
                    if (isThisWeek === true) {
                      stat=stat+1;
                      console.log(stat);
  
                }}
                console.log(array[y]);
                console.log(stat);
                console.log(array[y]);
                        
                    
            }
            
                //console.log('alexmove: ', stat);
            }
            
            );



}


Новый мощнейший тупик, с которым я сталкивался и раньше, когда себе писал скрипты. Сначала обрабатывается первая часть, а уже потом обрабатывается часть, которая работает с блокчейном.

Из-за этого обрабатывается лишь 1 участник, вместо 56. Что с этим делать - я тогда так и не смог понять. Если сейчас будет также, то я упрусь в очень трудную стену.

//отвлекся вдруг на пару часов//

Продолжим! На чем мы остановились? Ах да... кручу верчу, чтобы добится работы скрипта :)

Придумал забавный вариант с удалением по одному элементу из файлика.

тестовый скрипт

const fs = require("fs");

let array = fs.readFileSync('spisok.txt').toString().split("\r");
const steem = require('steem');
//let popped = array.shift();
//console.log(array); 

let test_a = array[0].split(' ');
//console.log(test2[0]); 

let popped = test_a.shift();
    console.log(popped); 
    
  //  console.log(test_a); 
  
  fs.writeFile("spisok.txt", test_a.join(' '), (err) => { 
  if (err) { 
    console.log(err); 
  } 
}); 
  

Рабочий вариант - промежуточный

const fs = require("fs");
const steem = require('steem');

var y, err;

let array = fs.readFileSync('spisok.txt').toString().split("\n");
let test_a = array[0].split(' ');
let popped = test_a.shift();
    console.log(test_a);





function test_c(qu) {
 steem.api.getDiscussionsByComments({
            "start_author": qu,
            "limit": 100
        }, function (err, result) {
          //  console.log(err, result);
            
            if (err === null) {
                 var stat = 0;
                      console.log(stat);

                var i, len = result.length;
                for (i = 0; i < len; i++) {
                    var discussion = result[i];
                //  console.log(discussion.created);
                    const moment= require('moment');
                    var now = moment();
                    var input = moment(discussion.created);
                    var isThisWeek = (now.isoWeek() == input.isoWeek())
                //  console.log(isThisWeek);
                
                    if (isThisWeek === true) {
                      stat=stat+1;
                        // console.log(stat);
                        // console.log(qu);
                        
  
                }}
            //  console.log(array[y]);
                //console.log(stat);
            //  console.log(array[y]);
                        
                    
            }
            
                console.log(qu, stat);
                qu2 = qu+' '+stat+"\r\n";
                fs.appendFile("brustat.txt", qu2, (err) => { 
                  if (err) { 
                    console.log(err); 
                  } 
                }); 
            }
            
            );



}


//for (y = 0; y < 6; y++) {

//  console.log(array[y]);
    let stat, test;
    test = test_a[1].trim();
    //console.log(test);
    test_c(test);
//} 

fs.writeFile("spisok.txt", test_a.join(' '), (err) => { 
  if (err) { 
    console.log(err); 
  } 
}); 

Приходится 56 раз запускать скрипт... :)
Хм... )

Впрочем, пока и так неплохо!
Не правда ли?

Запустил 56 раз.
Барабанная дробь!

olesia 100
sergeyk 2
dmitrik 5
slon21veka 76
antikus369 4
strecoza 100
olga.maslievich 0
notannov 100
may2015 100
milakz 39
greatketty 75
apnigrich 19
veta-less 0
qwerrie 33
eternaldreamer 88
yura77 25
thimalteb 23
steemit-bank 0
maxer27 0
nesmeliy 85
yetaras 0
strawberrry 100
soulwind 25
alexmove 14
danny.green 0
way-out 82
darina14 90
slem 28
allfabeta 0
vlad26 90
solox 7
daybook 9
mamamasha 100
gkriptonec 0
aniqamashkoor 54
shahariar1 52
nhockij 0
cryplatinum 2
tinochka2 64
dimok1983 0
ludmila.kyriakou 34
vlad2004 0
nastena09 63
stickmans 20
chinaprofitpro 1
viria7 0
chillipepper 4
liutik2 0
datych 6
rupok 5
municorn 14
ir3k 57

Вот статистика на данный момент :)
Пока еще в ручном режиме нужно обновлять.
И телеграмм бот не прикручен к скрипту.

Но статистика получена!
Проверяем!
Спасибо всем за внимание!

Дальше будет улучшение и доработка всех моментов.

Внимание, есть множество моментов.
Например, сейчас скрипт считает только 100 последних комментариев, если участник пишет больше 100 комментариев, то там все равно будет 100.

image.png

Sort:  

Какая огромная работа! Огромнейшая)

 4 years ago 

Спасибо! Я очень вдохновился :)
Это же идея Димы, а в комментариях кто-то меня тегнул, сейчас уже не помню кто, надо глянуть )
И я вдохновился и за три дня сделал.

Так что сработали командно
Но вот эти моменты будет трудно доделывать
То, что только 100 считает, например.

Хотя.... можно каждый день считать, и затем суммировать.... Это идея :)
Хорошая идея...

Спасибо за поддержку!

 4 years ago (edited)

Идея, но а попробуй посчитать в ручную, это трудно

 4 years ago (edited)

Да, каждый день также автоматом.
Вручную трудоемко, я попробовал, титанический труд.

Хорошо бы такую программу запустить и никаких ручных подсчётов

 4 years ago 

ну ты и голова, Лешка) молодец!

 4 years ago 

Спасибо за поддержку!! Ты 85 комментариев написал за неделю, как думаешь верное?)

Я придумал что считать подневно, а затем суммировать, возможно так будет технически удобнее... Хотя не факт)

Еще есть что дорабатывать

 4 years ago 

ого! 85 - это маловато думаю) не знаю, не считал))))
считать подневно и суммировать - хорошая идея

Loading...
 4 years ago (edited)

Своих героев надо знать в лицо, это я тебя отметила:) изначально эта идея обсуждалась не раз, она просто витала в воздухе!)

А ты большой молодец!!! Отличные результаты:)

 4 years ago (edited)

Хорошо получилось!)