LoginSignup
9
6

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-03-14

はじめに

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

使うAPI

/account/get を使います。
パラメータにはNEMのアドレスを入れます。

スクリーンショット 2018-03-11 18.50.38.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://nemproject.github.io/#requesting-the-account-data

サンプル1:全データを表示

コード

実行環境が無い方はpaizaで試せます。
https://paiza.io/ja

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
{
    "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
※画像はNanoWallet ver2.1.2 mac版

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

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

解説

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

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つ分のインデントを付けて整形しています。

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

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

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

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の枚数取得は以下の書き方になります。

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

スクリーンショット 2018-03-11 22.54.46.png
スクリーンショット 2018-03-11 22.55.50.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の価格を日本円で表示する

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6