Hana道場【師範】のブログ

IchigoJamの徹底解説ブログ

【IchigoJamとGASでIoT入門(2)】GETリクエストのパラメータでGmailの本文の内容を選択する

前回の記事では、GETリクエストを送ると自動でGmailを送るウェブアプリをGASで作成しました。
hanadojo-sihan.hatenablog.com

前回は入門ということで、シンプルなプログラムにするため1つの本文しか送りませんでしたが、
今回は、送るメール本文を複数選択できるようなアプリにアップデートします。

目次

HTTP通信について


HTTPは「HyperText Transfer Protocol」の略で、クライアントとサーバーの間でハイパーテキストを転送するための通信プロトコルです。

ウェブサイト(アプリ)を利用する際、自分のパソコンからwebサーバーに「リクエスト」を送っています。
今回は「GETメソッド」という方法でGASで作ったウェブアプリにリクエストを送ります。

パラメータについて

GETメソッドではURLの末尾に「パラメータ」を記述することで、値を送ることができます。

<GETメソッドによるパラメータの記述>
https://script.google.com/(中略)/exec?パラメータ名=値
プロトコル ②URL ③パラメータ

  • 1つのパラメータを送る場合:?パラメータ名=値
  • 複数のパラメータを送る場合:?パラメータ名1=値1&パラメータ名2=値2&・・・


パラメータ名は任意で決めることができます。
今回は「msg」というパラメータ名を使うことにします(messageの略)。
値は「1」,「2」,「3」の3種類の値を送る想定でつくります。

GASのプログラム

プログラム全体

// GETリクエストに対する処理
function doGet(e){
  let message = e.parameter.msg; //パラメータ名msgの値を取得
  sendMessage(message); //sendMessage関数に変数messageを渡す
  return ContentService.createTextOutput("'sended.");
} 

// 送信するメール内容の決定
function sendMessage(message) {
  let address = '*******@gmail.com'; //送信先メールアドレス
  let subject = "***";//件名
  let body;
  if(message === "1"){
    body = "迎えに来て!";
  } else if(message === "2"){
    body = "行ってきます!";
  } else if(message === "3"){
    body = "ただいま!";
  }
  GmailApp.sendEmail(address, subject, body);
}  
解説1)パラメータの処理
// GETリクエストに対する処理
function doGet(e){
  let message = e.parameter.msg; //パラメータ名msgの値を取得
  sendMessage(message); //sendMessage関数に変数messageを渡す
  return ContentService.createTextOutput("'sended.");
} 

doGet関数はウェブアプリにGETリクエストがあった時に動作する関数です。doGet引数の「e」にパラメータに関するデータが格納されています。
「e.parameter.パラメータ名」で値を受け取ることができます。
今回はGETリクエストで送った値をmessageという変数に格納し、sendMessage関数に実引数として渡します。

解説2)送るメール本文の決定処理
// 送信するメール内容の決定
function sendMessage(message) {
  let address = '*******@gmail.com'; //送信先メールアドレス
  let subject = "***";//件名
  let body;
  if(message === "1"){
    body = "迎えに来て!";
  } else if(message === "2"){
    body = "行ってきます!";
  } else if(message === "3"){
    body = "ただいま!";
  }
  GmailApp.sendEmail(address, subject, body);
}  

「1」の値を受け取った時には「迎えに来て!」
「2」の値を受け取った時には「行ってきます!」
「3」の値を受け取った時には「ただいま!」という本文のメールを送るプログラムにしました。

※値は文字列として受け取るので、ifの条件式では""で囲んでいます。

それでは、デプロイしてウェブアプリを公開しましょう。

ブラウザのアドレスバーにウェブアプリのURLを貼り付け、そのURLに続けて「?msg=3」を加えてEnterキーを押しましょう。
「ただいま!」とメールが届けば成功です!

IchigoJamからウェブアプリにGETリクエスト(パラメータ付き)を送る

IchigoJam webから送ってみる


IchigoJam webの使い方は前回のブログを参照)
URLの末尾に「?msg=3」をつけて実行してみましょう。
「ただいま!」とメールが届けば成功です!

10 CLS
20 INPUT "ムカエニキテ:1 イッテキマス:2 タダイマ:3 ",A
30 ?"MJ GETS script.google.com/(中略)/exec?msg=";A

INPUT命令で1〜3どれかを打ち込んでエンターを押せば、そのメッセージがメール本文として送れるようになります!
INPUT命令で変数Aに1〜3の数が代入され、行番号30の最後に「;A」とすることで、パラメータとしてURLに付加することができます。

(行番号20の入力待ち画面)

(2と入力した時)

今回は3つのメッセージ(1〜3)を用意しましたが、もっと多くのメッセージを用意することができますね。
これでメールアドレスを持っていないお子さんもIchigoJamからメールを送れるようになります!

IchigoJam 実機から「キーボード・モニターなし」でGmailを送る

送るメッセージ選択をINポートとジャンパー線1本を使って行う方法を紹介します。

<つくるプログラム>
IN1とGNDを接続 → 1番のメッセージを送る(パラメータとして1を送信)
IN2とGNDを接続 → 2番のメッセージを送る(パラメータとして2を送信)
IN4とGNDを接続 → 3番のメッセージを送る(パラメータとして3を送信)
IN1、IN2、IN4は初期状態は「1」で、GNDを接続することで「0」を入力します。
※IN3は初期状態が0のため今回は使用しません

プログラム

10 V=0
20 IF IN(9)=0 CONT
30 FOR I=1 TO 4
40 IF I=3 I=4
50 IF IN(I)=0 V=I
60 NEXT
70 IF V=4 V=3
80 IF V=0 GOTO30
90 ?"MJ GETS script.google.com/(中略)/exec?msg=";V
100 BEEP 20,180

プログラム解説

10 パラメータの値を格納する変数Vを用意
20 もし BTNポートにGNDが接続されているときは この行を繰り返す
30 IN1〜4の状態を調べるためのFOR文(変数IはINのポート番号に対応)
40 IN3ポートは使用しない
50 INポートが0の時(GNDに接続されている時) 変数VにINのポート番号(変数I)を格納
60 変数Iが4未満の時、行番号30に戻る
70 もし 変数Vに4が格納されている時は 変数Vに3を格納する
80 もし 変数Vに何も格納されていない時は 行番号30に戻る
90 変数Vの値をパラメータとしてウェブアプリにGETリクエストを送る
100 音を鳴らして終了

実行方法
上記のプログラムを0番にSAVEし、電源を切りましょう。

SAVE 0

ジャンパー線をBTNポートとGNDポートに接続しましょう。
BTN-GNDを接続すると、プログラムの自動実行の際にIchigoJamのボタンを押しておく必要がなくなります。
(また、プログラムを使用しない時のジャンパー線の収納場所として使えます)

IchigoJamの電源を入れるだけで、0番に保存したプログラムが自動実行します。


BTNポートにさしてあるジャンパー線を抜き、IN1かIN2かIN4に差し込みましょう。
これで、IchigoJamだけ(キーボード、モニターなし)でGmailの本文を選択し送ることができます!

まとめ

今回は、GETメソッドというリクエスト方法を使って、パラメータをウェブアプリに送る方法を紹介しました。そしてウェブアプリ側で受け取ったパラメータによって、送るメールの本文内容を変えるGASのプログラムも作成しました。
実践的なHTTP入門としてもご利用いただければ幸いです。
次回はタイピングゲームのスコアをパラメータとして受け取り、スプレッドシートに入力するウェブアプリを作成します。
【IchigoJamとGASでIoT入門(3)】タイピングゲームのスコアをスプレッドシートにセルに入力する - Hana道場【師範】のブログ


IchigoJam IoTシリーズ>※GAS以外の方法

CC BY shoichi1031da / @shoichi1031da

twitter.com