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 blogasteem.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}
Comments