python $¥ BTC ETH →USD YEN まとめて表示(自動更新)

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)

コメント

amazon 本日のタイムセール Time Sale
現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 動画290本28.5時間 \24,000
楽天モバイル、妻がiphone SE2、息子がiphone11で使ってます。一番安くて通信品質イマイチ
コロナ感染施設の人体に無害な消毒と抗菌処理ならESS消毒社(東京都)
タイトルとURLをコピーしました