Python3でNEMのAPIを叩く-004-アカウントデータを取得する

#はじめに
[前回](https://qiita.com/oden_umai/items/67cdef2cee97a84586c9)まではNISサーバーの稼働状況についての確認でした。
今回は見慣れているウォレットのアカウントデータについて触れていこうと思います。
NEMはウォレットにアカウントを作成して、XEMやモザイクを入れることが出来ます。
その普段使っているアカウントのアドレスから、APIを叩いてアカウントデータを取得することが可能です。
具体的にはXEMの枚数とか、重要度とかを取得することが出来ます。

#使うAPI
/account/get を使います。
パラメータにはNEMのアドレスを入れます。
>![スクリーンショット 2018-03-11 18.50.38.png](https://qiita-image-store.s3.amazonaws.com/0/242994/3e72b631-e74a-533d-d16a-e3b6cdc0c2b4.png)
>(解説：和訳)https://www.pr1sm.com/crypto-coin/nem-nis-api-documentation-in-japanese/#requesting-the-account-data

>![スクリーンショット 2018-03-11 18.50.49.png](https://qiita-image-store.s3.amazonaws.com/0/242994/e63dc33a-b4e9-165a-78b7-02bc2b6b723f.png)
>(解説：本家)https://nemproject.github.io/#requesting-the-account-data

#サンプル1:全データを表示
##コード
実行環境が無い方はpaizaで試せます。
https://paiza.io/ja

```python:Python3
import requests
import json

node = 'http://104.128.226.60:7890' #テストネットのノードです
api = '/account/get'
parameter = 'address=TCJC5VFBIYF5TKEUS273XS7IXUKJ36I3JCJQ7WOH'
url = str(node + api + '?' + parameter)

r = requests.get(url).json()

print(json.dumps(r,indent=4))
```

##結果の例
アカウントメタデータペア(AccountMetaDataPair)というアカウント情報のJSONデータが取得できます。


```json:json
{
    "account": {
        "harvestedBlocks": 0,
        "publicKey": "756317d797f742b695cece76aa74ecd47305b48d5158c6dab44a48592de0325e",
        "importance": 0.0,
        "label": null,
        "vestedBalance": 24378510,
        "address": "TCJC5VFBIYF5TKEUS273XS7IXUKJ36I3JCJQ7WOH",
        "multisigInfo": {},
        "balance": 82700000
    },
    "meta": {
        "cosignatories": [],
        "status": "LOCKED",
        "cosignatoryOf": [],
        "remoteStatus": "INACTIVE"
    }
}
```
NanoWalletと見比べるとわかりやすいと思います。
![スクリーンショット 2018-03-11 22.16.21.png](https://qiita-image-store.s3.amazonaws.com/0/242994/6a598750-1018-2565-10ef-1bc25ca0e630.png)
※画像はNanoWallet ver2.1.2 mac版

JSONデータは「"balance": 82700000」となっています。これは82.700000XEMという意味ですが、NanoWalletでも82.700000XEMとなっていますね。

全部の値が何を意味しているのかわからないので、解説はここまでにとどめますが、もっと詳しくなれば更新していこうと思います。

##解説
ここはURLを１行だと分かりにくいので、前回とは違い、ノードとAPIとパラメータ部分をそれぞれ変数に格納して+記号で文字連結しました。
テストネットのアドレス「TCJC5VFBIYF5TKEUS273XS7IXUKJ36I3JCJQ7WOH」のアカウントデータを「/account/get」のAPIで取得しています。

```python
node = 'http://104.128.226.60:7890' #テストネットのノードです
api = '/account/get'
parameter = 'address=TCJC5VFBIYF5TKEUS273XS7IXUKJ36I3JCJQ7WOH'
url = str(node + api + '?' + parameter)

r = requests.get(url).json()
```
NISから受け取ったアカウントデータを表示していますが、json.dumps使ってスペーつ4つ分のインデントを付けて整形しています。

```python
print(json.dumps(r,indent=4))
```
json.dumpsを使わず、インデントを付けないで表示するとどうなるか以下に例を出しました。1行にずらっと並んでいるので見た目分かりにくいですよね。
人間が見るときは分かりにくいのであって、コンピュータには関係ないので、プログラムで扱い場合はインデント等は付けなくて良いと思います。

```json:json
{'account': {'balance': 82700000, 'multisigInfo': {}, 'harvestedBlocks': 0, 'vestedBalance': 24378510, 'label': None, 'importance': 0.0, 'address': 'TCJC5VFBIYF5TKEUS273XS7IXUKJ36I3JCJQ7WOH', 'publicKey': '756317d797f742b695cece76aa74ecd47305b48d5158c6dab44a48592de0325e'}, 'meta': {'status': 'LOCKED', 'cosignatories': [], 'cosignatoryOf': [], 'remoteStatus': 'INACTIVE'}}
```

#サンプル2:XEMの枚数を表示
##コード
実行環境が無い方はpaizaで試せます。
https://paiza.io/ja

```python:Python3
import requests
import json

node = 'http://104.128.226.60:7890' #テストネットのノードです
api = '/account/get'
parameter = 'address=TCJC5VFBIYF5TKEUS273XS7IXUKJ36I3JCJQ7WOH'
url = str(node + api + '?' + parameter)

r = requests.get(url).json()

print(r['account']['balance'])
```

##結果の例
XEMの枚数が取得できます。
小数点が入っていないので、

82700000

が返ってきたとすれば

82.700000 XEM

という意味です。

##解説
「/account/get」を使って、アカウントメタデータペア(AccountMetaDataPair)というアカウント情報のJSONデータが取得しました。
そのJSONデータの中でも以下の2つに分かれます。

・account: アカウント情報(AccountInfo)
・meta: アカウントメタデータ(AccountMetaData)

XEMの枚数はaccountのbalanceにあるため、XEMの枚数取得は以下の書き方になります。

```python
print(r['account']['balance'])
```
>![スクリーンショット 2018-03-11 22.54.46.png](https://qiita-image-store.s3.amazonaws.com/0/242994/23b03212-2e67-727b-8cce-d9a4c13d967a.png)
>![スクリーンショット 2018-03-11 22.55.50.png](https://qiita-image-store.s3.amazonaws.com/0/242994/b2ab2d72-6391-0c3d-e9a7-2f09821ec6e0.png)
>https://www.pr1sm.com/crypto-coin/nem-nis-api-documentation-in-japanese/#accountMetaDataPair

#結果の値について
以下に詳細が記述されています。
https://www.pr1sm.com/crypto-coin/nem-nis-api-documentation-in-japanese/#accountMetaDataPair
（数が多くてしばらくここの説明は空白にしておこう。。。）
##meta(アカウントメタデータ)
###status
###remoteStatus
###cosignatoryOf
###cosignatories
##account(アカウント情報)
###vestedBalance
###address
###importance
###publicKey
###harvestedBlocks
###multisigInfo
###balance
###label

#次回
[Python3でNEMのAPIを叩く-005-XEMの価格を日本円で表示する
](https://qiita.com/oden_umai/items/10da8b59a9b0091505c3)