Ethereumの現在価格を取得する方法


はじめに

Ethereumは日に日によって価格が違います。
Webサイトで現在価格を調べればわかりますが、アプリで実装する時はサイトみて如何の斯うのは便利なライブラリがない限りは難しいと思います。(私が調べた限りでは)
現在価格取得できないと日本円換算もドル換算もできない....どうしようと思った時にあるサイトを見つけました。
それは「coinmarketcap」というサイトです。
このサイトはAPIを叩けば現在価格をレスポンスデータで教えてくれるなんとも素晴らしいサイトです。
coinmarketcapさんには大変感謝感謝です!!!!
今回はSwiftで皆さんに展開したいと思います。

開発環境

Xcode 10.2
swift5

準備

ということで前置きは長くなりましたが実際にどういう風に使うかですが、まず「coinmarketcap」でユーザー登録する必要があります。
なぜかというとログインするとAPIキーが渡されます。そのAPIキーを使ってGet処理をすることになるからです。

実装

まず完成品

GetCurrency.swift
//表示した通貨を設定
var currency: String = "USD"
//URLのパス
let currencyURL = https://pro-api.coinmarketcap.com/v1/tools/price-conversion
let API_KEY = "取得したAPIキーをここに入れる"
// URLリクエストを作成
var components = URLComponents(string: currencyURL)
//複数のパラメーターをクエリストリングをしている
components?.queryItems = [URLQueryItem(name:"id",value:"1027"),URLQueryItem(name:"amount",value:"1"),URLQueryItem(name:"convert",value:currency)]
let url = components?.url

let urlString = url?.absoluteString
print("\n URLPath:\(urlString!)")
var request = NSMutableURLRequest(url: NSURL(string: urlString!)! as URL)

//メソッドを設定
request.httpMethod = "GET"
//ヘッダーの設定
request.addValue(API_KEY, forHTTPHeaderField: "X-CMC_PRO_API_KEY")

var task = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: { data, response, error in
    if (error == nil) {
        var result = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)!
        print(result)
    } else {
        print(error)
    }
})
task.resume()

説明

今回はHTTPについては触れません。
ですので、パラメータの説明だけさせていただきます。

GetCurrency.swift
//複数のパラメーターをクエリストリングをしている
components?.queryItems = [URLQueryItem(name:"id",value:"1027"),URLQueryItem(name:"amount",value:"1"),URLQueryItem(name:"convert",value:currency)]
key value
パラメータ名 id 1027
説明 仮想通貨のID 仮想通貨の番号

仮想通貨番号は探すの大変でした。1027番がEthですが、他の仮想通貨の場合は各自で調べてください。

key value
パラメータ名 amount 1
説明 仮想通貨の量 調べたい仮想通貨の量を入れる

(例)
1ethを調べたい場合は[amount:1]
0.5eth調べたいときは[amount:0.5]

key value
パラメータ名 convert "JPY"
説明 通貨 実際の換算したい国の名前

このValueの中身に関しも各自で調べてください
下記のURLから「Standards and Conventions」を調べると国の表示リストが出てくるのでそこから自分が換算した国を見つけて[convert:"自分が換算したい国"]を入れましょう。
https://coinmarketcap.com/api/documentation/v1/#section/Endpoint-Overview

レスポンスデータ

JsonData
"status": {
        "timestamp": "時間",
        "error_code": 0,
        "error_message": null,
        "elapsed": 7,
        "credit_count": 1,
        "notice": null
    },
    "data": {
        "id": 1027,
        "symbol": "ETH",
        "name": "Ethereum",
        "amount": 1,
        "last_updated": "時間",
        "quote": {
            "USD": {
                "price": 177.114719131,
                "last_updated": "時間"
            }
        }
    }

データはちょっと見せるためにいじってます。
だいたいこんな感じのものがレスポンスデータで送られてきたらOKです。
"error_code": 0」であれば問題ないと思います。
あとはパースして使うだけです!!!!

終わりに

今回は仮想通貨の換算の方法について展開しました。
仮想通貨自体日本語のリソースはまだしも外国の方もなかなかネットに展開していないので探すのが私自身一苦労でした。皆さんのエンジニアライフに私の情報が少しでも助けになることを願っています。
最後まで、読んでいただきありがとうございました。

最後に、改めてcoinmarketcapさんありがとうございます!!!!!!!!!!