#author("2018-01-03T02:02:48+09:00","","")
#author("2018-01-03T02:18:57+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]]

* NEM(XEM)の取引ができる日本の取引所 [#q9546101]
- &htmlinsert(zaif.html);
- &htmlinsert(coincheck.html);


* 準備 [#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)



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS