#author("2018-07-22T20:49:09+09:00","","")
#author("2018-07-22T20:49:51+09:00","","")
#navi(../)
* Bitfinexの取引情報(取引リスト)を取得する(API v1) [#s32e1393]
PowerShellでBitfinexのTradesを呼び出し、指定した仮想通貨ペアの取引情報を取得する操作例を以下に記します。~

#contents
#htmlinsert(cc-top.html)

* 参考資料 [#u0addad1]
BitfinexのTrades取得するAPIドキュメントURL~
API仕様は、以下のURLで確認してください。~
https://bitfinex.readme.io/v1/reference#rest-public-trades

* 関連記事 [#n50b9f5c]
-[[Bitfinexの通貨シンボル一覧の取得(API v1)(PowerShell)>API/Bitfinex/通貨ペアのシンボル一覧の取得(API v1)(PowerShell)]]
-[[BitfinexのTickerの取得(API v1)(PowerShell)>API/Bitfinex/Tickerの取得(API v1)(PowerShell)]]
-[[Bitfinexで指定した通貨ペアの取引量を取得する(API v1)(PowerShell)>API/Bitfinex/指定した通貨ペアの取引量を取得する(API v1)(PowerShell)]]
-[[Bitfinexのファンディング情報を取得する(API v1)(PowerShell)>API/Bitfinex/ファンディング情報を取得する(API v1)(PowerShell)]]
-[[Bitfinexの板情報(注文一覧)を取得する(API v1)(PowerShell)>API/Bitfinex/板情報(注文一覧)を取得する(API v1)(PowerShell)]]
-[[Bitfinexの取引情報(取引リスト)を取得する(API v1)(PowerShell)>API/Bitfinex/取引情報を取得する(API v1)(PowerShell)]]


* Trades APIをブラウザでアクセスしてみる [#na22404a]
以下、URLで取引情報を取得できます。~
-BTC/USD~
https://api.bitfinex.com/v1/trades/btcusd~
Firefoxでアクセスした時のスクリーンショットです。~
|''JSON''|''生データ''|
|&ref(01.png);|&ref(02.png);|
#br
-ETH/USD
https://api.bitfinex.com/v1/trades/ethusd~
Firefoxでアクセスした時のスクリーンショットです。~
|''JSON''|''生データ''|
|&ref(03.png);|&ref(04.png);|

''通貨シンボル一覧(通貨ペア一覧)''については、以下のリンク記事を参考にしてください。
-[[Bitfinexの通貨シンボル一覧の取得(API v1)(PowerShell)>API/Bitfinex/通貨ペアのシンボル一覧の取得(API v1)(PowerShell)]]

* PowerShellによるTrades APIアクセス [#da3939fe]
PowerShellの''Invoke-RestMethod''コマンドレットと、~
''Invoke-WebRequest''+''ConvertFrom-Json''コマンドレットを使って、~
BitfinexのTrades APIを呼び出しレスポンスを取得してみます。

** ''Invoke-RestMethod''コマンドレットで取引情報を取得してみる [#nead3e8a]
''Invoke-RestMethod''コマンドレットを使用して、Bitfinexの取引情報を取得する操作例になります。~

以下の操作例は、''BTC/USD''の通貨ペアを取得しています。~
''通貨シンボル一覧(通貨ペア一覧)''については、以下のリンク記事を参考にしてください。
-[[Bitfinexの通貨シンボル一覧の取得(API v1)(PowerShell)>API/Bitfinex/通貨ペアのシンボル一覧の取得(API v1)(PowerShell)]]
+以下の構文でBTCUSDの取引情報を取得します。
 PS C:\> $v1_trades_api = "https://api.bitfinex.com/v1/trades/"
 PS C:\> $symbol = "BTCUSD"
 PS C:\> $trades = Invoke-RestMethod -UseBasicParsing ($v1_trades_api + $symbol)
+取得した取引情報数を表示しています。
 PS C:\> $trades.Count
 100
+Select-Objectコマンドレットを使って最初の2件を表示してみます。
 PS C:\> $trades | Select-Object -First 2
 
 timestamp : 1532234014
 tid       : 271279029
 price     : 7392.7
 amount    : 0.057797
 exchange  : bitfinex
 type      : buy
 
 timestamp : 1532234013
 tid       : 271279027
 price     : 7392.7
 amount    : 0.25
 exchange  : bitfinex
 type      : buy
+Format-Tableコマンドレットを使って表形式に整形し、5行表示しています。
 PS C:\> $trades | Format-Table | Select-Object -First 5
 
          timestamp                 tid price               amount              exchange            type
          ---------                 --- -----               ------              --------            ----
         1532234014           271279029 7392.7              0.057797            bitfinex            buy
         1532234013           271279027 7392.7              0.25                bitfinex            buy
         1532234007           271279020 7392.6              0.1                 bitfinex            sell

*** パラメータを指定してみる [#n5740fad]
Trades APIの詳細を見ると以下の通り、時間と取得数を設定するパラメータがあります。~
このパラメータを使ってみます。~

Bitfinex Trades APIページから抜粋~
''Request Details''~

|Key|Required|Type|Default|Description|
''Request Details''
|''Key''|''Required''|''Type''|''Default''|''Description''|
|timestamp|false|[time]||Only show trades at or after this timestamp|
|limit_trades|false|[int]|50|Limit the number of trades returned. Must be >= 1|


-''timestampを現在時刻-10秒として実行してみる''~
timestampはUNIX時間を指定します。~
UNIX時間については、以下のリンク記事を参照してください。~
-[[PowerShellでUNIXTIMEを取得する方法>http://win.just4fun.biz/?PowerShell/UNIXTIME%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95]]


 PS C:\> $btcusd_trades_url = "https://api.bitfinex.com/v1/trades/btcusd"
 PS C:\> $timestamp = [int](((Get-Date) - (Get-Date("1970/1/1 0:0:0 GMT"))).TotalSeconds - 10)
 PS C:\> $trades = Invoke-RestMethod -UseBasicParsing ($btcusd_trades_url + "?timestamp=$timestamp")
 PS C:\> $timestamp
 1532258886
 PS C:\> $trades | Format-Table
 
 timestamp       tid price         amount exchange type
 ---------       --- -----         ------ -------- ----
 1532258893 271325392 7454.92241801 0.05   bitfinex sell
 1532258888 271325378 7454.8        0.1    bitfinex sell

指定したtimestamp以降の取引情報のみ取得できているのが確認できます。

-''取得数(limit_trades)を指定して取得する''~
limit_tradesを指定して取引データを取得してみます。
 PS C:\> $limit = 20
 PS C:\> $btcusd_trades_url = "https://api.bitfinex.com/v1/trades/btcusd"
 PS C:\> $trades = Invoke-RestMethod -UseBasicParsing ($btcusd_trades_url + "?limit_trades=$limit")
 PS C:\> $trades.Count
 20
 
 PS C:\> $limit = 5
 PS C:\> $trades = Invoke-RestMethod -UseBasicParsing ($btcusd_trades_url + "?limit_trades=$limit")
 PS C:\> $trades | Format-Table
 
  timestamp       tid price  amount     exchange type
  ---------       --- -----  ------     -------- ----
 1532259347 271326252 7457.0 0.004      bitfinex buy
 1532259347 271326251 7456.7 0.01       bitfinex buy
 1532259340 271326234 7456.7 0.005      bitfinex buy
 1532259333 271326231 7456.5 0.276295   bitfinex sell
 1532259323 271326224 7456.1 0.17939914 bitfinex sell

-''timestamp, limit_tradesの両方を指定し取得してみる''~
 PS C:\> $btcusd_trades_url = "https://api.bitfinex.com/v1/trades/btcusd"
 PS C:\> $limit = 20
 PS C:\> $timestamp = [int](((Get-Date) - (Get-Date("1970/1/1 0:0:0 GMT"))).TotalSeconds - 60)
 PS C:\> $trades = Invoke-RestMethod -UseBasicParsing ($btcusd_trades_url + "?timestamp=${timestamp}&limit_trades=${limit}")
 PS C:\> $trades | Format-Table
 
  timestamp       tid price  amount     exchange type
  ---------       --- -----  ------     -------- ----
 1532259754 271326683 7457.4 0.00235    bitfinex buy
 1532259752 271326673 7457.4 0.119      bitfinex sell
 1532259740 271326646 7457.5 0.81046561 bitfinex buy
 1532259740 271326645 7457.3 0.23922987 bitfinex buy
 1532259740 271326644 7457.2 0.8        bitfinex buy
 1532259739 271326641 7455.7 0.005      bitfinex sell

** ''Invoke-WebRequest''+''ConvertFrom-Json''コマンドレットで取引情報を取得する [#y15dcb5c]
''Invoke-WebRequest''使うことにより、HTTPステータスや、Content-Typeなどを取得することができます。~
取得したContent部分を''ConvertFrom-Json''コマンドレットを使うことにより、Invoke-RestMethodと同様に、~
JSON形式でアクセスすることができます。
+ Invoke-WebRequestでTrades APIにアクセス
 PS C:\> $btcusd_trades_url = "https://api.bitfinex.com/v1/trades/btcusd"
 PS C:\> $response = Invoke-WebRequest -UseBasicParsing $btcusd_trades_url
+ 取得したレスポンスを表示します。
 PS C:\> $response
 
 StatusCode        : 200
 StatusDescription : OK
 Content           : [{"timestamp":1532235786,"tid":271282004,"price":"7394.5","amount":"1.0","exchange":"bitfinex","typ
                     e":"sell"},{"timestamp":1532235783,"tid":271281988,"price":"7394.5","amount":"0.0095","exchange":"b
                     it...
 RawContent        : HTTP/1.1 200 OK
                     Transfer-Encoding: chunked
                     Connection: keep-alive
                     Vary: Accept-Encoding
                     X-Frame-Options: SAMEORIGIN,SAMEORIGIN
                     X-XSS-Protection: 1; mode=block
                     X-Content-Type-Options: nosniff
                     X-...
 Forms             :
 Headers           : {[Transfer-Encoding, chunked], [Connection, keep-alive], [Vary, Accept-Encoding], [X-Frame-Options,
                      SAMEORIGIN,SAMEORIGIN]...}
 Images            : {}
 InputFields       : {}
 Links             : {}
 ParsedHtml        :
 RawContentLength  : 11180
+ステータスコード、HTTP Header, Content-Typeなどの値にアクセスしてみます。
 PS C:\> $response.StatusCode
 200
#br
 PS C:\> $response.Headers
 
 Key                       Value
 ---                       -----
 Transfer-Encoding         chunked
 Connection                keep-alive
 Vary                      Accept-Encoding
 X-Frame-Options           SAMEORIGIN,SAMEORIGIN
 X-XSS-Protection          1; mode=block
 X-Content-Type-Options    nosniff
 X-Request-Id              790f7088-d9d9-4726-82f3-2e4d6a6fa0cb
 X-Runtime                 0.006105
 Strict-Transport-Security max-age=31536000
 Expect-CT                 max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
 CF-RAY                    43e35c21b8f39547-NRT
 Cache-Control             max-age=0, private, must-revalidate
 Content-Type              application/json; charset=utf-8
 Date                      Sun, 22 Jul 2018 05:03:17 GMT
 ETag                      W/"3bc822405766a7e950aad440c40bbbf9"
 Set-Cookie                __cfduid=de11180575c3cdec4b4b287d1776345091532235796; expires=Mon, 22-Jul-19 05:03:16 GMT;...
 Server                    cloudflare
#br
 PS C:\> $response.Headers.'Content-Type'
 application/json; charset=utf-8
+ ConvertFrom-Jsonコマンドレットを使うことにより、JSON形式に変換することができます。
 PS C:\> $json = ConvertFrom-Json $response.Content
 PS C:\> $json.Count
 100
 PS C:\> $json | Select-Object -First 5 | Format-Table
 
  timestamp       tid price  amount  exchange type
  ---------       --- -----  ------  -------- ----
 1532235786 271282004 7394.5 1.0     bitfinex sell
 1532235783 271281988 7394.5 0.0095  bitfinex sell
 1532235782 271281987 7394.5 0.0095  bitfinex sell
 1532235770 271281953 7394.5 0.1     bitfinex sell
 1532235767 271281950 7394.5 0.01352 bitfinex sell

* Webの応答を読み取っています。(Waiting for response)を非表示にする方法 [#uf6c2cb4]
上記のコマンドレットを実行すると、APIサーバとのやり取りのプログレスメッセージが表示されます。~

#ref(51.png)

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

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

 PS C:\> $ProgressPreference
 Continue

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

 PS C:\> $ProgressPreference = "SilentlyContinue"

以上、PowerShellを使って、BitfinexのTrades APIを呼び出す方法でした。

#htmlinsert(cc-btm.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS