NODEJS для STEEMIT - Анализ количества наиболее встречающихся слов в постах // NODEJS for STEEMIT - Analysis of the number of most common words
Итак, в прошлом посте:
- мы установили NodeJS
- произвели запуск первого минимального поста.
Ссылка на прошлый пост: https://steemit.com/hive-171319/@alexmove/nodejs-how-to-work-in-steem-steemit-basics-of-work-osnovy-raboty
Пришло время сделать что-то еще. Изучать NODEJS интересно, сразу применяя на практике и делая что-то любопытное.
В этом посте:
- рассмотрим функцию определения количества повторов слов в посте
- рассмотрим выбор наиболее часто встречающихся слов
- получение последних постов по нужному тегу
- соединение всех рассмотренных функций в один скрипт с подключением нужных модулей
Этот скрипт я использовал в одном из прошлых постов. Анализировал наиболее часто употребляемые слова в последних постах.
Ссылки на посты:
https://steemit.com/steemit/@alexmove/most-common-words-in-100-posts-with-tag-steemit
https://steemit.com/hive-171319/@alexmove/analiz-100-postov-s-tegom-ukraine-na-samye-ispolzuemye-slova-samoe-ispolzuemoe-slovo-ochen
Разберем этот скрипт.
Вначале добавим все константы и подключение к модулям.
//подключение к модулю dsteem для работы с API STEEMIT
const dsteem = require('dsteem');
const client = new dsteem.Client('https://api.steemit.com');
//ключ и имя аккауна - тут надо ввести свой приватный ключ
let wifkey = 'хххххх';
//имя аккаунта
let votey = "alexmove";
//технические переменные
var author;
var permlinkR;
var body3R;
Далее функция, которая считывает данные о постах.
Я присваиваю в переменные author - имя аккаунта, а в permlinkR ссылку поста. Это нужно для работы моей отдельной функции по обнаружении наиболее встречающихся слов. Хотя можно было бы сделать иначе, и обойтись без дополнительных переменных. Но мне так удобнее было на момент написания этого скрипта. И сейчас для наглядности происходящего это также удобно.
async function main() {
const query = {
//указать тег, который нужно читать
tag: 'bru',
//количество получаемых постов
limit: 1,
//нужно ли получать текст поста
truncate_body: 0,
};
client.database
.getDiscussions('trending', query)
.then(result => {
var posts = [];
result.forEach(post => {
author = post.author;
permlinkR = post.permlink;
body = post.body;
body = body.split(" ");
words(body);
});
console.log(body3R);
})
.catch(err => {
console.log(err);
alert('Error occured, please reload the page');
});
}
//catch error messages
main().catch(console.error);
И функция, которая получает последние посты в STEEMIT
client.database.call('get_content', [author, permlinkR]).then(function(discussion){})
Функция которая анализирует наиболее употрбеляемые слова:
function words(body)
{
//let words = body1.split(" ");
var wordsCount = body.reduce(function (acc, w) {
if(acc[w]) {
acc[w] += 1
} else {
acc[w] = 1;
}
return acc;
}, {});
for (var w in wordsCount)
{
console.log('Cлово "%s" встречается %d раз', w, wordsCount[w]);
//если слово встречается больше 2 раз, и длина слова больше 4 символов
if (wordsCount[w]>2) {
if (w.length>4) {
// body3R = body3R + `| @`+author + ` | ` + `<a href="https://steemit.com/@${author}/${permlinkR}">` + permlinkR + ` </a> | Word "`+ w +`"| be found ` + wordsCount[w]+ ' times | \n';
bodyArr = bodyArr + ` ` + w;
fs.writeFileSync("bdLOG.txt",body3R);
}
}
}
}
Соединяем все это в один файл, называем его "analize.js", поменяешь в каталог "js" на диске С:
Вот полный текст скрипта:
const dsteem = require('dsteem');
const client = new dsteem.Client('https://api.steemit.com');
let wifkey = 'xxxxx';
let votey = "alexmove";
var author;
var permlinkR;
var body3R;
function words(body)
{
//let words = body1.split(" ");
var wordsCount = body.reduce(function (acc, w) {
if(acc[w]) {
acc[w] += 1
} else {
acc[w] = 1;
}
return acc;
}, {});
for (var w in wordsCount)
{
//console.log('Cлово "%s" встречается %d раз', w, wordsCount[w]);
if (wordsCount[w]>2) {
if (w.length>4) {
body3R = body3R + `| @`+author + ` | ` + `<a href="https://steemit.com/@${author}/${permlinkR}">` + permlinkR + ` </a> | Word "`+ w +`"| be found ` + wordsCount[w]+ ' times | \n';
}
}
}
}
async function main() {
const query = {
tag: 'bru',
limit: 10,
truncate_body: 0,
};
client.database
.getDiscussions('trending', query)
.then(result => {
var posts = [];
result.forEach(post => {
author = post.author;
permlinkR = post.permlink;
body = post.body;
body = body.split(" ");
words(body);
});
console.log(body3R);
})
.catch(err => {
console.log(err);
alert('Error occured, please reload the page');
});
}
//catch error messages
main().catch(console.error);
client.database.call('get_content', [author, permlinkR]).then(function(discussion){})
Соединяем все это в один файл, называем его "analize.js", поменяешь в каталог "js" на диске С:
Запускаем nodejs command promt
набираем, как мы помним из прошлого поста, cd .., cd js (пока не окажемся в нужной нам папке C:\js).
набираем node analize.js
Если выводит ошибку: "SyntaxError: Unexpected token '}'" - значит это ошибка, где-то добавили лишний символ, возможно случайно. Пожалуйста, перепроверьте.
Если выводит ошибку: "Cannot find module 'dsteem', надо запустить команду "npm i dsteem" для того, чтобы установить модуль в ваш NODEJS
В случае успешного запуска, у вас получится вот такое окошко.
| First Header | Second Header | --- | -- |
|---|---|---|---|
| @diosarich | one-day-in-my-hometown-5-or-the-wonders-of-nature-in-the-philippines-in-summer-the-pace-of-living-relaxes-to-a-steadier-rhythm | Word "Oriental" | be found 8 times |
| @tinochka2 | one-day-in-my-town-fontan-zhizni-v-zaporozhe | Word "фонтан" | be found 3 times |
| @tinochka2 | one-day-in-my-town-fontan-zhizni-v-zaporozhe | Word "когда" | be found 3 times |
| @tinochka2 | one-day-in-my-town-fontan-zhizni-v-zaporozhe | Word "спасибо" | be found 3 times |
Это сделано как раз для того, чтобы можно было в посте отобразить в красивой табличке. В самом скрипте, разумеется, это можно настроить.
Мы получаем подготовленный список для таблички, где указан автор, ссылка на пост, слово и количество, которое оно найдено.
Интересный материал на тему NODEJS для STEEMIT:
https://steemit.com/utopian-io/@edicted/dsteem-tutorial-lesson-5-inspecting-block-operations
Сегодня мы сделали скрипт для STEEMIT на NODEJS, который определяет количество наиболее используемых слов.
Есть вопросы? Задавайте.
Что интересно автоматизировать?
В следующем посте о NODEJS мы двинемся дальше исследовать программирование для STEEMIT
Всем счастья!
Спасибо за внимание!


Я бы, наверное, попробовала разгадать алгоритмы, кто как голосует. Например, я голосую в сообществе по свежим интересным постам. Куратор может голосовать по определенным тегам. Вот понять эту закономерность было бы интересно:) Вводить название аккаунта и понимаешь его логику!)
Это прямо ИИ надо разрабатывать... Но как минимум статистику можно собирать.
Возможно придумать/найти статистические формулы, и на базе них.
Хотя тут же есть факторы, которые сложно отследить автоматом. Например качество картинки на превью, тема поста и так далее.
Но в целом идея живая, можно вывести определенное количество свойств каждого поста, составить статистику по голосованию исследуемого аккаунта. И на базе этой статистики найти способ прогнозирования, если будет закономерность.
Вау, крутая тема получается
@greatketty
Я тоже думал о чем-то подобном, только в гораздо упрощенной форме - просто писать комментарии под каждым постом, где кураторы апы ставят :)
А у тебя тут гораздо более масштабная идея. в
В случае реализации, можно прогнозировать, где будет ап китов - делать апвоуты ДО апа китов, и соответственно неплохо получать от кураторских)
Одна голова хорошо, а две лучше! Будет круто, если получится что-то:)
волшебники, как вы это делаете)