Files
electronwall/api/1ml.go
callebtc edc4152faf works
2022-08-31 14:09:17 +02:00

78 lines
1.6 KiB
Go

package api
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"time"
"github.com/callebtc/electronwall/config"
log "github.com/sirupsen/logrus"
)
type OneML_NodeInfoResponse struct {
LastUpdate int `json:"last_update"`
PubKey string `json:"pub_key"`
Alias string `json:"alias"`
Addresses []struct {
Network string `json:"network"`
Addr string `json:"addr"`
} `json:"addresses"`
Color string `json:"color"`
Capacity int `json:"capacity"`
Channelcount int `json:"channelcount"`
Noderank struct {
Capacity int `json:"capacity"`
Channelcount int `json:"channelcount"`
Age int `json:"age"`
Growth int `json:"growth"`
Availability int `json:"availability"`
} `json:"noderank"`
}
type OneMlClient struct {
}
func GetOneMlClient() OneMlClient {
return OneMlClient{}
}
func (c *OneMlClient) GetNodeInfo(pubkey string) (OneML_NodeInfoResponse, error) {
url := fmt.Sprintf("https://1ml.com/node/%s/json", pubkey)
log.Infof("Getting info from 1ml.com for %s", pubkey)
client := http.Client{
Timeout: time.Second * time.Duration(config.Configuration.ApiRules.OneMl.Timeout),
}
req, err := http.NewRequest(http.MethodGet, url, nil)
if err != nil {
log.Fatal(err)
}
res, getErr := client.Do(req)
if getErr != nil {
log.Fatal(getErr)
}
if res.Body != nil {
defer res.Body.Close()
}
body, readErr := ioutil.ReadAll(res.Body)
if readErr != nil {
log.Fatal(readErr)
}
r := OneML_NodeInfoResponse{}
jsonErr := json.Unmarshal(body, &r)
if jsonErr != nil {
log.Errorf("[1ml] api error: %v", jsonErr)
}
return r, nil
}