SteemJS, wstęp do programowania API z uzyciem SteamJS.

Co zrobić gdy nie możemy usnąć. Możemy oczywiście obejrzeć film, posłuchać muzyki. Niestety te opcje zawiodły, ostatnia deska ratunku programowanie.

Poniższy skrypt przedstawia, jak w prosty sposób zacząć korzystać z API SteamJS. Wykorzystane są dwie metody:

  • steem.api.getDiscussionsByBlog, pobranie postów z bloga

  • steem.api.getActiveVotes, pobranie głosujących na post

<script src="https://cdn.steemjs.com/lib/latest/steem.min.js"></script>
<script>
// Deklaracja zmiennej autora, TU możemy wstawić swój nick.
var author = 'fat.music';

// Deklaracja zmiennej, w której będziemy trzymać wyniki — głosujących.
var voters = [];

// Deklaracja zapytania, pobieramy 100 postów autora.
var query = {
    tag: author,
    limit: 100
};

// Wykonanie zapytania, zwracane są posty.
steem.api.getDiscussionsByBlog(query, function(err, posts) {
    // Dla każdego posta wykonujemy funkcję.
    posts.forEach(function(post) {
        // Jeśli jesteśmy autorem, zapytanie zwraca również posty Resteemowane.
        if (post.author === author) {
            // Pobieramy głosujących.
            steem.api.getActiveVotes(author, post.permlink, function(err, votes) {
                // Dla każdego głosującego wykonujemy funkcję.
                votes.forEach(function(vote) {
                    // Jeśli nie jesteśmy głosującym.
                    if (vote.voter !== author) {
                        // Szukamy w tablicy wyników czy już głosujący w niej jest. Patrz poniżej funkcja search.
                        let voterId = search('@' + vote.voter, voters);
                        // Jeśli nie znaleziono głosującego w tablicy. Dodajemy go.
                        if (voterId === false) {
                            voter = ({name: '@' + vote.voter, votes: 1, reward: parseInt(vote.rshares)});
                            voters.push(voter);
                            //console.log(false);
                        } else { // Jeśli znaleziono głosującego w tablicy. Nadpisujemy zwiększając jego liczbę głosów (votes) i nagrodę (reward).
                            voters[voterId] = {
                                name:   '@' + vote.voter,
                                votes:  voters[voterId].votes + 1, 
                                reward: voters[voterId].reward + parseInt(vote.rshares)
                            }
                        }
                    }
                });
            });
        }
    });
});
// Odczekujemy 3 sekundy. I sortujemy wyniki i wyświetlamy je na console.
setTimeout(function() { 
    voters.sort(compare);
    console.log(voters);
}, 3000)

// Funkcja porównywająca, do sortowania.
function compare(a, b) {
  if (a.reward < b.reward)
    return 1;
  if (a.reward > b.reward)
    return -1;
  return 0;
}
// Sprawdzanie tablicy wyników, czy głosujący już w niej jest.
function search(key, array) {
    for (var i = 0; i < array.length; i++) {
        if (array[i].name === key) {
            return i;
        }
    }
    return false;
}
</script>

Poniższy kod możesz skopiować i zapisać w pliku z rozszerzeniem html. Zmieniając zmienna author na swój nick. Następnie odpalić w przeglądarce w Chrome i klikając prawym przyciskiem na białej stronie, wybieramy Zbadaj element i wybieramy zakładkę Console.
Przykro mi nie zdążyłem sprawdzić, czy wszystko jest ok, jeśli znalazłeś błąd, daj znać.

Źródła:
https://github.com/steemit/steem-js/tree/master/doc

https://stackoverflow.com/questions/1129216/sort-array-of-objects-by-string-property-value-in-javascript?page=1&tab=votes#tab-top
https://stackoverflow.com/questions/12462318/find-a-value-in-an-array-of-objects-in-javascript
https://stackoverflow.com/questions/4689856/how-to-change-value-of-object-which-is-inside-an-array-using-javascript-or-jquer

Dla miłośników Clean Code, Płyta NOFX — War on Errorism Full Album

Wynik działania, skryptu. Oczywiście podziękowania dla głosujących!

0:{name: "@andzi76", votes: 20, reward: 414392469077}
1:{name: "@hr1", votes: 4, reward: 206583721299}
2:{name: "@lukmarcus", votes: 6, reward: 104458444707}
3:{name: "@assayer", votes: 2, reward: 28514050763}
4:{name: "@dailydogger", votes: 1, reward: 15393897809}
5:{name: "@bolgan", votes: 2, reward: 11736465752}
6:{name: "@kungalu", votes: 2, reward: 11404716972}
7:{name: "@gorzelapiotr", votes: 1, reward: 11320345088}
8:{name: "@firesteem", votes: 1, reward: 6485881485}
9:{name: "@grecki-bazar-ewy", votes: 1, reward: 4517666356}
10:{name: "@grzyb77", votes: 6, reward: 3537373601}
11:{name: "@niepoprawny", votes: 9, reward: 3235543453}
12:{name: "@ciapo", votes: 5, reward: 3067396071}
13:{name: "@anka", votes: 1, reward: 2731877903}
14:{name: "@kapitanpolak", votes: 4, reward: 2641612567}
15:{name: "@jcdent", votes: 2, reward: 2307213774}
16:{name: "@runningt", votes: 1, reward: 2277917977}
17:{name: "@followforupvotes", votes: 1, reward: 2112950897}
18:{name: "@santarius", votes: 2, reward: 1879225937}
19:{name: "@tranquilpen", votes: 1, reward: 1400056808}
20:{name: "@silverfoxx", votes: 3, reward: 1373099985}
21:{name: "@gradzio", votes: 1, reward: 1288267324}
22:{name: "@ernopl", votes: 2, reward: 1150374791}
23:{name: "@jahissac", votes: 1, reward: 1126387587}
24:{name: "@stachu", votes: 1, reward: 865847918}
25:{name: "@ubg", votes: 1, reward: 855431574}
26:{name: "@fraktale", votes: 1, reward: 842533415}
27:{name: "@spiry-btc", votes: 2, reward: 824510536}
28:{name: "@lastprophet", votes: 1, reward: 616852397}
29:{name: "@pari", votes: 1, reward: 615122740}
30:{name: "@maciejka", votes: 1, reward: 612852133}
31:{name: "@filip-pietrek", votes: 1, reward: 606047262}
32:{name: "@basementdisco", votes: 1, reward: 605255744}
33:{name: "@dhofer", votes: 1, reward: 592943194}
34:{name: "@pure-atman", votes: 1, reward: 583044972}
35:{name: "@annaburska", votes: 1, reward: 577562642}
36:{name: "@maras27", votes: 1, reward: 569213872}
37:{name: "@tx1683", votes: 1, reward: 558830734}
38:{name: "@basedmak", votes: 1, reward: 556384070}
39:{name: "@likanatalika", votes: 1, reward: 551370976}
40:{name: "@anastasiakula", votes: 1, reward: 544774699}
41:{name: "@absenscarens", votes: 1, reward: 543358761}
42:{name: "@giogiorgadze1", votes: 1, reward: 529061343}
43:{name: "@shogunma", votes: 1, reward: 528782997}
44:{name: "@sarmaticus", votes: 1, reward: 485608660}
45:{name: "@parimple", votes: 1, reward: 481173849}
46:{name: "@matrixxx", votes: 1, reward: 445475844}
47:{name: "@usmanbutt", votes: 1, reward: 368673154}
48:{name: "@vein", votes: 1, reward: 365608989}
49:{name: "@ramadhan167", votes: 1, reward: 237377798}
50:{name: "@smarthamster72", votes: 1, reward: 231098328}
51:{name: "@raise-me-up", votes: 1, reward: 62565389}
52:{name: "@mamowachi", votes: 1, reward: 50371255}
53:{name: "@mmmmkkkk311", votes: 2, reward: -1379286972739}