表示できるのは分かった。期待が持てる。
実際に取引所Liquidのリアルタイムデータを固定セルへ表示させ続けてみる
Liquid取引所のデータ更新がなさすぎて動いてないみたいだ(・・;)
コードです。セルの指定をコンパクトにしたいが・・・
import xlwings as xw
import requests
import json
import time
wb = xw.Book('') #新規エクセルファイル
sht = wb.sheets['sheet1'] #操作するシート
url = 'https://api.liquid.com/products' #仮想通貨ペア全部取れる
while 1:
res = requests.get(url).json()
for pr in res:
if pr['id']=='5': #BTCJPY
sht.range('A1').value =pr['currency_pair_code']
sht.range('B1').value =pr['last_traded_price']
if pr['id']=='29': #ETHJPY
sht.range('A2').value =pr['currency_pair_code']
sht.range('B2').value =pr['last_traded_price']
if pr['id']=='41': #BCHJPY
sht.range('A3').value =pr['currency_pair_code']
sht.range('B3').value =pr['last_traded_price']
if pr['id']=='83': #XRPJPY
sht.range('A4').value =pr['currency_pair_code']
sht.range('B4').value =pr['last_traded_price']
time.sleep(1)
bitflyerのwebsocketデータを受信し、エクセルに表示してみる
websocket of bitflyer コードです
import websocket
import json
import xlwings as xw
import time
wb = xw.Book('') #新規エクセルファイル
sht = wb.sheets['sheet1'] #操作するシート
CHANNEL = "lightning_executions_BTC_JPY"
def on_message(ws, message):
message = json.loads(message)
if message["method"] == "channelMessage":
last1=message["params"]["message"][0]
sht.range('A1').value = 'BTC'
sht.range('A2').value = int(last1["price"])
sht.range('A3').value = last1["side"]
sht.range('A4').value = last1["size"]
def on_open(ws):
ws.send(json.dumps({"method": "subscribe",
"params": {"channel": CHANNEL}}))
if __name__ == "__main__":
# note: reconnection handling needed.
ws = websocket.WebSocketApp("wss://ws.lightstream.bitflyer.com/json-rpc",
on_message=on_message, on_open=on_open)
ws.run_forever()
フムフム、セルの場所が決まっているなら、関数にして表示させるデータは関数の引数にしてぶん投げれば良いのかな?
セルへの書き込み指定がlist配列でできます
書き込み指定はこの様な式になります。
ソースコード
import websocket
import json
import xlwings as xw
wb = xw.Book('') #新規エクセルファイル
sht = wb.sheets['sheet1'] #操作するシート
CHANNEL = "lightning_executions_BTC_JPY"
def on_message(ws, message):
message = json.loads(message)
if message["method"] == "channelMessage":
last1=message["params"]["message"][0]
sht.range('A1').value = ['BTC', int(last1["price"]), last1["side"], last1["size"]]
sht.range('A3').value = [['BTC'], [int(last1["price"])], [last1["side"]], [last1["size"]]]
def on_open(ws):
ws.send(json.dumps({"method": "subscribe",
"params": {"channel": CHANNEL}}))
if __name__ == "__main__":
# note: reconnection handling needed.
ws = websocket.WebSocketApp("wss://ws.lightstream.bitflyer.com/json-rpc",
on_message=on_message, on_open=on_open)
ws.run_forever()
pythonからセル位置指定の書き方ご説明
#横にセルを展開するときはリストで良い
sht.range(‘A1’).value = [‘BTC’, int(last1[“price”]), last1[“side”], last1[“size”]]
[
A1 = ‘BTC’, #タイトル文字列
B1 = int(last1[“price”]), #最新価格
C1 = last1[“side”], #売りか買いか
D1 = last1[“size”] #売買サイズ
]
#セルを縦に展開するときは2次元リストを使う
sht.range(‘A3’).value = [[‘BTC’], [int(last1[“price”])], [last1[“side”]], [last1[“size”]]]
[
A3 = [‘BTC’],
A4 = [int(last1[“price”])],
A5 = [last1[“side”]],
A6 = [last1[“size”]]
]
セルへ代入する要素それぞれがlistになっています。
websocketについてはこちら
行の追加的書き込み
次は、固定セルへの聞き込みではなく、一行ずつ下に追加してゆきます。
ソースです
import websocket
import json
import xlwings as xw
import time
wb = xw.Book('') #新規エクセルファイル
sht = wb.sheets['sheet1'] #操作するシート
time.sleep(15)
CHANNEL = "lightning_executions_BTC_JPY"
y = 1 #行を表す変数
def on_message(ws, message):
global y #関数の中からグローバル変数を使う
message = json.loads(message)
if message["method"] == "channelMessage":
last1=message["params"]["message"][0]
#xlwingsでエクセルシートへ書き込む
sht.range(y,1).value = ['BTC', int(last1["price"]), last1["side"], last1["size"]]
y += 1 #行を1追加
def on_open(ws):
ws.send(json.dumps({"method": "subscribe",
"params": {"channel": CHANNEL}}))
if __name__ == "__main__":
# note: reconnection handling needed.
ws = websocket.WebSocketApp("wss://ws.lightstream.bitflyer.com/json-rpc",
on_message=on_message, on_open=on_open)
ws.run_forever()
BFでは画面の更新が少なくてわからないのでbainanceのwebsocketを表示させてみる
早すぎて訳がわからない
# Copyright: (c) leoco 2021
#-------------------------------------------------------------------------------
import websocket
import json
import xlwings as xw
import time
wb = xw.Book('') #新規エクセルファイル
sht = wb.sheets['sheet1'] #操作するシート
def on_message(ws, message):
msg = json.loads(message)
price = float(msg['p'])
size = float(msg['q'])
if msg['m']:
side ='SELL'#*= -1
else :
side='BUY'
sht.range('A1').value = [['BTC'],[price],[side],[size]]
def on_open(ws):
ws.send(json.dumps({"method": "SUBSCRIBE","params":["btcusdt@aggTrade","btcusdt@depth"],"id": 1}))
if __name__ == "__main__":
# note: reconnection handling needed.
ws = websocket.WebSocketApp("wss://stream.binance.com:9443/ws",
on_message=on_message, on_open=on_open)
ws.run_forever()
コメント