Python問題集を解いてみよう!!

【Python】ビットコインの価格を取得する(bitFlyer編)

URLをコピーする
URLをコピーしました!

最近あまり話題になりませんが、先日、仮想通貨のビットコインが円建てで最高値を更新しました。

本記事を書いている最中にさらに更新して、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つのライブラリを使用しています。

datetimerequestsです。

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 に関しては公式サイトも参考にしてください。

bitFlyer 公式サイト

該当するコードは次の箇所です。

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万円などと言われていますが、遠くから見守りたいと思います。

以上です。

スポンサーリンク

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
URLをコピーする
URLをコピーしました!

コメント

コメントする

目次
目次
閉じる