CoinMarketCapのAPIってなに?
どんなことができるの?
どうやって使ったらいいの?
という悩みを解決できる記事になっています。
なぜなら、私はプログラミング言語Pythonで
投資の分析をしているからです。
結論だけ言うと、
仮想通貨の情報をすべて調べられます。
この記事ではCoinMarketCapのAPIの使い方を紹介します。
読み終えていただければ、
APIをPythonで扱えるようになります。
※おすすめのプログラミングスクール
せっかくプログラミングができるなら
稼げるレベルまで高めませんか?
現役エンジニアが就職サポートまでしています。
無料トライアル制度もあるのでおすすめしています↓

目次
CoinMarketCapのAPIとは?

CoinMarketCap APIは、アプリケーション開発者、データサイエンティスト、
およびエンタープライズビジネスプラットフォームのミッションクリティカルな
要求を満たすように特別に設計された、高性能のRESTful JSONエンドポイントです。
詳細は前回の記事で紹介しています。
今回はAPIキーを取得して、実際にPythonで動かします。
CoinMarketCapのAPIキーを取得
CoinMarketCap APIに対して行われたすべてのHTTPリクエストは、
APIキーを使用して検証する必要があります。
APIキーをまだお持ちでない場合は、
APIデベロッパーポータルにアクセスして登録してください。
GET YOUR API KEY NOWをクリックします。

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

メールアドレス、アカウント名、パスワードを入力します。
プランはfreeにします。
newsletterはお好みで選択します。
プライバシーポリシーに同意して登録します。
するとメールが届きます。

Verify(有効化)します。

メールが再び届いたら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キーの使用状況と、
各呼び出しに使用されるクレジット数などの制限に関する
ライブ統計を表示できます。

各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)
得られた結果がこちらです。

すべてのデータが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を使いこなしてアプリやサービスの開発に役立つと嬉しいです。
※おすすめのプログラミングスクール
せっかくプログラミングができるなら
稼げるレベルまで高めませんか?
現役エンジニアが就職サポートまでしています。
無料トライアル制度もあるのでおすすめしています↓

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