IchigoJamで"UTF-8変換"してLINEを送る方法<その2>【IchigoJam × MixJuice × IFTTT】
IchigoJamで文字列をUTF-8変換して、文字化けせずLINEにカタカナ(日本語)のメッセージを送るプログラムを紹介します!
IFTTT でLINEにメッセージを送る方法は<その1>のブログをご覧ください。
今回挑戦するのはこちら↓
#IchigoJam × #MixJuice × #IFTTT でLINEにメッセージを送ってみました!動画では「ムカエニキテ」と送っています。
— 初代 *Hana道場【師範】 (@shoichi1031da) October 11, 2020
これでスマホを持っていない小学生でもLINEができる!? pic.twitter.com/zF6tovZnTE
IchigoJamBASICでUTF-8変換しています。
【目次】
【プログラム】
5 CLS:POKE#1E03,1,34:INPUT S
10 ?"MJ GETS maker.ifttt.com/trigger/イベント名/with/key/Webhoocksのkey?value1=";
20 FOR I=0 TO LEN(S)-1
30 C=ASC(S+I):D=ASC(S+I+1)
40 IF C<160 ?STR$(S+I,1);:GOTO290
50 A=#82
60 IF C>176&&C<182 [I]=#A2+2*C%177
70 IF C>181&&C<192 [I]=#AB+2*C%182
80 IF C>191 IF C=192 [I]=#BF ELSE A=#83:[I]=#81+3*(C=194)+5*(C=195)+7*(C=196)
90 IF C>196&&C<202 [I]=#8A+C%197
100 IF C>201&&C<207 [I]=#8F+3*C%202
110 IF C>206&&C<212 [I]=#9E+C%207
120 IF C>211&&C<215 [I]=#A3+2*C%212
130 IF C>214&&C<220 [I]=#A9+C%215
140 IF D=222 [I]=[I]+1:F=1:IF C=192 [I]=#80:A=#83
150 IF D=223 [I]=[I]+2:F=2
160 IF C=220 [I]=#AF
170 IF C=166 [I]=#B2:A=#83
180 IF C=221 [I]=#B3
190 IF C>166&&C<172 [I]=#A1+2*C%167
200 IF C=172 [I]=#A3:A=#83
210 IF C=173 [I]=#A5:A=#83
220 IF C=174 [I]=#A7:A=#83
230 IF C=175 [I]=#83:A=#83
240 IF C=176 [I]=#BC:A=#83
250 IF C=164 [I]=#81:A=#80
260 IF C=161 [I]=#82:A=#80
270 ?"%E3%";HEX$(A);"%";HEX$([I]);
280 IF F I=I+1:F=0
290 NEXT
300 ?:LC0,10:?”>”;STR$(S):?
5,10,300行目はWebhoocksにHTTP通信してメッセージを送っている部分です。
<その1>で解説しています。
【実行画面】
↓Enterを押すと
文字化けせず、ちゃんと日本語が送れました!
【プログラム解説】
①文字列入力、HTTP通信(GETメソッド)
5 CLS:POKE#1E03,1,34:INPUT S
10 ?"MJ GETS maker.ifttt.com/trigger/イベント名/with/key/Webhoocksのkey?value1=";
<その1>を参照してください。
②文字列のUTF-8変換
UTF-8変換サイトで変換(エンコード)の実験をしてみましょう。
<変換例>
ア→%E3%82%A2 イ→%E3%82%A4 ウ→%E3%82%A6
カ→%E3%82%AB ガ→%E3%82%AC キ→%E3%82%AD
ハ→%E3%83%8F バ→%E3%83%90 パ→%E3%83%91 ヒ→%E3%83%92
16進数82を2つ目の値、A2を3つ目の値と呼ぶことにします。
20 FOR I=0 TO LEN(S)-1 文字列の長さ分くりかえし
30 C=ASC(S+I):D=ASC(S+I+1) 変数Cは現在の文字のコード、変数Dは次の文字のコード
40 IF C<160 ?STR$(S+I,1);:GOTO290 カナ以外の文字はUTF-8変換する必要なし
50 A=#82 2つ目の値
60 IF C>176&&C<182 [I]=#A2+2*C%177 ア行の3つ目の値を配列に代入
70 IF C>181&&C<192 [I]=#AB+2*C%182 カ行、サ行の3つ目の値を配列に代入
80 IF C>191 IF C=192 [I]=#BF ELSE A=#83:[I]=#81+3*(C=194)+5*(C=195)+7*(C=196) タ行の3つ目の値を配列に代入(「ダ」以降、2つ目の値が#83になる)
90 IF C>196&&C<202 [I]=#8A+C%197 ナ行
100 IF C>201&&C<207 [I]=#8F+3*C%202 ハ行
110 IF C>206&&C<212 [I]=#9E+C%207 マ行
120 IF C>211&&C<215 [I]=#A3+2*C%212 ヤ行
130 IF C>214&&C<220 [I]=#A9+C%215 ラ行
140 IF D=222 [I]=[I]+1:F=1:IF C=192 [I]=#80:A=#83 濁点の場合、3つ目の値を1増やす
150 IF D=223 [I]=[I]+2:F=1 半濁点の場合、3つ目の値を2増やす
160 IF C=220 [I]=#AF 「ワ」
170 IF C=166 [I]=#B2:A=#83 「ヲ」
180 IF C=221 [I]=#B3 「ン」
190 IF C>166&&C<172 [I]=#A1+2*C%167 小文字のア行
200 IF C=172 [I]=#A3:A=#83 小文字の「ヤ」
210 IF C=173 [I]=#A5:A=#83 小文字の「ユ」
220 IF C=174 [I]=#A7:A=#83 小文字の「ヨ」
230 IF C=175 [I]=#83:A=#83 小文字の「ツ」
240 IF C=176 [I]=#BC:A=#83 「ー」
250 IF C=164 [I]=#81:A=#80 「、」
260 IF C=161 [I]=#82:A=#80 「。」
270 ?"%E3%";HEX$(A);"%";HEX$([I]); URLにUTF-8変換した文字列を付加
280 IF F I=I+1:F=0 濁点、半濁点の場合は1文字飛ばす
290 NEXT 文字列全て付加するまでくりかえし
IchigoJamのカナ表記で気をつける必要があるのは、濁点と半濁点です。
「ガ」で1文字ではなく、「カ」と「゛」の2文字使用しています(半濁点も同様)。
濁点「゛」の文字コードは222、半濁点「゜」の文字コードは223です。
<濁点と半濁点の処理>
30行目:変数Dで常に次の文字に、濁点と半濁点がないか調べる
140行目:もし 次の文字が濁点なら 現在のUTF-8の値に1増やす(ダだけ2つ目の値に影響あり)
150行目:もし 次の文字が半濁点なら 現在のUTF-8の値に2増やす
280行目:もし 次の文字が濁点or半濁点なら それを飛ばして次の文字へ
例えば
「カ゛」なら「カ」の3つ目の値に1増やして(ガの値にして)、次の文字「゛」は飛ばします。
「ハ゜」なら「ハ」の3つ目の値に2増やして(パの値にして)、次の文字「゜」は飛ばします。
プログラムっぽい処理はそれだけで、その他の文字のUTF-8変換はゴリ押しです!
③送信した文字列の表示(おまけのチャットっぽさ)
★完成★
音やチャットっぽさはご自由に演出してください。
<その3>でインターン(呼び鈴)を押すとLINEが届く「IoTインターホン」の紹介もあります。
IchigoSodaでWiFi環境のない場所でもLINEを送れるサービスを実装中のHana道場インターン生がいます。
しかもGPSで自分の位置情報も送れちゃう!?
完成をお楽しみに。
福野さんや師範に死ぬほど助けてもらったので、生まれて初めてのIoTが出来そう pic.twitter.com/KGZv4Z3EmQ
— 水野(もしゃ) (@macoto_1655) 2020年10月1日
何かエラーや文字化けがありましたら、Twitterにてご指摘ください!
CC BY shoichi1031da / @shoichi1031da