仮想サーファーの波乗り

仮想化エンジニアの日常

プログラミング・SNS分析・仮想通貨・自動化などに関してよく書きます。

仮想通貨データをCoinGeckoのAPIで取得してPythonで遊ぶ① ~CoinGecko APIの種類と使い方~


f:id:virtual-surfer:20180513121839p:plain

今回は、CoinGeckoのAPIで提供されているデータが想定外に豊富で、いろいろ活用できそうだったので紹介します。

応用すれば仮想通貨の価格や値動きやコミュニティ動向などの市場情報取得して、Twitterボットでデータを自動でつぶやいたり、市場情報をもとに自動裁定させることもできるので割と楽しめそうです。

・Twitterの仮想通貨情報つぶやきBot
・仮想通貨市場分析プログラム
・自動裁定プログラム

を暇を見て作っていこうと思っているので、その第1弾ということで!

なるべく非エンジニア・エンジニア初心者でも同じように開発できることを意識して、これからプログラム開発方法とプログラム運用結果の紹介記事を連載していきます!意志が続けば!


Coingeckoとは?

Coingeckoは仮想通貨のランキングチャートです。アカウント登録すれば自分の注目している通貨をダッシュボードで管理することができるので重宝しています。

Coingeckoに関して、詳しくはこちらをどうぞ。

www.virtual-surfer.com

今回はそんな仮想通貨データの山を保有しているCoingeckoのAPIの使い方に関して紹介します。


Coingecko APIの種類と使い方

f:id:virtual-surfer:20180513105454p:plain

CoinGeckoの公式サイトのAPIに関してのページを確認すると、以下のAPIが用意されていることがわかります。いずれもデータはJSON形式で返ってきます。

・/ping...APIサーバーのステータスを確認する。アクセスできるかのチェックなど。
・/coins...すべてのコインのデータを取得。何種類のコインを取得するか指定可能。
・/coins/{id}...特定のコインのデータを取得
・/coins/{id}/history...特定のコインの過去時点でのデータを取得
・/coins/{id}/market_chart...特定コインのチャートデータを取得
・/exchange_rates...BTCとの交換レートのデータを取得

これだけ見てもかなり多くのデータが提供されていることがわかりますね。

それでは早速、実際にAPIアクセスしてCoingeckoからデータを取得してみましょう!!


/coins...すべてのコインの情報を取得

まずは一度に多くのコインのデータを取得するAPIにアクセスしてみます。


f:id:virtual-surfer:20180513112240p:plain

/coinsの欄をクリックすると、APIアクセスの詳細が開きます。そこで「Try it Out」という箇所をクリックすると、APIアクセスを簡単に試すことができます。


f:id:virtual-surfer:20180513112727p:plain

上の画像のように、Results ordered by...データの検索結果をどのように並び替えるか、Total results per page...1ページにつき何個のコイン情報を持たせるか、Page through results...何ページの結果を取得するか、をそれぞれ指定していきます。指定できたら、「Execute」をクリックしてAPIアクセスを実行します。


f:id:virtual-surfer:20180513113202p:plain

APIアクセスを実行すると、データ取得結果が表示されます。Response bodyの箇所にjson形式でコイン情報が表示されています。右下に表示されているDownloadをクリックすると、json形式で取得したデータを自分のPCにファイル保存することができます。


f:id:virtual-surfer:20180513113337p:plain

ダウンロードしてSublime Textでファイルを開いた。取得できているデータとしては、以下のものが主要かなと。

・current_price...仮想通貨1単位辺りの値段
・market_cap...時価総額(= 仮想通貨1単位辺りの値段 × 仮想通貨の供給量)
・total_volume...仮想通貨の供給量
・high...24時間での最高値
・low...24時間での最安値
・price_change_percentage_24h...24時間での価格の変化率
・community_data...Facebookいいね数、Twitterのフォロワー数などのデータを持つ
・developer_data...プルリクエスト数など、開発者データを持つ
・public_interest_stats... alexa_rankなどのデータ
・last_updated(例:"2018-05-13T02:17:33.497Z")...最終更新日時

コミュニティーデータや開発者データまで提供しているとは思っていませんでした。草コインの開発状況がどうなのか分析して実態があるのか把握するためなど、有益に活用できそうです。


/coins/{id}...特定のコインのデータを取得

次に特定のコインのデータを取得してみます。これも同じ要領でAPIアクセスを試すことができます。


f:id:virtual-surfer:20180513114934p:plain

idに特定のコインのid(多くは「bitcoin」など仮想通貨の正式名称)を指定してExecuteします。ここではnemで試してみました。

「/coins/{id}」で特定のコインのデータを取得すると、「/coins」で一気にコイン情報を取得した時には取得できなかったtickers(株式相場)のデータが取得できます。

...
  "tickers": [
    {
      "base": "XEM",
      "target": "JPY",
      "market": {
        "name": "Zaif",
        "identifier": "zaif"
      },
      "last": 36,
      "converted_last": {
        "btc": "0.000038906011555424700102645",
        "eth": "0.000486077871298452947938499736064695456",
        "usd": "0.3290498606096614211526156988043298"
      },
      "volume": 33178493.5,
      "converted_volume": {
        "btc": "1290.8428515025833020950564653075",
        "eth": "16127.331493369557693233351892774213766375536",
        "usd": "10917378.6614135574989128224707774140411563"
      },
      "timestamp": "2018-05-13T02:00:39.000Z",
      "is_anomaly": false
    },
    {
      "base": "XEM",
      "target": "BTC",
      "market": {
        "name": "Binance",
        "identifier": "binance"
      },
...

このデータは各種取引所での取引量のデータを持っているので、特定のコインがzaifやBinanceやBittrexなどの取引所でどのくらいの取引総量なのか、終値はいくらだったのかを知ることができます。

取引所ごとの取引量のデータが知れるのは面白いですね。


/coins/{id}/history...特定のコインの過去データを取得

f:id:virtual-surfer:20180513115845p:plain

「/coins/{id}/history」では、指定した日付の時点での「/coins」で取得できるデータ情報を取得することができます。試しに2017年5月1日のNEMの価格を調べたら5.6円でした。今やほぼ10倍になってる。すごい。


/coins/{id}/market_chart...特定コインのチャートデータを取得

f:id:virtual-surfer:20180513120343p:plain

id...コインのid、vs_currency...どの通貨での価格で表示するか、days...何日間のデータを取得するか、を指定してコインのチャートデータを取得することができます。

{
  "prices": [
    [
      1526009204153,
      37.95124302878635
    ],
    [
      1526012804627,
      38.13227571167324
    ],
    [
      1526016406449,
      38.387876299362844
    ],
    [
      1526020005537,
      38.37944969703379
    ],
...

取得できるデータは「価格」と「昇順での(おそらく)意味のないid」のようです。特定の期間のデータを取得したら、その特定の期間を取得できた価格データの数で割ってチャート上に表示すれば、いい感じにチャートが作れそう。


/exchange_rates...BTCとの交換レートのデータを取得

BTCを基軸として交換レートがどの程度なのかというデータを取得できます。

{
  "rates": {
    "btc": 0,
    "eth": 12.477,
    "usd": 8417.512,
    "cad": 10782.007,
    "gbp": 6214.649,
    "eur": 7037.755,
    "chf": 8415.028,
    "sek": 72384.707,
    "jpy": 920917.847,
    "cny": 53317.36,
    "inr": 567284.72,
    "rub": 521111.303,
    "aud": 11162.462,
    "hkd": 66077.886,
    "sgd": 11248.245,
    "twd": 250538.813,
    "brl": 30310.988,
    "krw": 8989902.293,
    "zar": 103056.536,
    "myr": 33653.901,
    "idr": 117477799.895,
    "nzd": 12080.392,
    "mxn": 163486.592,
    "php": 441574.236,
    "dkk": 52519.279,
    "pln": 30074.354,
    "xau": 6.384,
    "xag": 505.166,
    "xdr": 5883.032
  }
}


以上、CoinGecko APIで取得できるデータの種類と取得方法でした。


まとめ

今回はAPIで取得できるデータの種類と簡単に試してみる方法を紹介しましたが、データは活用してナンボです。次回からはCoinGecko APIを活用して特定の通貨の情報を定期的にTwitter上でツイートしてくれる機能を実装していきたいと思います。

いじってて結構楽しかったので、皆さんも遊んでみてください〜。


では。