最近あまり話題になりませんが、先日、仮想通貨のビットコインが円建てで最高値を更新しました。
本記事を書いている最中にさらに更新して、bitFlyer では 7,219,999円まで上がりました。
ビットコインを法定通貨にした国が出てきたり、米国でビットコインETFが承認されたりと、仮想通貨界隈では盛り上がっているようです。
本ブログでは以前、Coincheck のビットコインの価格を Python で取得する方法をご紹介しました。
日本の仮想通貨の取引所の一つである Coincheck におけるビットコインの現在の価格を取得する簡単なものです。
今回はこれの bitFlyer 版をご紹介します。
bitFlyer も日本の仮想通貨の取引所の一つです。
Coincheck 版と同様に、現在の価格を取得するだけなので、bitFlyer のアカウントは必要ありません。
Google Colaboratory
本記事に掲載しているコードは Google Colaboratory で動作を確認しています。
下記リンクからアクセスして、ご自身の Google ドライブにコピーしていただければ、すぐに実行できます。
環境構築が必要ない Google が提供している Web サービスなので、Python を学習中の方、これから学習を始める方にはオススメです。
(Coincheck版も上記リンク先にあります。)
外部ライブラリのインストール
Coincheck 版と同様に requests
という外部ライブラリを使用するので、pip 等でインストールしてください。
pip install requests
Google Colaboratory には requests
ライブラリがデフォルトでインストールされているので、インストール作業は不要です。
最初にコード全体を載せます
最初にコード全体を載せます。
下記コードで bitFlyer における ビットコインの最新の価格 と 価格を取得した日時 を表示できます。
from datetime import datetime, timedelta
import requests
url = 'https://api.bitflyer.com/v1/ticker'
bf = requests.get(url).json()
bf_ltp = '{:,}'.format(int(bf['ltp']))
bf_timestamp = datetime.strptime(bf['timestamp'], '%Y-%m-%dT%H:%M:%S.%f') + timedelta(hours=9)
bf_timestamp = '{0:%Y-%m-%d %H:%M:%S}'.format(bf_timestamp)
print(f"bitFlyer 現在のビットコインの価格 = {bf_ltp} 円")
print(f"取得時間 = {bf_timestamp}")
コードの解説
続いて、コードを細かく見ていきます。
ライブラリを import
Coincheck の時と同様に、2つのライブラリを使用しています。
datetime
とrequests
です。
datetime
は標準ライブラリなので、インストールは不要です。
datetime
from datetime import datetime, timedelta
datetime
は Python に標準で備わっている日付データを扱うライブラリです。
上記は「 datetime ライブラリ から datetime クラスと timedelta クラスを import 」しています。
詳細は後述しますが、次のことを行っています。
- bitFlyer の API から返ってくる日時のデータを
datetime
型に変換 - UTC 時刻になっているので、日本時間に変換(+9時間)
- 日時のフォーマットを変換
requests
import requests
requests
は外部のライブラリです。
requests
は bitFlyer の API との HTTP通信のために使用します。
bitFlyer API へアクセスし、データを取得する
続いて、bitFlyer API にアクセスし、ビットコインの価格と日時のデータを取得する部分です。
bitFlyer API に関しては公式サイトも参考にしてください。
該当するコードは次の箇所です。
url = 'https://api.bitflyer.com/v1/ticker'
bf = requests.get(url).json()
1行目はリクエスト先のURLを設定しています。
2行目では1行目で設定したurl
を使用して、HTTP の GET メソッドでアクセスし、レスポンスをbf
に入れています。
bf
には次の値が入ります。
{
"product_code": "BTC_JPY",
"state": "RUNNING",
"timestamp": "2021-10-26T14:41:30.567",
"tick_id": 10570423,
"best_bid": 7091907.0,
"best_ask": 7094837.0,
"best_bid_size": 0.0025,
"best_ask_size": 0.02,
"total_bid_depth": 668.70996372,
"total_ask_depth": 681.92430787,
"market_bid_size": 0.0,
"market_ask_size": 0.0,
"ltp": 7091907.0,
"volume": 6286.92195155,
"volume_by_product": 1479.93552147
}
bf
の型を確認すると辞書型(dict)になっています。
レスポンスの中のltp
が最新のビットコインの価格、timestamp
が取得時間になっています。
その他の値については公式サイトを参照ください。
Google Chrome などの Web ブラウザーで「https://api.bitflyer.com/v1/ticker」にアクセスすることでも、このレスポンスを確認できます。
取得した値を加工する
次に取得した値を加工します。
ビットコインの価格を加工する
まずはビットコインの価格です。
ビットコインの価格の値は次の1行で加工しています。
bf_ltp = '{:,}'.format(int(bf['ltp']))
さらに細かく見ていきます。
bf['ltp']
bitFlyer API からのレスポンスbf
は辞書型で、ビットコインの最新価格のキーがltp
なので、ltp
を指定して値を取り出します。bf['ltp']
はfloat 型になっていて、出力すると7115480.0
のような形式になります。
int(bf['ltp'])
float 型になっていて.0
が邪魔なので、int 型に変換します。
'{:,}'.format(int(bf['ltp']))
最後に、ビットコインの価格は700万を超え、8桁にも届きそうなので、桁数が分かりやすいように3桁ずつカンマで区切った形式に変換します。変換後は str 型(文字列)になります。
まとめると、
- 辞書型のデータから最新のビットコインの価格を取り出す
- float 型から int 型に変換する
- int 型から3桁ずつカンマで区切った str 型に変換する
の3点を行い、bf_ltp
に格納する、という処理を1行で実行しています。
ビットコインの価格を取得した日時を加工する
次にビットコインの価格を取得した日時です。
ビットコインの価格を取得した日時は次の2行で加工しています。
bf_timestamp = datetime.strptime(bf['timestamp'], '%Y-%m-%dT%H:%M:%S.%f') + timedelta(hours=9)
bf_timestamp = '{0:%Y-%m-%d %H:%M:%S}'.format(bf_timestamp)
細かく見ていきます。
bf['timestamp']
ビットコインの価格と同じようにキーを指定して値を取り出します。
ビットコインの価格を取得した日時のキーはtimestamp
なので、bf['timestamp']
で取り出せます。
bf['timestamp']
は str 型で、2021-10-26T16:20:34.707
のような形式になっています。
datetime.strptime(bf['timestamp'], '%Y-%m-%dT%H:%M:%S.%f')
str 型のbf['timestamp']
を datetime 型に変換します。
datetime
クラスのstrptime()
関数を使用して、str 型から datetime 型に変換します。
strptime()
関数の引数は、1つ目は変換したい文字列、2つ目には文字列がどういう形式になっているかを指定します。
形式については Python 公式ドキュメントも参照してみてください。
bf_timestamp = datetime.strptime(bf['timestamp'], '%Y-%m-%dT%H:%M:%S.%f') + timedelta(hours=9)
1行目では、datetime 型に変換したものにtimedelta(hours=9)
を足しています。
これは bitFlyer API からのレスポンスのbf['timestamp']
がUTC時間になっているため、日本時間に合わせるために9時間足しています。
bf_timestamp = '{0:%Y-%m-%d %H:%M:%S}'.format(bf_timestamp)
2行目は日時のフォーマットを変換しています。
変換後は str 型になります。
print 文で表示する
最後は print
文でビットコインの価格と取得日時を表示しています。
print(f"bitFlyer 現在のビットコインの価格 = {bf_ltp} 円")
print(f"取得時間 = {bf_timestamp}")
ダブルクオーテーションの前にf
を付けています。
f-string などと呼ばれていますが、f-string を使用すると、文字列の中に{}
で囲んで変数を入れることができるので、便利です。
おわりに
記事を書き終えた今のビットコインの価格は、
bitFlyer 現在のビットコインの価格 = 6,939,187 円
取得時間 = 2021-10-29 02:43:17
でした。
ビットコインの価格は変動が激しいのでお気をつけください。
年末には1000万円などと言われていますが、遠くから見守りたいと思います。
以上です。
コメント