Documentation Index Fetch the complete documentation index at: https://docs.benzinga.com/llms.txt
Use this file to discover all available pages before exploring further.
GitHub リポジトリ ソースコードを閲覧し、開発に貢献する
Go 1.13 以降でテスト済み
高性能な実装
外部ライブラリへの依存なし
キャンセルのために Go の context パッケージを使用
ライブラリとサンプルクライアントをインストールします:
go install github.com/Benzinga/go-bztcp/cmd/bztcp@latest
bztcp バイナリは $GOPATH/bin ディレクトリにインストールされます。
同梱のバイナリを使用してクライアントをテストします。
bztcp -v -user YOUR_USERNAME -key YOUR_API_KEY
Option Description -userBenzinga TCP のユーザー名 -keyAPI アクセスキー -v詳細出力を有効にする
成功すると、次のようなメッセージが表示されます:
Benzinga TCP Client initializing.
Connecting to 'tcp-v1.benzinga.io:11337' as user 'YOUR_USERNAME' (w/TLS: false)
Connected. Waiting for events.
{"id":49917328,"title":"Alphabet Option Alert..."}
このライブラリは、主に次の 2 つの関数を公開しています:
Function Description bztcp.Dial(addr, user, key)TCP サーバーへの接続を確立します Conn.Stream(ctx, callback)コールバック関数でメッセージのストリーミングを開始します
package main
import (
" context "
" fmt "
" github.com/Benzinga/go-bztcp/bztcp "
)
func main () {
// サーバーへ接続
conn , err := bztcp . Dial ( "tcp-v1.benzinga.io:11337" , "USER" , "KEY" )
if err != nil {
panic ( err )
}
// メッセージをストリーム
err = conn . Stream ( context . Background (), func ( stream bztcp . StreamData ) {
fmt . Printf ( " %#v \n " , stream )
})
if err != nil {
panic ( err )
}
}
グレースフルシャットダウンのために Go の context を使用します:
package main
import (
" context "
" fmt "
" os "
" os/signal "
" syscall "
" github.com/Benzinga/go-bztcp/bztcp "
)
func main () {
conn , err := bztcp . Dial ( "tcp-v1.benzinga.io:11337" , "USER" , "KEY" )
if err != nil {
panic ( err )
}
// キャンセル可能なコンテキストを作成
ctx , cancel := context . WithCancel ( context . Background ())
defer cancel ()
// シャットダウンシグナルを処理
sigChan := make ( chan os . Signal , 1 )
signal . Notify ( sigChan , syscall . SIGINT , syscall . SIGTERM )
go func () {
<- sigChan
fmt . Println ( "シャットダウン中..." )
cancel ()
}()
// コンテキストでストリーミング
err = conn . Stream ( ctx , func ( stream bztcp . StreamData ) {
fmt . Printf ( "受信: %s \n " , stream . Title )
})
if err != nil && err != context . Canceled {
fmt . Printf ( "エラー: %v \n " , err )
}
}
StreamData 構造体には、解析済みのメッセージが含まれています。
conn . Stream ( ctx , func ( stream bztcp . StreamData ) {
// メッセージフィールドへアクセス
fmt . Printf ( "ID: %d \n " , stream . ID )
fmt . Printf ( "Title: %s \n " , stream . Title )
fmt . Printf ( "Published: %s \n " , stream . Published )
// tickerを処理
for _ , ticker := range stream . Tickers {
fmt . Printf ( "Ticker: %s \n " , ticker . Name )
}
// チャネルを処理
for _ , channel := range stream . Channels {
fmt . Printf ( "Channel: %s \n " , channel )
}
})
conn , err := bztcp . Dial ( "tcp-v1.benzinga.io:11337" , "USER" , "KEY" )
if err != nil {
log . Fatalf ( "Failed to connect: %v " , err )
}
err = conn . Stream ( ctx , handler )
if err != nil {
switch {
case err == context . Canceled :
log . Println ( "Stream cancelled by user" )
case err == context . DeadlineExceeded :
log . Println ( "Stream timeout" )
default :
log . Printf ( "Stream error: %v " , err )
}
}
package main
import (
" context "
" encoding/json "
" fmt "
" log "
" os "
" os/signal "
" syscall "
" github.com/Benzinga/go-bztcp/bztcp "
)
func main () {
user := os . Getenv ( "BZTCP_USER" )
key := os . Getenv ( "BZTCP_KEY" )
if user == "" || key == "" {
log . Fatal ( "BZTCP_USERとBZTCP_KEY環境変数を設定してください" )
}
conn , err := bztcp . Dial ( "tcp-v1.benzinga.io:11337" , user , key )
if err != nil {
log . Fatalf ( "接続に失敗しました: %v " , err )
}
ctx , cancel := context . WithCancel ( context . Background ())
defer cancel ()
// グレースフルシャットダウン
sigChan := make ( chan os . Signal , 1 )
signal . Notify ( sigChan , syscall . SIGINT , syscall . SIGTERM )
go func () {
<- sigChan
fmt . Println ( " \n グレースフルシャットダウン中..." )
cancel ()
}()
fmt . Println ( "Benzinga TCPストリームを開始しています..." )
err = conn . Stream ( ctx , func ( stream bztcp . StreamData ) {
// メッセージを整形して出力
data , _ := json . MarshalIndent ( stream , "" , " " )
fmt . Println ( string ( data ))
})
if err != nil && err != context . Canceled {
log . Printf ( "ストリームがエラーで終了しました: %v " , err )
}
}
Go 1.13 以降 (context ライブラリを使用するため、Go 1.8 以上が必要)
tcp-v1.benzinga.io:11337 へのネットワーク アクセス