20
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[toioからあなたへ届け!] toio.js から LINE Notify ついでに英語のお勉強とPPAP召喚

Last updated at Posted at 2021-12-22

この記事は LINEDC アドベントカレンダー12/24(木) のものでもあります。

・ LINEDC アドベントカレンダー

toioからLINE Notify

なぜこのテーマにしたか?
単純にやってみたかったからです笑
あとtoio.jsを使ってみたかったのと、ついでにKONAMIコマンドを発火したかった!

イメージ

image.png

toio.js

Node.jsを使って toio を操作できるアレです。

サンプルが3つ入ってます。

  • id-reader
  • keyboard-control
  • chase

どれも簡単に動かせるので、ちょっとした仕組みを理解するにはとても分かりやすいです。

id-reader

今回は id-reader のサンプルに手を加えました。
id-readerは、toio専用「簡易カード」のマットのどの位置にキューブが置かれたか?がわかるので、キューブを置いた場所によって処理を変えられます。

こんな感じでキューブを置いた位置を検知できます。

[STD ID] { standardId: 3670320, angle: 95 }
[STD ID] { standardId: 3670321, angle: 100 }
[STD ID] { standardId: 3670322, angle: 174 }

ちなみに「開発用プレイマット」では以下のように取得できます。

[POS ID] { x: 124, y: 161, angle: 100, sensorX: 132, sensorY: 155 }
[POS ID] { x: 120, y: 197, angle: 88, sensorX: 127, sensorY: 189 }
[POS ID] { x: 119, y: 248, angle: 88, sensorX: 126, sensorY: 240 }

簡易カードマットの各マス目のIDを調べねば

ということで簡易カードマットのIDを地道にログで確認しようと思ったけど、そういえば公開されてました!素敵!

LINE Notifyの準備

無事にマス目ごとのIDを検知できるようになったので、LINE Notifyに通知を送れば良いのですが、そもそもLINE Notifyとは?

LINE Notifyを使うことで、何かをトリガーにLINEのトークルームへメッセージを通知することができます。通常のLINE botの場合、ユーザーからのメッセージに対して応答する形が基本ですが、Notifyを使うことでLINEが提供する公式アカウント"LINE Notify"から通知が届きます。

1 LINE Notifyにログイン

スクリーンショット 2021-12-22 9.57.08.png

2 アクセストークンの発行

スクリーンショット 2021-12-22 9.59.21.png

3 トークン名と誰に通知を送るかを設定(グループに対する通知も可能)

スクリーンショット 2021-12-22 9.59.55.png

4 発行されたトークンをコピー

スクリーンショット 2021-12-22 10.00.39.png

id-readerでとりあえずNotify!

${LINE_TOKEN} は、上記で発行された文字列をセットします。

id-reader/index.js
    .on('id:standard-id', data => {
      if (isTouched) {
        return;
      }
      isTouched = true;
      console.log('[STD ID]', data);

      const params = new URLSearchParams();
      params.append('message', data.standardId);

      axios(
        {
          method: 'post',
          url: 'https://notify-api.line.me/api/notify',
          headers: {
            Authorization: `Bearer ${LINE_TOKEN}`,
            'Content-Type': 'application/x-www-form-urlencoded',
          },
          data: params,
        }
      ).then((res) => {
        console.log(res.data);
      }).catch((err) => {
        console.error(err);
      });
    })

簡易カードの「I」の位置にtoioキューブを置いたら、無事にNotifyが届きました!

スクリーンショット 2021-12-22 10.33.38.png

あとはIDごとに送信したいメッセージを設定

こんな感じで動きました。
対応するマス(ID)を読み込んだ時は音を鳴らすようにしてIDを貯めておいて、「=」 を読み込んだらNotifyを飛ばしてます。KONAMIコマンドも発動!

・スタンプを送信する場合

パッケージ識別子(stickerPackagedId)とスタンプID(stickerId)を指定して送信。message パラメータは必須なので何かしら文字列をセットします。

const params = new URLSearchParams();
params.append('message', "スタンプ");
params.append('stickerPackageId', 6325);
params.append('stickerId', Sticker6325[touchId]);

途中で知ったこと

querystringdeprecated になっていた。代わりに URLSearchParams を使うとのこと

更新(英単語翻訳とPPAP召喚)

toioで読みとったアルファベット(英単語)を、Amazon Translate に投げて翻訳する機能を追加してみました。英語の勉強を楽しくできます。

ついでにPPAP召喚したくなったので召喚しました。

イメージ

image.png

AWS側

Lambdaのランタイムは、Python3.7を指定。 toio.js から API GatewayのAPIにリクエストし、input にtoioで読み取った英単語が入ってます。translateをかけて日本語にして返却。

import json
import boto3

translate = boto3.client('translate')

def lambda_handler(event, context):

    input = event['queryStringParameters']['input']

    response = translate.translate_text(
        Text=input,
        SourceLanguageCode='en',
        TargetLanguageCode='ja')
    
    output = response.get('TranslatedText')

    return {
        'statusCode': 200,
        'body': json.dumps({
            'output': output
        }),
        'isBase64Encoded': False,
        'headers': {}
    }

こんな感じで動作

toioでAPPLEと読み込み、翻訳結果をNotify。ちゃんと「林檎」と翻訳されてますね。PENも同様に「ペン」と。
「PEN」+「PINAPPLE」+「APPLE」+「PEN」でPPAP召喚!

20
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?