allyinvest/client.go

70 lines
1.4 KiB
Go

package main
import (
"encoding/xml"
"fmt"
"github.com/joho/godotenv"
"github.com/mrjones/oauth"
"io/ioutil"
"net/http"
"os"
)
/* The trading endpoint for Ally */
const endpoint string = "https://api.tradeking.com/v1/"
type AllyApi struct {
consumer *oauth.Consumer
Client *http.Client
}
func (c *AllyApi) Initialize() {
err := godotenv.Load()
if err != nil {
panic(err)
}
// Set up our new oauth consumer
c.consumer = oauth.NewConsumer(
os.Getenv("CONSUMER_KEY"),
os.Getenv("CONSUMER_SECRET"),
oauth.ServiceProvider{
RequestTokenUrl: "https://developers.tradeking.com/oauth/request_token",
AuthorizeTokenUrl: "https://developers.tradeking.com/oauth/authorize",
AccessTokenUrl: "https://developers.tradeking.com/oauth/access_token",
},
)
c.Client, err = c.consumer.MakeHttpClient(
&oauth.AccessToken{Token: os.Getenv("ACCESS_TOKEN"), Secret: os.Getenv("ACCESS_SECRET")})
if err != nil {
panic(err)
}
}
func (c *AllyApi) get(path string) (resp *http.Response, err error) {
resp, err = c.Client.Get(fmt.Sprintf("%s\\%s", endpoint, path))
return
}
/* The /accounts endpoint of Ally */
func (c *AllyApi) Accounts() []AccountSummary {
b, err := c.get("accounts")
if err != nil {
}
defer b.Body.Close()
raw, err := ioutil.ReadAll(b.Body)
fmt.Printf("%s\n", raw)
if err != nil {
}
var resp AccountResponse
err = xml.Unmarshal(raw, &resp)
if err != nil {
}
return resp.Accounts.Accountsummary
}