github.com/polygon-io/client-go@v1.16.4/websocket/example/main.go (about)

     1  package main
     2  
     3  import (
     4  	"os"
     5  	"os/signal"
     6  
     7  	polygonws "github.com/polygon-io/client-go/websocket"
     8  	"github.com/polygon-io/client-go/websocket/models"
     9  	"github.com/sirupsen/logrus"
    10  )
    11  
    12  func main() {
    13  	log := logrus.New()
    14  	log.SetLevel(logrus.DebugLevel)
    15  	log.SetFormatter(&logrus.JSONFormatter{})
    16  	c, err := polygonws.New(polygonws.Config{
    17  		APIKey: os.Getenv("POLYGON_API_KEY"),
    18  		Feed:   polygonws.RealTime,
    19  		Market: polygonws.Stocks,
    20  		Log:    log,
    21  	})
    22  	if err != nil {
    23  		log.Fatal(err)
    24  	}
    25  	defer c.Close()
    26  
    27  	// aggregates
    28  	//_ = c.Subscribe(polygonws.StocksMinAggs, "*")
    29  	//_ = c.Subscribe(polygonws.StocksSecAggs, "*")
    30  
    31  	// trades
    32  	//_ = c.Subscribe(polygonws.StocksTrades, "*")
    33  	_ = c.Subscribe(polygonws.StocksTrades, "SPY")
    34  
    35  	// quotes
    36  	//_ = c.Subscribe(polygonws.StocksQuotes, "*")
    37  	_ = c.Subscribe(polygonws.StocksQuotes, "SPY")
    38  
    39  	if err := c.Connect(); err != nil {
    40  		log.Error(err)
    41  		return
    42  	}
    43  
    44  	sigint := make(chan os.Signal, 1)
    45  	signal.Notify(sigint, os.Interrupt)
    46  
    47  	for {
    48  		select {
    49  		case <-sigint:
    50  			return
    51  		case <-c.Error():
    52  			return
    53  		case out, more := <-c.Output():
    54  			if !more {
    55  				return
    56  			}
    57  			switch out.(type) {
    58  			case models.EquityAgg:
    59  				log.WithFields(logrus.Fields{"aggregate": out}).Info()
    60  			case models.EquityTrade:
    61  				log.WithFields(logrus.Fields{"trade": out}).Info()
    62  			case models.EquityQuote:
    63  				log.WithFields(logrus.Fields{"quote": out}).Info()
    64  			}
    65  		}
    66  	}
    67  }