コンテンツにスキップ

お使いの証券会社の BRiSK

同じクライアントで、SBI証券の BRiSK(sbi.brisk.jp、既定のサイト)と立花証券 e支店、松井証券、マネックス証券、SMBC日興証券の BRiSK(専用の項が続きます)を使えます。証券会社と BRiSK の契約が必要です。SBI では、ブラウザで sbi.brisk.jp にログインし、そのセッション Cookie を渡します。Cookie は DevTools からコピーするか、pycookiecheat の chrome_cookies("https://sbi.brisk.jp") で取得できます。パスキーで briskapi にサインインさせることもできます(下記)。

briskapi.login(cookies={"session_bfaf77a2": "v2.local..."})   # remember=True で保存(本人のみ読み取り可)
toyota = briskapi.Ticker("7203")
toyota.candles("5m").to_pandas()   # ローソク足: 5分(当日)、日、週、月(5m, 1d, 1w, 1mo)
toyota.margin(days=30)             # 信用残と貸株料
market = briskapi.Market()
market.turnover()     # 全銘柄の売買代金と発行済株式数
market.lists()        # 日経225、直近 IPO など
market.events()       # バスケット注文、ストップ高・安、出来高急増などのイベント
market.schedule()     # 取引日、状態、取引時間
market.watchlist()    # 保存済みの銘柄コード

feed = briskapi.connect(site="sbi", codes=["7203"])   # ライブ。オプトアウトしない限り、前場・後場ごとにアップロード
toyota.quote()                              # 他のフィードと同じ呼び出し
# upload_market_data=False で市場データの記録を、upload=False ですべてをアップロードしない(残すには output="days")

証券会社のフィードは連続して記録し、日をまたいでも動き続けます。各日は2つの記録としてパッケージ化・アップロードされ、前場の記録は昼休みに入った時点で、後場の記録(前場が終わった時点の板のスナップショットから始まります)は日が終わった時点です(クラウド API では1日として読めます)。サイトのセッションが終了(done)したとき、またはサイトが次の取引日を配信し始めたとき(10分ごとに確認)、あるいはサーバーが市場の終了後にストリームを閉じたときにその日が終わり、最後の記録がその日のタイミングの要約とともにパッケージ化・アップロードされ(オプトアウトした場合を除く)、フィードは次のセッションを待って、新しいスナップショットから記録を始めます。セッションが開いていないとき(取引終了後や休日)に始めると、フィードは次の取引日のセッションを待ちます。connect() はその日が始まってから戻ります(待っている間の feed.status は "waiting")。output=DIR (briskapi.connect(output=...)、brisk live --output DIR)を指定すると、記録ごとに、SOURCE_YYYYMMDD_FROM-TO(その最初と最後のソース時刻、日本時間 HHMMSS)という名前のフォルダー(例: sbi_live_20261013_085800-090412)が DIR に残ります。feed.recordings はその一覧(trading_date、name、path、uploaded、timing_uploaded。タイミングの要約は各日の最後の記録に)で、 on_day=callback は記録ごとに呼ばれます。output を指定しないと、記録は自分のアーカイブにだけ残り、アップロードもオフならどこにも残りません。フィードを止めると(feed.close()、Ctrl-C)その日はそこで終わり、残りの分がほかの記録と同じように保存・アップロードされます。接続が切れたときは自動で再接続します(記録する)。SBI と e支店の BRiSK は1ユーザー1セッションまでです(ほかの証券会社も同じと考えてください)。フィードを始める前にブラウザの BRiSK を閉じてください。開いたままだと、数秒のうちに互いを切断します。

結果は下記の規約に従います。エラーは briskapi.brisk.SessionExpiredError(再ログインが必要)、briskapi.NotFoundError、briskapi.brisk.RateLimitError、briskapi.brisk.APIError です。リクエストは1秒に1回までに制限しています。

ライブフィードは、ご自身のセッションでダウンロードした BRiSK 自身のデコーダーを Node 上で動かします。ブラウザは使いません。ベンダーのクライアントと同じ接続手順(最初のフレームからデコーダーに入力し、スナップショットをストリームに追いつかせ、サーバーの ping にデコーダーを通じて応答し、サーバーのハートビートを監視)に従います。まだ実際の SBI セッションでは検証できていません。ストリームは Next のクライアントと同じく素のバイナリ WebSocket と想定しています。サーバーが Socket.IO で始まる場合は、未検証のパラメーターで /v2/user 名前空間に参加します(パラメーターは briskapi.connect(site="sbi", profile={...}) で設定できます)。trace_protocol=True(トークンはすべて伏せ字)でサーバーの応答を確認してください。想定外の応答は、推測で動かさず、明示的なエラーで止まります。結果をぜひお知らせください。実際のセッションでは現在、サインイン、データの取得、デコーダーのダウンロード、銘柄マスター、スナップショット(セッションのスケジュール付きで読み込み)までは通ります。その後、api.brisk.jp への WebSocket の Upgrade が HTTP 502 で返されました。それらのセッションは、ベンダーのクライアントが求めるサブプロトコル flex を求めていませんでした。このバージョンは求めますが、それで足りるかはまだ分かっていません。SBI の Cookie は sbi.brisk.jp にのみ送られます。

立花証券 e支店の BRiSK Next

e支店の BRiSK Next(next.e-shiten.brisk.jp)は同じアプリなので、同じクライアントで使えます。ブラウザでログインし、その Cookie を site="e-shiten" を付けて渡すか、e支店のパスキーで briskapi にサインインさせてください(下記)。初回のみ brisk enroll --site e-shiten、その後は brisk live --site e-shiten の前に brisk login を実行します。

briskapi.login("e-shiten", cookies={...})   # または BRISK_ESHITEN_COOKIES。remember=True で SBI とは別に保存
feed = briskapi.connect(site="e-shiten", codes=["7203"])   # ライブ

上記の説明は記録とアップロードも含めてそのまま当てはまります(できた市場データの記録から順に、そして各日のタイミングの要約をアップロードします)。Cookie は next.e-shiten.brisk.jp にのみ送られます。e支店の BRiSK は同時に1セッションまでで、別のタブやブラウザで開くと先に開いていた方が止まりました(メッセージ 10011)。そのため、フィードとブラウザの BRiSK は互いに相手を止めることがあります。記録やアップロードの前に、立花証券の BRiSK Next 利用規定でデータの蓄積や二次利用についての定めを確認してください。

松井証券、マネックス証券、SMBC日興証券

松井証券(matsui.brisk.jp)、マネックス証券(monex.brisk.jp)、SMBC日興証券(smbcnikko.brisk.jp)の BRiSK は、同じベンダーのアプリが各社のホストで動いているものなので、同じクライアントで使えます。site="matsui"、"monex"、"smbcnikko" を付けて、ブラウザの Cookie、サイトごとの環境変数(BRISK_MATSUI_COOKIES、BRISK_MONEX_COOKIES、 BRISK_SMBCNIKKO_COOKIES。JSON)、またはパスキーでのサインイン(初回のみ brisk enroll --site matsui、その後は brisk login)を使います。

briskapi.login("matsui", cookies={...})   # remember=True でほかの証券会社とは別に保存
feed = briskapi.connect(site="matsui", codes=["7203"])   # ライブ

上記の説明は記録とアップロードも含めてそのまま当てはまり(データ源は matsui_live、 monex_live、smbcnikko_live)、各サイトの Cookie はそのサイトのホストにのみ送られます。この3社はまだ口座で試していません。サイトのアプリが SBI のものと違う場合、フィードは疑わしいものを記録せず、何を認識できなかったかを示すエラーで止まります(--trace-protocol で接続を表示)。SBI や e支店と同じく 1ユーザー1セッションまでと考え、先にブラウザの BRiSK を閉じてください。記録やアップロードの前に、お使いの証券会社の BRiSK の規定でデータの蓄積や二次利用についての定めを確認してください。