【Pythonで簡単】CoincheckパブリックAPIから仮想通貨の1時間足を自動取得する

コーディング

仮想通貨の自動売買アルゴリズムを検討にするために過去のレート情報がダウンロードできないか探したのですが、1時間足のデータは見つかりませんでした。ということで過去の分は諦めてCoincheckのAPIからPythonで自動取得することにしました。

今回は記事ではAPIでアクセスするときの基本的な手順をご紹介します。以下の人におすすめです!

  • 仮想通貨の情報をレート情報を自動取得してみたい
  • Coincheck APIを使ってみたい
  • APIにアクセスして情報取得するときの基本の型を知りたい

CoincheckのAPIを活用する

APIとは?

APIとは”Application Programming Interface”の略です。通常のウェブサイトは人が目で見るようにデザインされていますが、APIはプログラミング言語でウェブから情報を収集する窓口、という理解で十分です。

API経由のほうがサーバーにかける負担が少ないため、APIで取得可能な情報はAPIで取得するようにしましょう。

Coincheckとは?

Coincheckとは国内の仮想通貨取引所の一種です。様々な仮想通貨取引所が存在しますが、Coincheckの良いところは、取引所の売買手数料が無料な点とAPIで情報取得、自動売買を行える点です。

そしてAPIに関する公式ドキュメントが日本語なのでAPI素人にもわかりやすくて練習になります!

取引所APIドキュメント | 暗号資産取引所のCoincheck(コインチェック)

Pythonによる実装

まずはAPIに必要な情報の確認

公式ドキュメントからリクエスト先を確認します。Coincheckの場合はページ冒頭に『リクエスト先 https://coincheck.com』と記載されています。さらにパブリックAPIのティッカーの項目から『HTTP REQUEST GET /api/ticker』と記載されていることから、GETメソッドでhttps://coincheck.com/api/ticker』にリクエストすればよいことがわかります!

リクエスト時のパラメータ(params)が必要な場合があります。以下公式抜粋。

PARAMETERS
pair取引ペア。現在は btc_jpy, etc_jpy, lsk_jpy, mona_jpy, omg_jpy, plt_jpy, fnct_jpy, dai_jpyが利用可能です。

上記の説明から”pair”に取得したい通貨ペアを辞書形式で指定すればよいことがわかります(何も指定しない場合は”btc_jpy”)。通貨ペアとは、例えば”btc_jpy”ならBTC(ビットコイン)の日本円レートという意味です。

APIから取得できるレート情報は以下のキーを持つ辞書形式で取得できます。

  • last:最後の取引の価格
  • bid:現在の買い注文の最高価格
  • ask:現在の売り注文の最安価格
  • high:24時間での最高取引価格
  • low:24時間での最安取引価格
  • volume:24時間での取引量
  • timestamp:現在の時刻

今回は最新レートの”last”のみを取得してみたいと思います。

そして一度のアクセスで指定した”pair”の情報しか取得できないので、forループで取得可能なすべての仮想通貨の情報を取得してみます!

PythonによるAPIアクセスの実装

今回はWSL2 Ubuntu 22.04, python 3.11.4の環境を使っていきます。追加で必要なライブラリーはrequestsだけなのでインストールします。

$ pip install requests

pythonファイルは以下の通り!これで取得可能な全仮想通貨の現在価格を取得してファイルに保存できます。

import csv
from datetime import datetime
import time

import requests

current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 現在時刻 

url = 'https://coincheck.com/api/ticker' # Coincheck APIのアクセス先

pairs = ['btc_jpy', 'etc_jpy', 'lsk_jpy', 'mona_jpy', 'omg_jpy', 'plt_jpy', 'fnct_jpy', 'dai_jpy']
rates = []

for pair in pairs:
    params = {'pair': pair}
    r = requests.get(url, params=params) # 指定してURLから情報取得
    r = r.json()                         # APIから取得できる情報はJSON形式
    rates.append(r['last'])              # 辞書型データから最新値('last')を取得してリスト格納
    time.sleep(1)                        # リクエスト先への負荷軽減のために1秒待機

data = [current_time] + rates

# 各行が時刻、各仮想通貨の取引レートとなっているCSV形式で保存
file = './crypto_rates.csv'             # 保存先を指定
with open(file, mode='a') as f:         # appendモードでファイルを開く
    writer = csv.writer(f)
    writer.writerow(data)               # リストを行としてcsvに追記

こちらのpythonファイルを1時間おきに無限ループさせるか、cronを使って定期実行させえるようにしましょう!

ひとつだけ気を付ける点は、APIから取得できる情報の形式です。Coincheck APIからrequests.getメソッドで取得した情報はJSON形式です。これをpythonの辞書型に変換するためにr.json()という処理を行っています。

まとめ

以上です。APIって難しそうに感じますが、今回紹介したcoincheck APIへのアクセスが基本になります!これを基本に他のAPIにもアクセスしてみたり、認証に関するコードを組み込んで認証が必要なページにもアクセスしてみましょう。

コメント