Python お金の健康

CoinMarketCapのAPIはPythonで使える?APIの使い方を解説

CoinMarketCapのAPIってなに?
 
どんなことができるの?
 
どうやって使ったらいいの?

という悩みを解決できる記事になっています。

なぜなら、私はプログラミング言語Pythonで
投資の分析をしているからです。

結論だけ言うと、

仮想通貨の情報をすべて調べられます。

この記事ではCoinMarketCapのAPIの使い方を紹介します。

読み終えていただければ、

APIをPythonで扱えるようになります。

※おすすめのプログラミングスクール

せっかくプログラミングができるなら

稼げるレベルまで高めませんか?

現役エンジニアが就職サポートまでしています。

無料トライアル制度もあるのでおすすめしています↓

CoinMarketCapのAPIとは?

CoinMarketCapのAPIとは?

CoinMarketCap APIは、アプリケーション開発者、データサイエンティスト、

およびエンタープライズビジネスプラットフォームのミッションクリティカルな

要求を満たすように特別に設計された、高性能のRESTful JSONエンドポイントです。

詳細は前回の記事で紹介しています。

今回はAPIキーを取得して、実際にPythonで動かします。

CoinMarketCapのAPIキーを取得

CoinMarketCap APIに対して行われたすべてのHTTPリクエストは、

APIキーを使用して検証する必要があります。

APIキーをまだお持ちでない場合は、

APIデベロッパーポータルにアクセスして登録してください。

GET YOUR API KEY NOWをクリックします。

(参考:APIキーを取得する

coinmarketcapにアカウント登録

メールアドレス、アカウント名、パスワードを入力します。

プランはfreeにします。

newsletterはお好みで選択します。

プライバシーポリシーに同意して登録します。

するとメールが届きます。

coinmarketcapのapi有効化

Verify(有効化)します。

coinmarketcapのAPIを有効化した後

メールが再び届いたらAPIの登録完了です。

ダッシュボードにログインします。

coinmarketcapのAPIダッシュボード

APIキーは赤丸をクリックすると取得できます。

APIキーの使い方

CoinMarketCapAPIをターゲットとする

HTTPリクエストを作成できる任意のサーバー側プログラミング言語を使用できます。

すべてのリクエストはドメインhttps://pro-api.coinmarketcap.comをターゲットにする必要があります。

次の2つの方法のいずれかで、REST API呼び出しでAPIキーを提供できます。

  • 推奨される方法:X-CMC_PRO_API_KEYという名前のカスタムヘッダーを使用
  • 便利な方法:CMC_PRO_API_KEYという名前のクエリ文字列パラメータを使用

セキュリティ警告

パブリックアクセスからAPIキーを保護することが重要です。

実稼働環境でAPIキーを渡すには、クエリ文字列オプションよりも

カスタムヘッダーオプションを強くお勧めします。

APIキーの利用制限

ほとんどのAPIプランには、実行できるデータ呼び出しの数に対する

1日および1か月の制限または「ハードキャップ」が含まれています。

この使用状況は、次の例外を除いて、

キーで成功した(HTTPステータス200)データ呼び出しに対して

1:1でインクリメントされるAPI「呼び出しクレジット」として追跡されます。

アカウント管理エンドポイント、使用統計エンドポイント、およびエラー応答は、この制限に含まれていません。

ページ化されたエンドポイント:リストベースのエンドポイントは、

100データポイントのデフォルトを超えて返された(切り上げられた)

100データポイントごとに追加のコールクレジットを追跡します。

軽量の/ mapエンドポイントはこの制限に含まれず、

常に1クレジットとしてカウントされます。

詳細については、個々のエンドポイントのドキュメントを参照してください。

バンドルされたAPI呼び出し:多くのエンドポイントは、

リソースと通貨の変換バンドルをサポートしています。

バンドルされたリソースは、返された100個のリソース(切り上げ)ごとに

1つのコールクレジットとして追跡されます。

convertパラメーターを使用したオプションの通貨変換バンドルも、

最初の変換を超えて要求されたすべての変換に対して

追加のAPI呼び出しクレジットをカウントします。

開発者ポータルにログインして、APIキーの使用状況と、

各呼び出しに使用されるクレジット数などの制限に関する

ライブ統計を表示できます。

coinmaeketcapのAPIダッシュボード

各API呼び出しのJSON応答でコールクレジットの

使用状況を確認することもできます。

詳細については、ステータスオブジェクトを参照してください。

/ key / infoエンドポイントを使用して、

使用状況をすばやく確認したり、

日次/月次のクレジットがAPIから直接リセットされたりすることもできます。


注:「日」と「月」のクレジット使用期間は、

APIサブスクリプションに関連して定義されます。

たとえば、毎月のサブスクリプションが5日の午前5時30分に開始された場合、

この請求アンカーは、毎月のクレジットが毎月更新されるときにも使用されます。

無料プランは、毎日UTC午前0時にリセットされ、月単位ではUTC午前0時にリセットされます。

エンドポイントの概要

CoinMarketCap APIは、8つのトップレベルのカテゴリに分類されます。

'https://sandbox-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'
#上記URLの/cryptocurrency/部分の説明

/cryptocurrency/*

仮想通貨のリストや価格、ボリュームのデータなど、仮想通貨に関するデータを返すエンドポイント。

/exchange/*

交換リストやマーケットペアデータなどの仮想通貨交換に関するデータを返すエンドポイント。

/global-metrics/*

グローバル時価総額やBTC優位性などの集計市場データを返すエンドポイント。

/tools/*

仮想通貨やフィアット通貨との変換などの便利なユーティリティ。

/blockchain/*

ブロックチェーンのブロックエクスプローラー関連データを返すエンドポイント。

/fiat/*

CMC IDへのマッピングなど、フィアット通貨周辺のデータを返すエンドポイント。

/partners/*

サードパーティの暗号データ​​に便利にアクセスするためのエンドポイント。

/key/*

使用状況を確認および管理するための、APIキー管理エンドポイント。


エンドポイントパスは、提供されたデータのタイプに一致するパターンに従います。

'https://sandbox-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'
#上記URLの/latest部分の説明

* /latest

最新の市場データ。

仮想通貨や取引所から最新の市場データを取得する。

* / history

過去の市場データ。

OHLCVデータやチャートライブラリで使用するデータなどの履歴市場データを取得する。

* / info

メタデータ。

仮想通貨と、ブロックエクスプローラーのURLやロゴなどのメタデータの交換。

* / map

IDマップ。

CoinMarketCapIDへのリソースのマップを取得するためのユーティリティエンドポイント。


仮想通貨と交換エンドポイントは、目的に応じてデータにアクセスする2つの異なる方法を提供します。

'https://sandbox-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'
#上記URLの/listings/部分の説明

エンドポイントのリスト:柔軟なページ付けされた* / Listings / *エンドポイントを使用すると、

時価総額による仮想通貨やボリュームによる交換などの

データのリストを並べ替えてフィルタリングできます。

アイテムエンドポイント:* / quotes / / market-pairs / *などの

便利なIDベースのリソースエンドポイントを使用すると、

複数のIDをバンドルできます。

たとえば、これにより、1回の呼び出しで特定の仮想通貨の最新の市場データを取得できます。

PythonでAPIの使用例

実際にAPIを使ってコードを書きます。

from requests import Request, Session
from requests.exceptions import ConnectionError, Timeout, TooManyRedirects
import json

#本番用URLに変更
url = 'https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'
parameters = {
  'start':'1',
  'limit':'50', #50個に制限
  'convert':'USD'
}
headers = {
  'Accepts': 'application/json',
  'X-CMC_PRO_API_KEY': 'YOUR API KEY',
}

session = Session()
session.headers.update(headers)

try:
  response = session.get(url, params=parameters)
  data = json.loads(response.text)
  print(data)
except (ConnectionError, Timeout, TooManyRedirects) as e:
  print(e)

得られた結果がこちらです。

coinmarketcapのAPI実行結果

すべてのデータがJSON形式とリスト型、辞書型で入っています。

分かりづらいので、ビットコインだけを調べます。

#statusの確認
status = data['status']
print(status)

#Bitcoinのデータ
coin_data = data['data']
coin_data[0] #時価総額1位はビットコイン

'''
実行結果
{'id': 1,
 'name': 'Bitcoin',
 'symbol': 'BTC',
 'slug': 'bitcoin',
 'num_market_pairs': 9163,
 'date_added': '2013-04-28T00:00:00.000Z',
 'tags': ['mineable',
  'pow',
  'sha-256',
  'store-of-value',
  'state-channel',
  'coinbase-ventures-portfolio',
  'three-arrows-capital-portfolio',
  'polychain-capital-portfolio',
  'binance-labs-portfolio',
  'blockchain-capital-portfolio',
  'boostvc-portfolio',
  'cms-holdings-portfolio',
  'dcg-portfolio',
  'dragonfly-capital-portfolio',
  'electric-capital-portfolio',
  'fabric-ventures-portfolio',
  'framework-ventures-portfolio',
  'galaxy-digital-portfolio',
  'huobi-capital-portfolio',
  'alameda-research-portfolio',
  'a16z-portfolio',
  '1confirmation-portfolio',
  'winklevoss-capital-portfolio',
  'usv-portfolio',
  'placeholder-ventures-portfolio',
  'pantera-capital-portfolio',
  'multicoin-capital-portfolio',
  'paradigm-portfolio'],
 'max_supply': 21000000,
 'circulating_supply': 18961281,
 'total_supply': 18961281,
 'platform': None,
 'cmc_rank': 1,
 'self_reported_circulating_supply': None,
 'self_reported_market_cap': None,
 'last_updated': '2022-02-17T21:46:00.000Z',
 'quote': {'USD': {'price': 40649.16631663865,
   'volume_24h': 25577518086.062405,
   'volume_change_24h': 25.6814,
   'percent_change_1h': -1.08615768,
   'percent_change_24h': -7.71088948,
   'percent_change_7d': -7.90149234,
   'percent_change_30d': -4.10930789,
   'percent_change_60d': -13.2035069,
   'percent_change_90d': -29.88577844,
   'market_cap': 770760264945.5204,
   'market_cap_dominance': 41.6645,
   'fully_diluted_market_cap': 853632492649.41,
   'last_updated': '2022-02-17T21:46:00.000Z'}}}
'''

特定のコインを探したいときもありますよね。

例えば私はSOL(solana)が好きなので、検索します。

for i,df in enumerate(coin_data):
    if df['symbol'] == 'SOL':  #symbokで検索
        print(df)

'''
実行結果
{'id': 5426, 
'name': 'Solana', 
'symbol': 'SOL', 
'slug': 'solana', 
'num_market_pairs': 253,
 'date_added': '2020-04-10T00:00:00.000Z', 
'tags': ['pos', 
'platform', 
'solana-ecosystem',
 'cms-holdings-portfolio', 
'kenetic-capital-portfolio',
 'alameda-research-portfolio',
'multicoin-capital-portfolio',
 'okex-blockdream-ventures-portfolio'], 
'max_supply': None, 
'circulating_supply': 319526107.48436385,
 'total_supply': 511616946.142289,
 'platform': None, 
'cmc_rank': 8,
 'self_reported_circulating_supply': None, 
'self_reported_market_cap': None, 
'last_updated': '2022-02-17T21:46:00.000Z', 
'quote': {'USD': {'price': 93.66167053457703, 
'volume_24h': 1849594237.5312066, 
'volume_change_24h': -8.8432, 
'percent_change_1h': -0.96228748, 
'percent_change_24h': -8.49924331,
'percent_change_7d': -13.90955155, 
'percent_change_30d': -33.37772174, 
'percent_change_60d': -47.9821525,
 'percent_change_90d': -56.27392332, 
'market_cap': 29927349006.396336, 
'market_cap_dominance': 1.6178,
 'fully_diluted_market_cap': 47918897849.49,
 'last_updated': '2022-02-17T21:46:00.000Z'}}}
'''

APIを使いこなしてアプリやサービスの開発に役立つと嬉しいです。

※おすすめのプログラミングスクール

せっかくプログラミングができるなら

稼げるレベルまで高めませんか?

現役エンジニアが就職サポートまでしています。

無料トライアル制度もあるのでおすすめしています↓

ここまで読んでくださりありがとうございました。^^

-Python, お金の健康
-