Всем привет!
Решил применить свои профессиональные навыки на благо Голоса.
Увидел в одном из чатов, запрос на простой скрипт для @liga.avtorov и промоушена "Взлёт" по сбору информации из постов Голоса. И взялся за дело!
Так как я работаю с PHP, то начал с поиска готовых библиотек на PHP для работы с API Голоса или Steemit`a.
Нашел только одну начатую разработку: https://golos.id/@php-node-client , под авторством @t3ran13.
И решил посмотреть что умеет этот Json-RPC Client.
В библиотеке имеется небольшой список запросов к API голоса.
namespace: GrapheneNodeClient\Commands\DataBase;
GetContentCommand
GetDiscussionsByAuthorBeforeDateCommand
GetDiscussionsByBlogCommand
GetDiscussionsByCreatedCommand
GetDiscussionsByFeedCommand
GetDiscussionsByTrendingCommand
GetTrendingCategoriesCommand
Мне же для моего бота не хватает нескольких запросов. Один из них get_accounts
- для получения общей информации о пользователе. Название запросов (методов), я взял в Golos API Explorer by @on0tole. И еще что то тут http://ropox.tools/steemjs by @ropox
Написана библиотека достаточно просто и подробно прокомментирована. Поэтому добавить новый запрос очень просто.
Добавляем файл GetAccountCommand.php в папку Commands/DataBase
со следующим содержимым
namespace GrapheneNodeClient\Commands\DataBase;
class GetAccountCommand extends CommandAbstract
{
/** @var string */
protected $method = 'get_accounts';
/** @var array */
protected $queryDataMap = [
'0' => ['array'], //authors
];
}
Также мне нужен еще запрос get_followers
. По аналогии создаем новый файл GetFollowersCommand.php:
class GetFollowersCommand extends CommandAbstract
{
/** @var string */
protected $method = 'get_followers';
/** @var array */
protected $queryDataMap = [
'0' => ['string'], //author
'1' => ['nullOrString'], //startFollower
'2' => ['string'], //followType //blog, ignore
'3' => ['integer'], //limit
];
}
Но увы - она не сработала. Пошел копать дальше app.js с сайта golos.io. Как-то он же получает список подписчиков?
Там я выяснил что есть разные API: DataBase_api, Follow_api, Login_api, NetworkBroadcast_api.
И у каждого свой индекс. А так же для запроса формируется следующая json строка
{"id":16,"method":"call","params":[0,"get_dynamic_global_properties",[]]}
где в params
идет первым как раз этот индекс апи.
apiIds: {
database_api: 0,
login_api: 1,
follow_api: 2,
network_broadcast_api: 4
},
но далее тут же на golos.io формируется такой запрос
{"id":29,"method":"call","params":[5,"get_follow_count",["semasping"]]}
В этом запросе API индекс равен 5, но метод get_follow_count
принадлежит follow_api
Выходит что для follow_api
id=5
хотя выше указано что id=2
.
Может кто то из разработчиков Голоса подскажет. Обращаюсь к @sheriff, может знаете кто сможет подсказать подробнее про эти apiIds
Другие методы и их параметры можно посмотреть в gist на github. Список большой, а возможности спойлеров тут нет, поэтому выложил в гист
https://gist.github.com/semasping/d717478e731372c20ee14d8752c8f8e5
Также судя из этого списка различных разделов API даже больше чем указано в apiIds
. Есть еще market_history_api
и assets_api
, но возможно они относятся именно к сайту golos.io
Теперь вернемся к библиотеке.
В самой библиотеке на данный момент нет возможности задавать API индекс.
В методе doRequest()
класса `` код формирования запроса
$data = [
'id' => $this->getNextId(),
'method' => $data['method'],
'params' => $data['params']
];
я изменил на такой
$apiId = 0
$data = [
'id' => $this->getNextId(),
'method' => 'call',
'params' => [$apiId,$data['method'],$data['params']]
];
Такой код работает и для database_api
и для follow_api
. Другие я пока не пробовал.
Обращаюсь к автору, @t3ran13, Вы лучше знаете свой код, и имеете представление, как лучше добавить поддержку разных API. Тем более, что у вас уже есть начало для разделения.
namespace GrapheneNodeClient\Commands\DataBase;
соответственно можно добавить namespace GrapheneNodeClient\Commands\Follow;
и т.д.
Давайте спишемся и обсудим.
Я в телеграме: https://t.me/Semasping
Skype: semasping.
С GitHub работал мало, и боюсь накосячить. Но в моём представлении мне надо было вашу библиотеку fork`нуть -> Внести изменения -> оформить pull request?
Сейчас же я её поставил через composer. И так как не обнаружил нужных мне методов, то решил попробовать свои силы в доработке.
Также я еще добавил в Tools
Reputation.php
для расчета репутации
Пример использования
Reputation::calculate($account['reputation'])
Теперь немного о скрипте.
В рамках промоушена “Взлёт” скрипт раз в сутки будет запрашивать репутацию у участников и сохранять себе на сервер. В других случаях этот же скрипт можно будет применить для сбора разной информации у пользователей Голоса.
Например: количество постов, подписчиков или других показателей собранных за необходимый период.
Другой скрипт будет раз в час собирать данные авторов постов по тегу # идунавзлёт и добавлять их в список для обработки.
Подобный функционал будет полезен и для других инициатив на Голосе.
Если интересуют подробности, задавайте вопросы в комментариях.
Буду рад общению и поддержке!
Годное дело. Больше разно языковых библиотек надо. Желательно со всеми функциями. Думаю тогда и проекты появляться будут.
Да функции будут добавляться по ходу работы.
Здравствуйте!
Во-первых, Вам сюда: developers.golos.io. Во-вторых, Вам нужно зарегистрироваться в Голос-Чате и там зайти на канал для разработчиков, где наша команда сможет подсказывать по необходимости.
Команда Голоса.
Тут был: developers.golos.io. там нашел информацию только по database_api, про другие api информацию не увидел.:(
За канал для разработчиков спасибо - пойду выяснять подробности.
Человек дело semasping!
Спасибо что откликнулся на мою просьбу...
Репост твоих трудов!!
@semasping Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество полученных голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Спасибо большое за проделанную работу и инструкцию, пригодится.
@semasping Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Ваш пост поддержали следующие Инвесторы Сообщества "Добрый кит":
sharker, xroni, polyideic, lumia, dimarss, vik, vadbars, vasilisapor2, nefer, olga-olga, semasping, ladyzarulem, shkiper, gryph0n, voltash, asuleymanov, yuriks2000, master-set, vika-teplo, aiparnyuk, ani.vartanova, blondinka, del137, prost, mr-nikola, mrramych, bospo, nerengot, lokkie, dim447, vladsm, ssleeperr, zhenek, wedge, chugoi
Поэтому я тоже проголосовал за него!
Если Вы проголосуете за этот комментарий, то поможете сделать "Доброго Кита" сильнее!
Ооо, как это облегчит нам жизнь ) спасибо!
@semasping, Поздравляю!
Ваш пост был упомянут в моем хит-параде в следующих категориях:
я и сам не много, будем учиться) Алгоритм верный, делай пул, ничего не сломаешь)
странно, но я думал что индексы нафиг ен нужны, а оно вон как выходит
сча в телегу стукну)
пул уже сделал вчера.
но похоже что многое смешал там.
хотя думаю разберемся
@semasping Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за общую выплату получил
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
@semasping Поздравляю! Вы добились некоторого прогресса на Голосе и были награждены следующими новыми бейджами:
Награда за количество голосов
Вы можете нажать на любой бейдж, чтобы увидеть свою страницу на Доске Почета.
Чтобы увидеть больше информации о Доске Почета, нажмите здесь
Если вы больше не хотите получать уведомления, ответьте на этот комментарий словом
стоп
Добрый вечер! Ответьте мне, пожалуйста, на вопрос, куда исчезла функция "поделиться" из моего блога?
Вечер добрый. Вопрос больше для команды голоса, и они уже решают, судя по вашему посту.
но у меня есть предположение что нет этого значка только под вашими личными записями. а если вы зайдете в другого автора - то там будут.
Если я нахожусь в разделе "Блог". То у меня тоже нет этого значка. А у тех которыми я делился он есть и зелененький.
Но если перейду в ваш блог - то все в порядке - они видны.
Скорее всего это сделано, Так как вы же своими собственными записями не можете еще раз поделиться, поэтому у вас как у автора этих записей - нет значков таких.
Дружище... все есть... кроме проблемы постить средствами пхп...
без шаманства :)
Тот кто все же возмет фабирже в руки и сделает плг к примеру с вордпресом - :D смогет китом стать в течении суток ИМХО
Над плагином к WP работы ведутся, но именно большая проблема в постинге. Без нормального постинга - плагин почти бесполезен.
Так же и над постингом ведутся эксперименты - пока не очень успешные. Только с шаманством :) через node.js или piston(на python).
В том то и беда :D У меня даже шизофренические мысли возникают поставить серв с питоном, что б плаг через него работал... но опять же это вариант с шаманством для меня :(
ничего не поняла, хотя честно попыталась. буду пользоваться результатами! )) а именно - собранными цифирьками ))
У @arcange есть общедоступный mssql сервер где есть весь блокчейн - удобнее использовать его :)
Спасибо за подсказку, я о нем читал а потом забылось как то.
Да и приятно внести вклад в общее дело.