Обновление библиотеки на языке Go для работы с Golos API.
Приветствую. Я решил отойти от стандартного вида написания статей.
В основном это связанно с переработкой библиотеки.
На данном этапе в библиотеке реализован простые функции для работы как Golos так и STEEM. Такие как голосование, комментирование и удаление комментария.
Установка и начало разработки.
Так как библиотека написана на языке программирования GO. То и примеры будут все на нем.
Для начала использования библиотеки надо либо скачать к себе по средствам браузера исходники из моего репозитория(ссылка внизу), либо воспользоваться стандартной функцией языка go go git github.com/asuleymanov/golos-go
.
После этого можно начать разрабатывать свои приложения с её использованием.
Обязательные настройки каждого проекта.
В каждом проекте который вы будите писать надо иметь файл config.json
с такой структурой:
{
"username": "",
"chain": "",
"url": "",
"posting_key": "",
"active_key": "",
"owner_key": "",
"memo_key": ""
}
Описание:
username - Имя пользователя в системе Golos(Steem). (параметр необходим в случае использования процедур отправки операций в систему, по этому может быть пустым или вообще отсутствовать)
chain - название сисемы маленькими буквами. (параметр необходим в случае использования процедур отправки операций в систему, по этому может быть пустым или вообще отсутствовать)
url - WS шлюз для доступа к системе Golos(Steem). (обязательный параметр)
*_key -Соответствующие ключи. (параметр необходим в случае использования процедур отправки операций в систему, по этому может быть пустым или вообще отсутствовать)
При наличии файла можно создать шаблон пустого проекта:
package main
import (
"fmt"
"github.com/asuleymanov/golos-go/client"
)
var cls = client.NewApi()
func main() {
defer cls.Rpc.Close()
...
}
После этого есть два варианта использования.
- Для вызова стандартных процедур системы Golos(Steem).
Client.Rpc.Database.GetConfig()
- Для использования специальных уже готовых процедур.
Client.Vote("author","permlink")
И в завершении пару примеров
Монитор (vote_monitor)
package main
import (
"log"
"time"
"github.com/asuleymanov/golos-go/client"
"github.com/asuleymanov/golos-go/types"
)
var cls = client.NewApi()
func main() {
defer cls.Rpc.Close()
if err := run(); err != nil {
log.Fatalln("Error:", err)
}
}
func run() (err error) {
log.Println("---> GetConfig()")
config, err := cls.Rpc.Database.GetConfig()
if err != nil {
return err
}
props, err := cls.Rpc.Database.GetDynamicGlobalProperties()
if err != nil {
return err
}
lastBlock := props.LastIrreversibleBlockNum
log.Printf("---> Entering the block processing loop (last block = %v)\n", lastBlock)
for {
props, err := cls.Rpc.Database.GetDynamicGlobalProperties()
if err != nil {
return err
}
for props.LastIrreversibleBlockNum-lastBlock > 0 {
block, err := cls.Rpc.Database.GetBlock(lastBlock)
if err != nil {
return err
}
for _, tx := range block.Transactions {
for _, operation := range tx.Operations {
switch op := operation.Data().(type) {
case *types.VoteOperation:
log.Printf("@%v voted for @%v/%v\n", op.Voter, op.Author, op.Permlink)
// Сюда можно вставить любую из операций доступных в системе
}
}
}
lastBlock++
}
time.Sleep(time.Duration(config.SteemitBlockInterval) * time.Second)
}
}
Простая голосовалка (upvote)
package main
import (
"flag"
"fmt"
"log"
"github.com/asuleymanov/golos-go/client"
"github.com/pkg/errors"
)
var cls = client.NewApi()
func main() {
defer cls.Rpc.Close()
if err := run(); err != nil {
log.Fatalln("Error:", err)
}
}
func run() (err error) {
flag.Parse()
args := flag.Args()
if len(args) != 2 {
return errors.New("2 arguments required")
}
author, permlink := args[0], args[1]
fmt.Println(cls.Vote(author, permlink, 10000))
return nil
}
Пример использования:
./upvote hr1 our-journey
Код доступен на Github под MIT лицензией.
Банальность но все мои статьи можно найти у меня в блоге @asuleymanov