twitterなんか見てると、インフルエンサー様が勝手な(色んな)通貨ベースで意見を述べるので、1ドルいくらだ?なんだかなー?て思うのは私だけ?
困り果てた私はツールを作りました。サクッと(嘘)
exe化したいが上手くできた試しがないので試してない。要python
実際の大きさのイメージは ↓(全体はフルHD画素)
ソースコード
最初はバイナンスでBTCとETHをドル建て取得して、日本円に計算しました。
しかし、liquidで色んな仮想通貨ペアがあるようなので、Liquidバージョンに変更しました。
しかも、liquidには円建てとドル建てが別々にあるので、為替のドル円はサクっていいのだが、有ってもいいので残した。
# Created: 22/05/2021
from tkinter import *
from tkinter.ttk import *
import json
import time
import datetime
import requests
import pandas.datareader as pdr
root = Tk() # Frame無し
root.title('BTC USDT Binance')#タイトルなんてなくてもいいが一応
root.configure(bg='#002137')#背景色をネイビーブルーに
#ドル円を取得
to_day = datetime.datetime.now().date() #今日の日付、今日付のデータはない
yester_day=to_day+ datetime.timedelta(days=-3) #3日前まで見に行く、為替は休みがあるので多めに
#yahooから日数分(2日)のohlcをgetしdf化
data = pdr.get_data_yahoo('JPY=X',end=to_day, start = yester_day)
dollyen = data.iloc[-1,0] #昨日のドル円を取り出す
#liquidのコインから取り出した4種類の価格を書き留めるための辞書
coin={'BTCJPY':0,'BTCUSD':0,'ETHJPY':0,'ETHUSD':0}
def ticker():
try:
#liquidのticker取得http、何百種類もある
res = requests.get('https://api.liquid.com/products').json()#json型から辞書型に変換
for pr in res:
if pr['currency_pair_code'] in coin.keys():
#価格はbest askとbest bidでmid priceはないので、askとbidの平均を計算して該当の辞書に書き込む
coin[pr['currency_pair_code']]=int((float(pr['market_ask'])+float(pr['market_bid']))/2)
#表示のため文字列化
dy=f' {to_day} $¥ {dollyen:>6,.2f} '
btc = f" btc${coin['BTCUSD']:>6,.0f} ¥ {coin['BTCJPY']:>6,.0f} "
eth = f" eth${coin['ETHUSD']:>6,.0f} ¥ {coin['ETHJPY']:>10,.0f} "
#ラベルに書き込む✕3行
lbl.config(text = dy )
lbl2.config(text = btc)
lbl3.config(text = eth)
lbl2.after(1000, ticker)
#lbl3.after(1000, ticker)
except requests.ConnectionError:
print ("Error CONNECT")
pass
lbl.after(1000, ticker)
#ラベル1設置、数値の部分(30)を小さくすればウィジット自体が小さくなる
lbl = Label(root, font = ('calibri', 30, 'bold'),
background = '#002137',
foreground = 'orange')
lbl.pack(anchor = 'center')
#ラベル2設置
lbl2 = Label(root, font = ('calibri', 50, 'bold'),
background = '#002137',
foreground = 'orange')
lbl2.pack(anchor = 'center')
#ラベル3設置
lbl3 = Label(root, font = ('calibri', 50, 'bold'),
background = '#002137',
foreground = 'orange')
lbl3.pack(anchor = 'center')
#作業関数呼び出し
ticker()
#働かせ続けるwww
root.mainloop()
ちょっと小分けにしてみると
データを取得するのは1行、requestモジュールにデータを取って来てもらって、json形式の文字列を辞書形式にデータに変換する。後はデータを取り出してゆけば良い。
res = requests.get('https://api.liquid.com/products').json()#json文字列を辞書に変換
ドル円はAPIで取れるところは案外少ない。
WEBで見つけた1行を使わせていただいた。
data = pdr.get_data_yahoo('JPY=X',end=to_day, start = yester_day)
コメント