NodeJs Scripts for Steemit Witness: Get a list of voters for a witness

in SteemFamily3 years ago (edited)

NodeJs Scripts for Steemit Witness.png

Продолжаю создавать скрипты на NODEJS для STEEMIT, теперь уже для Wintess, для удобства работы свидетелей.

Итак, конечно же, возник вопрос, как получить доступ к списку всех, кто проголосовал.

Достаточно просто я получил данные в формате JSON, но вот дальше мне какое-то время не удавалось получить нужные мне данные из самого JSON :)

JSON он вот такой:

{
  votes: [
    { id: 890149, witness: 'alexmove.witness', account: 'adeljose' },
    { id: 895210, witness: 'alexmove.witness', account: 'adivender' },
     ... 100 more items
  ]
}

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

Вот отрывок скрипта:


function replacer(key, value) {
 
 if (key === 'witness')
    if (value > 'steemit-market')
        process.exit(1);
  if (key === 'account')
         console.log(value);            
  return value;
}

const userStr = JSON.stringify(result, replacer);
// "{"id":229,"name":"Sammy"}"
})  

Теперь нужно будет доработать мои скрипты, чтобы была проверка список всех, кто проголосовал, с последующей возможностью корректировать эти списки.

Я думаю, что схема работы будет такая - я буду периодически запускать проверку списка, скрипт будет добавлять новые аккаунты, и сделать пометку для тех, кто отсутствует в списке.

А затем уже вручную, я буду устанавливать % для кэшбэка и upvote. Это делает в соответствие с количеством MV в аккаунте, который легко можно увидеть, например используя steemworld.org от @steemchiller

Что теперь осталось доделать в скрипте? Нужно доделать непосредственно сохранение в базу. Затем следующее, это ввести новую колонку "дату проверки", чтобы можно было определять актуальность данных в этом списке.

Это позволит использовать список в базе MySql без вручного введения данных и, главное, без проверки актуальности списка.

Всем спасибо за внимание!
И хорошего дня!

Полный скрипт:

const dsteem = require("dsteem");
const mysql = require("mysql2");
const steem = require('steem');
const fs = require("fs");            
  
var settings = require('./config.js');

let body3R = '';
let num_day = settings.num_day;
let bd_name = settings.bd_name;
let hive_name = settings.hive_name;
let url_post = settings.url_post;
let password_mysql = settings.password_mysql;
let user_mysql = settings.user_mysql;
let title_name = settings.title_name;
let image_list = settings.image_list;
let wifkey = settings.wifkey;
let votey = settings.account;

config = {
  host: "localhost",
  user: user_mysql,
  database: bd_name,
  password: password_mysql
}

const connection = mysql.createConnection(config);

    var d = new Date(); // Today!
    d.setDate(d.getDate()-num_day); // Yesterday!
    d = d.toJSON().split("T")[0];
    d = d.replace(/-/gi, '');
    console.log(d);   

let mytable_p = 'p'+d;
let mytable_c = 'c'+d;
let mytable = 'a'+d;

let fullbase = "votebase";
//let fullbase = "a3";

steem.api.call('database_api.list_witness_votes',{start:["steemit-market",""], limit:200, order:"by_witness_account"},function(err, result){
    
//  console.log(err, result);

//JSON.parse(result);

const myObjStr = JSON.stringify(result);

//console.log(myObjStr);
// "{"name":"Sammy","age":6,"favoriteFood":"Tofu"}"

//console.log(JSON.parse(myObjStr));

let what = JSON.parse(myObjStr);

 const users = result;
   //console.log(users);
   // console.log(users[votes].length);
   // console.log(users[witness]);

function replacer(key, value) {
 
 if (key === 'witness')
    if (value > 'steemit-market')
        process.exit(1);
  if (key === 'account')
         console.log(value);            
  return value;
}

const userStr = JSON.stringify(result, replacer);
// "{"id":229,"name":"Sammy"}"
})  



/*

steem.api.getWitnessByAccount("alexmove", function(err, result) {
    
    JSON.parse('{"p": 5}', function(k, v) {
  if (k === '') { return v; } // самое верхнее значение - возвращаем его
  return v * 2;               // иначе возвращаем v * 2.
});                           // { p: 10 }

console.log(err, result);


});

*/

Sort:  

Upvoted! Thank you for supporting witness @jswit.

This is a test!

This is a test!

Hi, @alexmove

Please support our team (@alexmove.witness and @steemit-market). We ask you to vote for us as witnesses. We are developing automatic checks for the uniqueness of posts, user ratings and other scripts and activities. We are also preparing a big project - the online shop (sale for STEEM/SBD).

Every day we send double cashback to those who voted for us. Your vote is very important to us!