Magicode logo
Magicode
1
5 min read

CoinMarketCap APIを使って仮想通貨の価格を取得してみる

この記事でできること

  • CoinMarketCap APIのAPIキーを取得できる
  • CoinMarketCap APIで仮想通貨の価格を取得できる

手順

  • CoinMarketCap APIのAPIキーを取得
  • ドキュメントを見つつコーディング

CoinMarketCap APIのAPIキーを取得

まずは下記リンクにアクセスしましょう

https://coinmarketcap.com/api/

この画面に行くと思いますので「GET YOUR API KEY NOW」のボタンをクリックしてください

次にサインアップ画面にいきますので必要な情報を記入し「CREATE MY ACCOUNT」をクリック

↓Planの内容 (基本はBASICで問題ないです)

アカウントを作成すると、入力したメールアドレスに認証メールが届くので認証してください。

認証後、https://pro.coinmarketcap.com/account にログインするとこちらの画面に映ります。

赤枠内にカーソルを持ってくるとAPI Keyが見えるようになるのでそちらのKeyをコピーしてください。


ドキュメントを見つつコーディング

まずはAPIの使い方を見てみましょう

https://coinmarketcap.com/api/documentation/v1/

クイックガイドがありますね

使い慣れたPythonの例も載っていたので使わせてもらいます。

↓まずはそのまま実行してみます (出力を見やすくするためpprintを使用)

#This example uses Python 2.7 and the python-request library.

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

url = 'https://sandbox-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'
parameters = {
  'start':'1',
  'limit':'5000',
  'convert':'USD'
}
headers = {
  'Accepts': 'application/json',
  'X-CMC_PRO_API_KEY': 'b54bcf4d-1bca-4e8e-9a24-22ff2c3d462c',
}

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

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

{'data': [{'circulating_supply': 1826, 'cmc_rank': 7588, 'date_added': '2022-06-04T14:06:12.705Z', 'id': 1144, 'last_updated': '2022-06-04T14:06:12.705Z', 'max_supply': 3516, 'name': '793bkgg8jg7', 'num_market_pairs': 4288, 'platform': None, 'quote': {'USD': {'fully_diluted_market_cap': 0.5741525012109046, 'last_updated': '2022-06-04T14:06:12.705Z', 'market_cap': 0.5016048405987457, 'market_cap_dominance': 3179, 'percent_change_1h': 0.0017217835358054323, 'percent_change_24h': 0.265645699462544, 'percent_change_7d': 0.6429673288515549, 'price': 0.19048925055156185, 'volume_24h': 7275, 'volume_change_24h': 0.9050311359138343}}, 'self_reported_circulating_supply': None, 'self_reported_market_cap': None, 'slug': 's3q9e86qn2', 'symbol': 'fpt8pqalmm', 'tags': ['v763orfbvq', 'by3ngfk33cb', 'jnzi4p55ujp', 'kwyhiainx4', 'cmseu0az7a5', 'dp6wuhx509h', 'ad6idl1l0d', 'xera24uvryq', '8d3nnikt9mm', 'oc7qvvl165d'], 'total_supply': 1240}, {'circulating_supply': 2267, 'cmc_rank': 2784, 'date_added': '2022-06-04T14:06:12.705Z', 'id': 1515, 'last_updated': '2022-06-04T14:06:12.705Z', 'max_supply': 2319, 'name': '8kuksa7ojlw', 'num_market_pairs': 1412, 'platform': None, 'quote': {'USD': {'fully_diluted_market_cap': 0.007857750712765066, 'last_updated': '2022-06-04T14:06:12.705Z', 'market_cap': 0.9079778869362887, 'market_cap_dominance': 4897, 'percent_change_1h': 0.8468111726525642, 'percent_change_24h': 0.7624448112765443, 'percent_change_7d': 0.7331296951913815, 'price': 0.9665073223742844, 'volume_24h': 6157, 'volume_change_24h': 0.7475471299015912}}, 'self_reported_circulating_supply': None, 'self_reported_market_cap': None, 'slug': 'wnggmk54mkh', 'symbol': 'ymiz2ilxc8', 'tags': ['jghgnr3g9kp', 'hq26u02d45w', 'lofj2ca59ak', 'ihfuz2ewg0a', 'o01dbv45y3e', 'dt3oacn0p99', 'd42qypri32d', 'kriz0l6wrm', 'vktfydn2l2p', '3ln06huieje'], 'total_supply': 208}, {'circulating_supply': 8251, 'cmc_rank': 8422, 'date_added': '2022-06-04T14:06:12.705Z', 'id': 4637, 'last_updated': '2022-06-04T14:06:12.705Z', 'max_supply': 3387, 'name': '2a60mpl911v', 'num_market_pairs': 8286, 'platform': None, 'quote': {'USD': {'fully_diluted_market_cap': 0.5667019887177145, 'last_updated': '2022-06-04T14:06:12.705Z', 'market_cap': 0.9859029349875263, 'market_cap_dominance': 7323, 'percent_change_1h': 0.8169869633142803, 'percent_change_24h': 0.959635341515235, 'percent_change_7d': 0.21350527654611517, 'price': 0.12788102393005496, 'volume_24h': 1485, 'volume_change_24h': 0.5917797767363084}}, 'self_reported_circulating_supply': None, 'self_reported_market_cap': None, 'slug': 'vqhz9dbut', 'symbol': 've09wqjbq6k', 'tags': ['5nvfybfjuxu', '8vt0k89qdew', 'v71qr06fuc9', 'wdewq0l6g0r', 'kc7ltsusqk', 'sqdoxg14btj', 'czgsicaegfb', '9k5j83gmrt', 'gjxoz99zqxn', 'kn6f94l8lf'], 'total_supply': 9647}, {'circulating_supply': 1504, 'cmc_rank': 7288, 'date_added': '2022-06-04T14:06:12.705Z', 'id': 8139, 'last_updated': '2022-06-04T14:06:12.705Z', 'max_supply': 279, 'name': 'm7u2gydgvq9', 'num_market_pairs': 9625, 'platform': None, 'quote': {'USD': {'fully_diluted_market_cap': 0.3189411199857166, 'last_updated': '2022-06-04T14:06:12.705Z', 'market_cap': 0.9195836801096047, 'market_cap_dominance': 7386, 'percent_change_1h': 0.8966387272523342, 'percent_change_24h': 0.7267920118717308, 'percent_change_7d': 0.3335940888561377, 'price': 0.6239567099433401, 'volume_24h': 2423, 'volume_change_24h': 0.09168585704516397}}, 'self_reported_circulating_supply': None, 'self_reported_market_cap': None, 'slug': 'o3wwim7xi1', 'symbol': 'efkrii1djch', 'tags': ['j71nhfb69uq', '1g5xjzraagk', 'm3avc92efo', 'ti6vou9bdo', 'xpikcw37kdq', 'ras6yj0ov1j', 'q6pxx49o54', '2mkapk61q3g', 'w3mta6bp277', '9lzih7dc5ag'], 'total_supply': 3732}, {'circulating_supply': 4360, 'cmc_rank': 5004, 'date_added': '2022-06-04T14:06:12.705Z', 'id': 2800, 'last_updated': '2022-06-04T14:06:12.705Z', 'max_supply': 7962, 'name': 'w93mqwn97v', 'num_market_pairs': 8453, 'platform': None, 'quote': {'USD': {'fully_diluted_market_cap': 0.007328878064808864, 'last_updated': '2022-06-04T14:06:12.705Z', 'market_cap': 0.5417246893129859, 'market_cap_dominance': 6192, 'percent_change_1h': 0.7407536042378802, 'percent_change_24h': 0.26608759317792297, 'percent_change_7d': 0.8699355307184271, 'price': 0.4035951186060771, 'volume_24h': 3559, 'volume_change_24h': 0.4803039164913261}}, 'self_reported_circulating_supply': None, 'self_reported_market_cap': None, 'slug': 'nwj6uk8ct', 'symbol': 'nclkqcfbdo9', 'tags': ['jbzli4pj42', 'pg6t0fjw7se', 'ofmgomjlyc', 'kyd6l63sejk', 'j9pz666fcs', '57d0wzz4zq3', 'wl08h52vw7f', 'jqs2106roql', '8xj21yljuud', 'e8w0o7ud4'], 'total_supply': 5403}, {'circulating_supply': 6283, 'cmc_rank': 5448, 'date_added': '2022-06-04T14:06:12.705Z', 'id': 5867, 'last_updated': '2022-06-04T14:06:12.705Z', 'max_supply': 8225, 'name': 'sjt7ac5a7', 'num_market_pairs': 6428, 'platform': None, 'quote': {'USD': {'fully_diluted_market_cap': 0.07507052431240613, 'last_updated': '2022-06-04T14:06:12.705Z', 'market_cap': 0.6731813040801848, 'market_cap_dominance': 5470, 'percent_change_1h': 0.3311453278291028, 'percent_change_24h': 0.40931398859356416, 'percent_change_7d': 0.8368496793389417, 'price': 0.3868595004001163, 'volume_24h': 6609, 'volume_change_24h': 0.6461750787335578}}, 'self_reported_circulating_supply': None, 'self_reported_market_cap': None, 'slug': 'egcrh5iqnb6', 'symbol': 'vrqysqa0i9', 'tags': ['pmgo3jv2pfm', 'yc3l5kr0dd', '8sspywp0nbj', 'eijgy54ewjl', 'geih06f951v', 'j31se8x8ek', '4snbq73rd8h', '9m89o4io7j5', 'zjtthcymu1', '6bdd2jpo4il'], 'total_supply': 9303}, {'circulating_supply': 4122, 'cmc_rank': 3799, 'date_added': '2022-06-04T14:06:12.705Z', 'id': 7936, 'last_updated': '2022-06-04T14:06:12.705Z', 'max_supply': 9963, 'name': 's0e6s017c7', 'num_market_pairs': 8734, 'platform': None, 'quote': {'USD': {'fully_diluted_market_cap': 0.9746878021113472, 'last_updated': '2022-06-04T14:06:12.705Z', 'market_cap': 0.6013003590049011, 'market_cap_dominance': 5180, 'percent_change_1h': 0.17101064769984875, 'percent_change_24h': 0.8219588644349074, 'percent_change_7d': 0.2967925902164159, 'price': 0.10278733875599788, 'volume_24h': 1847, 'volume_change_24h': 0.30125921593306404}}, 'self_reported_circulating_supply': None, 'self_reported_market_cap': None, 'slug': 'y6bly4ghtu', 'symbol': 'ye38jmukmtq', 'tags': ['cfgi46ho3u6', '4wf66ncn8wq', 'z7kq5h4nk4m', '0fyep070gsvu', 'w6el3hi6q4i', '7bollk8f82n', '2x3wlcryuwl', '4msazv8pi4f', 'h9oa6ildrcr', 'thjizui0bw'], 'total_supply': 8869}, {'circulating_supply': 3674, 'cmc_rank': 2250, 'date_added': '2022-06-04T14:06:12.705Z', 'id': 8624, 'last_updated': '2022-06-04T14:06:12.705Z', 'max_supply': 4673, 'name': '33blug4qp3o', 'num_market_pairs': 8424, 'platform': None, 'quote': {'USD': {'fully_diluted_market_cap': 0.032407781500859434, 'last_updated': '2022-06-04T14:06:12.705Z', 'market_cap': 0.6280852710172873, 'market_cap_dominance': 5169, 'percent_change_1h': 0.5218196464513878, 'percent_change_24h': 0.0034232165759835453, 'percent_change_7d': 0.5044711848329677, 'price': 0.9224507051705186, 'volume_24h': 4396, 'volume_change_24h': 0.5035931003618941}}, 'self_reported_circulating_supply': None, 'self_reported_market_cap': None, 'slug': 'hi05whwp9oo', 'symbol': 'dl9hi3q8du', 'tags': ['c39teqffrz', 'evxnum9ji4', 'e2zurbuk36a', 'ofpeeyv7dk', 'w4tx7i54ft', 'i5kdoxqgyel', 'rkjz66u1idj', 't3b2zlq2qtk', 'irec5slstkg', '7cfqmv66xa'], 'total_supply': 9105}, {'circulating_supply': 9564, 'cmc_rank': 651, 'date_added': '2022-06-04T14:06:12.705Z', 'id': 4412, 'last_updated': '2022-06-04T14:06:12.705Z', 'max_supply': 3446, 'name': '95tii6yz68m', 'num_market_pairs': 1145, 'platform': None, 'quote': {'USD': {'fully_diluted_market_cap': 0.5994931783572839, 'last_updated': '2022-06-04T14:06:12.705Z', 'market_cap': 0.19486044794435098, 'market_cap_dominance': 9258, 'percent_change_1h': 0.2709512261195035, 'percent_change_24h': 0.9009193646671421, 'percent_change_7d': 0.2455243604005588, 'price': 0.7534302739268606, 'volume_24h': 1020, 'volume_change_24h': 0.7508220797217746}}, 'self_reported_circulating_supply': None, 'self_reported_market_cap': None, 'slug': 'pv8kbclf5es', 'symbol': '0eqxeb5xuylj', 'tags': ['ti4cenesez', '9hiorlalwca', '04pj74l383uu', 'f0vynvrsuwr', 'esxnlwz2r9', 'w7ct1k61qu', 'na650df70k', 'x3jn90kdsti', 'jo8c72ffjbe', 'g22o02crg7a'], 'total_supply': 8360}, {'circulating_supply': 7237, 'cmc_rank': 5275, 'date_added': '2022-06-04T14:06:12.705Z', 'id': 2022, 'last_updated': '2022-06-04T14:06:12.705Z', 'max_supply': 6270, 'name': 'f6tmq8nskre', 'num_market_pairs': 2611, 'platform': None, 'quote': {'USD': {'fully_diluted_market_cap': 0.7730373061616533, 'last_updated': '2022-06-04T14:06:12.705Z', 'market_cap': 0.9705979595479648, 'market_cap_dominance': 8275, 'percent_change_1h': 0.9995928830558245, 'percent_change_24h': 0.14815780932452105, 'percent_change_7d': 0.07614097439624401, 'price': 0.24093561110494788, 'volume_24h': 2117, 'volume_change_24h': 0.07351089702151414}}, 'self_reported_circulating_supply': None, 'self_reported_market_cap': None, 'slug': 'x9f87thpjj', 'symbol': '1q9zhxa4fll', 'tags': ['o4mfcrxlvck', '8hhhkw853cf', 'uoo5e0y906d', 'c7fdv0hn6xj', '0cip7lxsnunu', 'v73g628tvd', 'f7tiwkbe3id', 'rlkwmxp7bl', 'a1408ejtlw7', '4hjjgcth8nj'], 'total_supply': 3552}], 'status': {'credit_count': 1, 'elapsed': 1, 'error_code': 0, 'error_message': None, 'notice': None, 'timestamp': '2022-06-04T14:06:12.705Z'}}

仮想通貨の情報リストが取得できました。

/v1/cryptocurrency/listings/historicalのエンドポイントでも仮想通貨の価格は取得できそうですが、せっかくなので別のエンドポイントを使ってみましょう。

今回は /v2/cryptocurrency/quotes/latestを使います。

最新の市場相場価格、取引される仮想通貨の価格が取得できます。

クエリパラメータで色々条件を絞れる様子。

今回はビットコインの相場価格を日本円で取得したいので、

ID:'1'
convert:'JPY'

を指定します。

↓調べたい仮想通貨とIDのマップは以下のエンドポイントで確認

/v1/cryptocurrency/map

さて実際にコーディングしていきましょう。

#This example uses Python 2.7 and the python-request library.

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

API_KEY = '<ご自身の CoinMarketCap API KEYを入力>'

url = 'https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest'
parameters = {
    'id':'1',
    'convert':'JPY'
}
headers = {
  'Accepts': 'application/json',
  'X-CMC_PRO_API_KEY': API_KEY,
}

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

try:
  response = session.get(url, params=parameters)
  data = json.loads(response.text)
  bitcoin_jpy_price = data['data']['1']['quote']['JPY']['price']
  print(f'現在のビットコインの市場価格: {bitcoin_jpy_price}円\n')
  pprint.pprint(data)
except (ConnectionError, Timeout, TooManyRedirects) as e:
  print(e)

現在のビットコインの市場価格: 3901886.888907901円 {'data': {'1': {'circulating_supply': 19057962, 'cmc_rank': 1, 'date_added': '2013-04-28T00:00:00.000Z', 'id': 1, 'is_active': 1, 'is_fiat': 0, 'last_updated': '2022-06-04T14:34:00.000Z', 'max_supply': 21000000, 'name': 'Bitcoin', 'num_market_pairs': 9478, 'platform': None, 'quote': {'JPY': {'fully_diluted_market_cap': 81939624667066.14, 'last_updated': '2022-06-04T14:33:52.000Z', 'market_cap': 74362012057105, 'market_cap_dominance': 46.4328, 'percent_change_1h': 0.61993668, 'percent_change_24h': 0.78870686, 'percent_change_30d': -22.74737582, 'percent_change_60d': -35.1644513, 'percent_change_7d': 2.44920114, 'percent_change_90d': -23.22106434, 'price': 3901886.888907901, 'volume_24h': 2571004693640.8315, 'volume_change_24h': -35.0553}}, 'self_reported_circulating_supply': None, 'self_reported_market_cap': None, 'slug': 'bitcoin', 'symbol': 'BTC', 'tags': [{'category': 'OTHER', 'name': 'Mineable', 'slug': 'mineable'}, {'category': 'CONSENSUS_ALGORITHM', 'name': 'PoW', 'slug': 'pow'}, {'category': 'CONSENSUS_ALGORITHM', 'name': 'SHA-256', 'slug': 'sha-256'}, {'category': 'PROPERTY', 'name': 'Store Of Value', 'slug': 'store-of-value'}, {'category': 'PROPERTY', 'name': 'State Channel', 'slug': 'state-channel'}, {'category': 'PROPERTY', 'name': 'Coinbase Ventures Portfolio', 'slug': 'coinbase-ventures-portfolio'}, {'category': 'PROPERTY', 'name': 'Three Arrows Capital Portfolio', 'slug': 'three-arrows-capital-portfolio'}, {'category': 'PROPERTY', 'name': 'Polychain Capital Portfolio', 'slug': 'polychain-capital-portfolio'}, {'category': 'PROPERTY', 'name': 'Binance Labs Portfolio', 'slug': 'binance-labs-portfolio'}, {'category': 'PROPERTY', 'name': 'Blockchain Capital Portfolio', 'slug': 'blockchain-capital-portfolio'}, {'category': 'PROPERTY', 'name': 'BoostVC Portfolio', 'slug': 'boostvc-portfolio'}, {'category': 'PROPERTY', 'name': 'CMS Holdings Portfolio', 'slug': 'cms-holdings-portfolio'}, {'category': 'PROPERTY', 'name': 'DCG Portfolio', 'slug': 'dcg-portfolio'}, {'category': 'PROPERTY', 'name': 'DragonFly Capital Portfolio', 'slug': 'dragonfly-capital-portfolio'}, {'category': 'PROPERTY', 'name': 'Electric Capital Portfolio', 'slug': 'electric-capital-portfolio'}, {'category': 'PROPERTY', 'name': 'Fabric Ventures Portfolio', 'slug': 'fabric-ventures-portfolio'}, {'category': 'PROPERTY', 'name': 'Framework Ventures Portfolio', 'slug': 'framework-ventures-portfolio'}, {'category': 'PROPERTY', 'name': 'Galaxy Digital Portfolio', 'slug': 'galaxy-digital-portfolio'}, {'category': 'PROPERTY', 'name': 'Huobi Capital Portfolio', 'slug': 'huobi-capital-portfolio'}, {'category': 'PROPERTY', 'name': 'Alameda Research Portfolio', 'slug': 'alameda-research-portfolio'}, {'category': 'PROPERTY', 'name': 'a16z Portfolio', 'slug': 'a16z-portfolio'}, {'category': 'PROPERTY', 'name': '1Confirmation Portfolio', 'slug': '1confirmation-portfolio'}, {'category': 'PROPERTY', 'name': 'Winklevoss Capital Portfolio', 'slug': 'winklevoss-capital-portfolio'}, {'category': 'PROPERTY', 'name': 'USV Portfolio', 'slug': 'usv-portfolio'}, {'category': 'PROPERTY', 'name': 'Placeholder Ventures Portfolio', 'slug': 'placeholder-ventures-portfolio'}, {'category': 'PROPERTY', 'name': 'Pantera Capital Portfolio', 'slug': 'pantera-capital-portfolio'}, {'category': 'PROPERTY', 'name': 'Multicoin Capital Portfolio', 'slug': 'multicoin-capital-portfolio'}, {'category': 'PROPERTY', 'name': 'Paradigm Portfolio', 'slug': 'paradigm-portfolio'}], 'total_supply': 19057962}}, 'status': {'credit_count': 1, 'elapsed': 38, 'error_code': 0, 'error_message': None, 'notice': None, 'timestamp': '2022-06-04T14:35:13.526Z'}}

■変更点

  • url
  • parameters
  • API_KEY

■使い方

上記PythonスクリプトのAPI_KEYには先ほどコピーしたAPI KEYを代入してください

API_KEY = '<ご自身の CoinMarketCap API KEYを入力>'
↓
API_KEY = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'

目標の値を取得できました! 以上です。


閲覧いただきありがとうございました。みなさんのお役に立てましたら幸いです!

コメントやいいねしていただけますと励みになります☺️

Discussion

コメントにはログインが必要です。