- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2018-01-03T02:02:48+09:00","","")
#navi(../)
* NEM(XEM)のハーベストの有効・無効状態を取得するサンプルコード(PHP) [#cdb090dc]
NEM(XEM)のハーベストをしていると、時々ハーベスト状態が無効となっていることがあります。~
毎回Nano Walletを起動して確認するのも面倒?ですし、今回紹介するサンプルコードを自動実行し、~
ハーベストが無効になっていた場合にメールを送るようなこともできるようになります。~
以下にPHPによるサンプルコードおよび実行結果を記します。
#contents
#htmlinsert(cc-top.html)
* 参考サイト [#we0a3eea]
-[[ネム(XEM)のハーベスティングが止まっていないかをAPIで監視する:ビットコおじさんの仮想通貨情報局>http://btcojisan.info/archives/5297943.html]]
-[[NEM APIマニュアル 3.1.4.アカウントステータスのリクエスト>https://www.pr1sm.com/crypto-coin/nem-nis-api-documentation-in-japanese/#requesting-the-account-status]]
* 準備 [#gb83a15d]
本記事で紹介するサンプルコードを実行するにあたり、以下の2つの値を準備する必要があります。
+リモートアカウント
+デリゲート(委任先)ノード
** リモートアカウントの取得手順 [#gc9408a1]
Nano Wallet 2.0.14 のスクリーンショットを使い説明します。
+Nano Walletにログインしてください。
+サービス→デリゲートアカウント(委任アカウント)管理をクリックしてください。
#ref(01.png)
#br
+デリゲートアカウントの有効化/無効化をクリックしてください。
+以下のスクリーンショットのようにリモートアカウントが表示されます。
#ref(03.png)
** デリゲート(委任先)ノードの取得手順 [#i81ef23e]
上記ですでにNano Walletにログイン済なので一部割愛します。
+デリゲートハーベスティングを開始/停止をクリックします。
+以下のスクリーンショットのようにデリゲート(委託先)ノードが表示されます。
#ref(04.png)
* ハーベスト状態確認サンプルコード [#r8278d07]
ハーベスト状態を確認するサンプルコードは2つのファイルから構成されています。
+ harvest.conf.php~
上記で取得した、リモートアカウントとデリゲート(委任先)ノードを設定します。
+ harvest_status.php~
デリゲート(委任先)ノードにハーベスト状態を問い合わせるサンプルコードになります。
** harvest.conf.php [#j683dd78]
本サンプルコードでは、リモートアカウントとデリゲート(委任先)ノードを設定します。
$DELEGATE_NODEと$REMOTE_ACCOUNTに上記で取得した値を設定してください。~
#ref(harvest.conf.php)
<?php
$DELEGATE_NODE="";
$REMOTE_ACCOUNT="";
-例~
リモートアカウントがABCDEFG1234567890, デリゲート(委任先)ノードがfoo.nodeの場合
<?php
$DELEGATE_NODE="foo.node";
$REMOTE_ACCOUNT="ABCDEFG1234567890";
** harvest_status.php [#l9f43377]
本サンプルコードでデリゲート(委託先)ノードにハーベスト状態を問い合わせします。
#ref(harvest_status.php)
<?php
// API: Requesting the account status
// https://nemproject.github.io/#requesting-the-account-status
// status
// UNLOCKED : Harvest enabled.
// LOCKED : Harvest disabled.
// DELEGATE NODE and REMOTE ACCOUNT config file
$NEM_HARVEST_CONF="./harvest.conf.php";
// proxy settings
$proxy = "";
$proxy_port = "";
if (!file_exists($NEM_HARVEST_CONF)) {
fputs(STDERR, "[ERR] " . $NEM_HARVEST_CONF . " file not found." . PHP_EOL);
die(1);
}
require_once($NEM_HARVEST_CONF);
if (empty($DELEGATE_NODE) or empty($REMOTE_ACCOUNT)) {
fputs(STDERR, "[ERR] Please check \$DELEGATE_NODE and \$REMOTE_ACCOUNT value." . PHP_EOL);
die(2);
}
// API URL : <DELEGATE NODE>:7890/account/status?address=<REMOTE ACCOUNT>
$url = $DELEGATE_NODE . ":7890/account/status?address=" . $REMOTE_ACCOUNT;
$curl = curl_init();
if ($curl == FALSE) {
fputs(STDERR, "[ERR] curl_init(): " . curl_error($curl) . PHP_EOL);
die(1);
}
// curl set options
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
// set proxy server settings
if (!empty($proxy) && !empty($proxy_port)) {
curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, 1);
curl_setopt($curl, CURLOPT_PROXY, $proxy . ":" . $proxy_port);
curl_setopt($curl, CURLOPT_PROXYPORT, $proxy_port);
}
// call status api
$response = curl_exec($curl);
if ($response == FALSE) {
fputs(STDERR, "[ERR] curl_exec(): " . curl_error($curl) . PHP_EOL);
die(1);
}
curl_close($curl);
// json decode
$json_decode = json_decode($response, true);
if ($json_decode == NULL) {
fputs(STDERR, "[ERR] json_decode(): " . json_last_error_msg() . PHP_EOL);
die(1);
}
// check response
if (!array_key_exists("status", $json_decode)) {
fputs(STDERR, "[ERR] unknown response: " . print_r($json_decode, TRUE) . PHP_EOL);
die(1);
}
// check harvest status
$status = $json_decode["status"];
switch ($status) {
case "UNLOCKED":
echo "enabled" . PHP_EOL;
break;
case "LOCKED":
echo "disabled" . PHP_EOL;
break;
default:
fputs(STDERR, "[ERR] unknown status: " . $status . PHP_EOL);
die(1);
}
exit(0);
* 実行例 [#vf741229]
本サンプルコードを実行した時の出力です。
-ハーベストが有効の場合
$ php harvest_status.php
enabled
-ハーベストが無効の場合
$ php harvest_status.php
disabled
以上、NEX(XEM)のハーベスト状態を確認するサンプルコードでした。
#htmlinsert(cc-btm.html)