こんにちは。ビットコおじさんだよ。

NEM(XEM)はNanoWalletに10,000XEMを入れておくだけでPOS(プルーフオブステーク)でハーベスティング報酬がもらえるというホルダーには嬉しい機能があるよ。
だけど、いつハーベスティングされるのか?ってのが全然わからない。

1週間に1回の時もあるし、2日連続でハーベスティングされることもあるよ。2ヶ月ぐらい何もない時もある。2ヶ月もハーベスティングがないっていうのは、さすがにおかしい?と思ったらサーバが落ちてたとかもある。

しかも、いちいちPCのNanoWalletをチェックしないとサーバの状況がわからない。
ハーベスティングが有効になっているかどうかを監視するアプリを誰か作って!って言ってたけど、誰も作ってくれないので、おじさん自分で作った。
(関連記事→「ネム(XEM)のハーベスティングが止まっていないかをAPIで監視する」)

そしてNEMのAPIを極めつつあるおじさん。
極めつつっていうのは言いすぎたけど、今回はなんと!!APIを使ってハーベスティングがあったらメールでお知らせしてくれる方法を大公開!
これで、いちいちハーベスティングをチェックするのにNanoWalletを開かなくてもいいよ!API超便利!!

てことで、毎度おなじみのGAS(Google Apps Script)に頼るよ。
がすてなーに?っていう人は、関連記事を読んでね。(東京ガスとは関係ないよ。)

関連記事→「API入門(1)取引所のリアルタイムレートをゲット!

まずは、Googleドライブを開いて、「新規」から「Google Apps Script」を追加するよ。

gas28

今回も、WEBアプリケーションじゃないのでHTMLもいらないから、「myFunction」のままで大丈夫。
ソースはこんな感じ(↓)。
function myFunction() {
  // アカウント
  var account_address = "自分のNEMアドレス";
  // ノード
  var sn = "使っているノード";
  // メール設定
  var mail_to = "自分のメールアドレス";
  var title = "ハーベスト速報";
  
  try {
    var sn_url = "http://" + sn + ":7890/account/harvests?address=" + account_address;
    var response = UrlFetchApp.fetch(sn_url, { muteHttpExceptions:true });
    var json = JSON.parse(response.getContentText());

    var timeStamp = PropertiesService.getScriptProperties().getProperty('timeStamp');
    if(json["data"][0] && json["data"][0]["timeStamp"] > timeStamp)
    {
      PropertiesService.getScriptProperties().setProperty("timeStamp", json["data"][0]["timeStamp"]);
      MailApp.sendEmail(mail_to, title, "ハーベストがありました。\nハーベスト報酬は" + String(json["data"][0]["totalFee"] / 1000000) + "XEMです。");
    }   
  } catch(err) {
    // DNSエラーなどでノードが見つからないとき  
    MailApp.sendEmail(mail_to, title, "ノードが見つかりません。\nNanoWalletを確認してください。");
  }
}
自分のNEMアドレス」と、「自分のメールアドレス」、「使っているノード」を書き換えてね。

※ハーベスト実績がないとエラーになるバグがあったので修正しました。
17行目:
if(json["data"][0]["timeStamp"] > timeStamp)

if(json["data"][0] && json["data"][0]["timeStamp"] > timeStamp)
ツイッターで教えてくれた@tayoshi10さんありがとう!

自分のNEMアドレスは、NanoWalletを開いてメニューの「送信」をクリックして、「請求書」タブを開いたら表示される「支払先」に表示されているよ。(※アカウントのクリックで表示されるNEMアドレスはハイフン「-」が入るのでコピペするとエラーになるため、こちらに修正しました。)

nanowallet4
引用元:NanoWallet

自分のメールアドレスはハーベスティングの通知をしたいメールアドレスを入力。
自分の使っているノードは、右上の「ノード」をクリック。

nanowallet2
引用元:NanoWallet

クリックしたら出てくるウィンドウに、現在使っているノードが表示されているよ。

nanowallet3
引用元:NanoWallet

ソースを書き換えたら保存を押す。
名前を適当に付けてね。
おじさんは「ハーベスト速報」にしておいた。

gas37

後は、このハーベスト速報を定期的に動かすだけ。
プロジェクトのトリガーアイコンをクリックして、トリガーを設定するよ。

gas38

ハーベスティングは細かくチェックしたいので、おじさんは「1時間ごと」にしたよ。
時間を選んだら「保存」をクリック。

gas39

承認が必要って言われる。

gas40

実行するアカウントを選択するよ。

gas41

「許可」をクリック。

gas42

設定はこれで完了!

って、ちょっとまって??
前回のハーベスト状況チェッカーとトリガー設定の方法が同じだけど、これだと1時間ごとにメールが来ちゃうんじゃないの?

ふっふっふ。( ̄ー ̄)ニヤリッ

今回はGASの「PropertiesService.getScriptProperties()」っていうのを使って、最終のハーベスティングのタイムスタンプをGASのプロジェクトプロパティーに保存して、タイムスタンプが更新された時だけメールを送るようにしてあるよ。

さっそく動作確認。
一度実行をクリックすると、ハーベスト速報のメールがくるはず。

gas45

ピロピローン♪

gas46

正しく動作していたら、こんな感じでメールがくるよ。
メニューの「ファイル」から、「プロジェクトのプロパティ」を確認してみよう。

gas43

「プロジェクトのプロパティ」で「スクリプトのプロパティ」を見てみると、「timeStamp」っていうプロパティーにAPIから取得したタイムスタンプが記録されているね。

gas44

これと、APIのタイムスタンプを比較して、APIの方が新しかったら、新たなハーベスティングがあったと判断してメールを送るようにしてあるよ。

メールアドレスは間違えないようにね!

前回のデリゲートハーベスティングのチェックは、有効か無効かだけの判断だったし、無効になっていれば何回もメールを送る仕様にしてたけど、ハーベスティングは何回も同じメールが来たらうっとおしいので、こんな仕様にしてみたよ。
なので、1分でも早くハーベスティングが確認したい!!って人はトリガーを1分とかにしても大丈夫。

でも、GASのUrlFetchAppは1日の呼び出し回数が20,000回っていう制限があって、制限を超えるとエラーになっちゃうから、他にもAPIを参照するようなスクリプトを同じアカウントで動かしているときは呼び出し回数に気を付けてね。

それにしても、NEMのAPIは簡単にいろいろできて楽しいね!
みんなもNEMやNanoWalletを使っていたらAPIで遊んでみて。

(゚∀゚)

おじさんはAPIを使ってPOIを上げるような何かが作れないか画策中・・・。

じゃあまた。

 ← 応援ポチっとお願いします。

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

bitFlyer ビットコインを始めるなら安心・安全な取引所で