PowerShellでCoinExchange.ioのgetmarketsummaries APIにアクセスしてみる

CoinExchange.iogetmarketsummaries APIをPowerShelld呼び出す方法の記事になります。


CoinExchange.io へのリンク

CoinExchange.io

関連資料・記事

getmarketsummariesの仕様

以下、CoinExchange.io API v1 Referenceのgetmarketsummaries APIの抜粋です。

Get Market Summaries

This endpoint retrieves summaries for all markets.

HTTP Request
GET https://www.coinexchange.io/api/v1/getmarketsummaries
'getmarketsummaries' returns JSON structured like this:

{
   "success": "1",
   "request": "/api/v1/public/getmarketsummaries",
   "message": "",
   "result": [
   {
       "MarketID": "1",
       "LastPrice": "0.00902321",
       "Change": "2.01",
       "HighPrice": "0.00961681",
       "LowPrice": "0.00853751",
       "Volume": "3043.78746852",
       "BTCVolume": "3043.78746852",
       "TradeCount": "1332",
       "BidPrice": "0.00902321",
       "AskPrice": "0.00928729",
       "BuyOrderCount": "7796",
       "SellOrderCount": "7671"
   },
   {
       "MarketID": "3",
       "LastPrice": "0.05000000",
       "Change": "0.00",
       "HighPrice": "0.00000000",
       "LowPrice": "0.00000000",
       "Volume": "0.00000000",
       "BTCVolume": "0.00000000",
       "TradeCount": "0",
       "BidPrice": "0.00000000",
       "AskPrice": "0.02000000",
       "BuyOrderCount": "0",
       "SellOrderCount": "1"
   }
   ]
}

getmarketsummaries APIをブラウザでアクセスしてみる

以下のURLにブラウザでアクセスしてみます。

FirefoxだとJSON形式で確認することができます。

JSON生データ
01.png02.png

PowerShellのInvoke-RestMethodを使用してAPIを呼び出してみる

実際に、CoinExchange.iogetmarketsummariesをInvoke-RestMethodコマンドレットを使用して呼び出してみます。

  1. セキュリティプロトコルをTLS1.2に変更します。(2018/5/31時点、TLS1.2を指定しないと動作しなくなったので追記)
    PS C:\> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
  2. 呼び出し元のURL情報を各変数に設定しています。
    PS C:\> $base_url = "https://www.coinexchange.io/api/"
    PS C:\> $version  = "v1"
    PS C:\> $method   = "getmarketsummaries"
  3. getmarketsummaries APIのURLをInvoke-RestMethodの引数にして実行します。
    PS C:\> $response = Invoke-RestMethod -UseBasicParsing "${base_url}${version}/${method}"
  4. getmarketsから返却された値を表示しています。
    PS C:\> $response
    
    success request                    message result
    ------- -------                    ------- ------
    1       /api/v1/getmarketsummaries         {@{MarketID=18; LastPrice=0.01584000; Change=0.32; HighPrice=0.01599963; ...

取得した値から各種値を抽出する

上記で取得し、$responseに格納した値を操作してみます。

  1. 取得したレスポンスは以下のようになっています。
    PS C:\> $response
    
    success request                    message result
    ------- -------                    ------- ------
    1       /api/v1/getmarketsummaries         {@{MarketID=18; LastPrice=0.01584000; Change=0.32; HighPrice=0.01599963; ...
  2. success, request, resultを表示してみます。
    PS C:\> $response.success
    1
    PS C:\> $response.request
    /api/v1/getmarketsummaries
    PS C:\> $response.result.Count
    689
    PS C:\> $response.result[0]
    
    
    MarketID       : 18
    LastPrice      : 0.01584000
    Change         : 0.32
    HighPrice      : 0.01599963
    LowPrice       : 0.01562021
    Volume         : 4.41002465
    BTCVolume      : 4.41002465
    TradeCount     : 404
    BidPrice       : 0.01584000
    AskPrice       : 0.01590000
    BuyOrderCount  : 251
    SellOrderCount : 841
    上記のresult配列内の情報を見るとMarketIDとなっており、どの銘柄のマーケット情報なのかわからない状態です。
    以下に、銘柄をgetmarkets APIから検索しMarketIDを取得し、任意の通貨マーケット情報を取得する例を記します。
    getmarketsについては、以下のリンクに記事を公開しています。

getmarketsとgetmarketsummaries APIを使用し任意の通貨ペアの情報を取得する

getmarketsummaries APIだとMarketIDしかないので、知りたい通貨ペアのMarketIDを調べる必要があります。
MarketIDを調べるには、getmarkets APIを使用します。

XSH/DOGEペアのマーケット情報を取得してみる

以下の操作例は、XSH/DOGEのマーケット情報する操作例です。

  1. APIのエンドポイントとバージョン文字列を変数に設定しています。
    PS C:\> $base_url = "https://www.coinexchange.io/api/"
    PS C:\> $version  = "v1"
  2. 通貨ペアを指定しています。(XSH/DOGE)
    PS C:\> $MarketAssetCode = "XSH"
    PS C:\> $BaseCurrencyCode = "DOGE"
  3. APIメソッド名を設定しています。
    PS C:\> $method   = "getmarkets"
  4. セキュリティプロトコルをTLS1.2に変更します。(2018/5/31時点、TLS1.2を指定しないと動作しなくなったので追記)
    PS C:\> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
  5. Invoke-RestMethodでgetmarkets APIを呼び出しています。
    PS C:\> $markets = Invoke-RestMethod -UseBasicParsing "${base_url}${version}/${method}"
  6. getmarketsで取得した情報は以下の通りです。
    PS C:\> $markets
    
    success request            message result
    ------- -------            ------- ------
    1       /api/v1/getmarkets         {@{MarketID=18; MarketAssetName=Litecoin; MarketAssetCode=LTC; MarketAssetID=2; M...
  7. XSH/DOGEのMarketIDを取得します。
    PS C:\> $markets.result | % { if ($_.MarketAssetCode -eq $MarketAssetCode -And $_.BaseCurrencyCode -eq $BaseCurrencyCode) { $MarketID = $_.MarketID; $_; break } }
  8. 取得した情報を表示しています。
    MarketIDが705であるのが確認できます。
    MarketID         : 705
    MarketAssetName  : Shield
    MarketAssetCode  : XSH
    MarketAssetID    : 532
    MarketAssetType  : currency
    BaseCurrency     : Dogecoin
    BaseCurrencyCode : DOGE
    BaseCurrencyID   : 4
    Active           : True
    尚、上記の1ラインで$MarketID変数にMarketIDの値(今回は705)が代入されます。
    PS C:\> $MarketID
    705
  9. getmarketsummaries APIでマーケット情報を取得します。
  10. APIメソッド名を指定しています。
    PS C:\> $method = "getmarketsummaries"
  11. Invoke-RestMethodでgetmarketsummaries APIを呼び出しています。
    PS C:\> $response = Invoke-RestMethod -UseBasicParsing "${base_url}${version}/${method}"
  12. getmarketsummariesで取得した情報は以下の通りです。
    PS C:\> $response
    
    success request                    message result
    ------- -------                    ------- ------
    1       /api/v1/getmarketsummaries         {@{MarketID=18; LastPrice=0.01582001; Change=1.02; HighPrice=0.01599963; ...
    
  13. 上記で取得した(getmarkets API)MarketID(この例では705)を使い、XSH/DOGEのマーケット情報を取り出します。
    PS C:\> $response.result | % { if ($_.MarketId -eq $MarketID) { $_; break; } }
    
    
    MarketID       : 705
    LastPrice      : 9.03501247
    Change         : -9.65
    HighPrice      : 9.99999973
    LowPrice       : 9.01202065
    Volume         : 50527.55224379
    BTCVolume      : 0.02273740
    TradeCount     : 21
    BidPrice       : 9.03501250
    AskPrice       : 9.75998861
    BuyOrderCount  : 348
    SellOrderCount : 292
    以下のスクリーンショットを見ると、同じ値が取得されているのが確認できます。
    04.png

HTTPステータスなどを一緒に取得したい場合はInvoke-WebRequestが便利!

上記では、Invoke-RestMethodにてJSONをPowerShellで扱いやすい状態に変換してくれますが、
Webサーバから返却された値を変換せずに取得したい場合は、Invoke-WebRequestコマンドレットを使用します。
また、取得後にJSONをPowerShellで扱いやすいオブジェクトに変換するには、ConvertFrom-Jsonコマンドレットを使用します。
以下に実行例を記します。

  1. セキュリティプロトコルをTLS1.2に変更します。(2018/5/31時点、TLS1.2を指定しないと動作しなくなったので追記)
    PS C:\> [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
  2. APIのURL作成用の文字列を変数に格納しています。
    PS C:\> $base_url = "https://www.coinexchange.io/api/"
    PS C:\> $version  = "v1"
    PS C:\> $method   = "getmarketsummaries"
  3. Invoke-WebRequestコマンドレットでAPIを呼び出し返却された情報を変数に格納しています。
    PS C:\> $response = Invoke-WebRequest -UseBasicParsing "${base_url}${version}/${method}"
  4. 返却された情報を表示してみます。
    PS C:\> $response
    
    
    StatusCode        : 200
    StatusDescription : OK
    Content           : {"success":"1","request":"\/api\/v1\/getmarketsummaries","message":"","result":[{"MarketID":"18","L
                        astPrice":"0.01582001","Change":"0.42","HighPrice":"0.01599963","LowPrice":"0.01562021","Volume":"4
                        .3...
    RawContent        : HTTP/1.1 200 OK
                        Transfer-Encoding: chunked
                        Connection: keep-alive
                        x-frame-options: SAMEORIGIN
                        Cache-Control: no-cache
                        Content-Type: application/json
                        Date: Fri, 01 Jun 2018 15:22:18 GMT
                        Set-Cook...
    Forms             :
    Headers           : {[Transfer-Encoding, chunked], [Connection, keep-alive], [x-frame-options, SAMEORIGIN], [Cache-Cont
                        rol, no-cache]...}
    Images            : {}
    InputFields       : {}
    Links             : {}
    ParsedHtml        :
    RawContentLength  : 183771
  5. HTTPステータスやContent-Typeを簡単に取得することができます。
    PS C:\> $response.StatusCode
    200
    
    PS C:\> $response.Headers.'Content-Type'
    application/json
  6. ConvertFrom-Jsonを使ってみます。
    PS C:\> $json = ConvertFrom-Json($response.Content)
    PS C:\> $json
    
    success request                    message result
    ------- -------                    ------- ------
    1       /api/v1/getmarketsummaries         {@{MarketID=18; LastPrice=0.01582001; Change=0.42; HighPrice=0.01599963; ...
    
    
    PS C:\> $json.result[0]
    
    
    MarketID       : 18
    LastPrice      : 0.01582001
    Change         : 0.42
    HighPrice      : 0.01599963
    LowPrice       : 0.01562021
    Volume         : 4.32781232
    BTCVolume      : 4.32781232
    TradeCount     : 405
    BidPrice       : 0.01583001
    AskPrice       : 0.01590000
    BuyOrderCount  : 248
    SellOrderCount : 842

Webの応答を読み取っています。(Waiting for response)を非表示にする方法

上記のコマンドレットを実行すると、APIサーバとのやり取りのプログレスメッセージが表示されます。

03.png

これを非表示にしたい場合は、以下のようにしてください。

非表示にするには、$ProgressPreferenceにSilentlyContinueを設定します。
変更前は以下のように Continue が設定されています。

PS C:\> $ProgressPreference
Continue

非表示にするには、以下のように変更します。

PS C:\> $ProgressPreference = "SilentlyContinue"

以上、PowerShellを使って、coinexchang.io.html is not found or not readable.の getmarketsummariesとgetmarkets APIを使って
任意の通貨ペアのマーケット情報を取得する操作例でした。


CoinExchange.io へのリンク

CoinExchange.io

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS