#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)