LoginSignup
3
1

More than 1 year has passed since last update.

[LINE-Splatoon3Bot] #1 Spla3APIから情報を取得・LINEへ送信

Last updated at Posted at 2022-10-23

目次

1.はじめに
2.前回のおさらい
3.GASでjsonを扱う
4.SplaAPIを使ってみる
5.実際にコードを書いてみる
6.さいごに
7.今回のコード
8.参考など

1. はじめに

この記事では先日宣伝も含め投稿した、[LINEBot] Splatoon3の多機能Botを作った件のステージ情報取得について解説します。
(この記事はLINEMessagingAPIを使用できることを前提とし、筆者はWindows10・GoogleAppsScriptを使用しています。)

2. 前回のおさらい

Botについて紹介を主にしました。
こちらから友達追加などできますのでよければ。(友達追加すると筆者が泣いて喜びます。)
友達追加
公式サイト

3. GASでjsonを扱う

そもそもjsonとはなにか。

JSON
{
 "key1" : value1,
 "key2" : xxxxx,
 "key3" : yyy
}

こういうやつです。
まずはjsonのデータを取得します。

function myFunction() {
    var url = "https://xxxxxxxx/yy.json";
    var json = UrlFetchApp.fetch(url).getContentText();  
    var jsonObject = JSON.parse(json); 
  }

簡単に解説をすると、"https: //xxxxxxxx/yy.json" を取得して、そのデータをgasで扱えるように交換しています。(パース)
これでjsonの読み込みができたので、ここから情報を取得します。

//先ほどの手順のようにjsonを読み込む
Logger.log(jsonObject);

これでjsonのデータは出力されます。
ただ、全部出力されてもあまり使えません。そこで、ほしい値だけを取得します。

//先ほどの手順のようにjsonを読み込む
Logger.log(jsonObject[0]['test']); //基本-0番目の配列の、testを取得
Logger.log(jsonObject[1]['test']); //1番目の配列の、testを取得
Logger.log(jsonObject['Name'][key1]); //Nameに格納されているkey1の値を取得
Logger.log(jsonObject['Name'][4][keys]); //Nameに格納されている4番目配列のkeysの値を取得
Logger.log(jsonObject['Name'][0][keys][value1]); //Nameに格納されている0番目配列のkeysに格納されているvalue1の値を取得
Logger.log(jsonObject['Name'][2][keys][2][values]); //Nameに格納されている2番目配列のkeysに格納されている2番目配列のvaluesの値を取得

あくまで例ですが、このように取得することができます。
ばーーっと言われてもわかんないと思うので、これを踏まえてSpla3APIを使いながら慣れていきましょう!

4. SplaAPIを使ってみる

先ほど解説した通り、

function myFunction() {
    var url = "https://xxxxxxxx/yy.json";
    var json = UrlFetchApp.fetch(url).getContentText();  
    var jsonObject = JSON.parse(json); 
  }

でjsonを取得、

//先ほどの手順のようにjsonを読み込む
Logger.log(jsonObject[0]['test']); //基本-0番目の配列の、testを取得
Logger.log(jsonObject['Name'][2][keys][2][values]); //Nameに格納されている2番目配列のkeysに格納されている2番目配列のvaluesの値を取得

で取得&出力できます。
これを使って、Spla3APIを使ってみましょう。
まずはjsonを読み込みます。
各データのjsonの取得方法についてはSpla3APIサイト内にありますのでご確認ください。
今回は現在開催中のナワバリバトルを取得します。

function myFunction() {
    var url = "	https://spla3.yuu26.com/api/regular/now";
    var json = UrlFetchApp.fetch(url).getContentText();  
    var jsonObject = JSON.parse(json); 
  }

試しに、ステージを取得してみます。

//先ほどの手順のようにjsonを読み込む
Logger.log(jsonObject['results'][0][stages][0][name]); //ステージ1

これで、ステージが取得できます。しかし、、1つしか取得できていません。
そのようなときは上で紹介した通り、このように記述します。

//先ほどの手順のようにjsonを読み込む
Logger.log(jsonObject['results'][0][stages][0][name]); //ステージ1
Logger.log(jsonObject['results'][0][stages][1][name]); //ステージ2

これでステージをすべて取得できました。
ほかの値も同様の手順で取得できます。

5. 実際にコードを書いてみる

実際にコードを書いてみましょう。
今回のコードの完成形は7.今回のコードに書いておきます。

//jsonを取得後の処理
//post_messageはあくまで例
//"\n"は改行コード
post_message = json1["results"][0]["stages"][0]["name"] + '\n' + json1["results"][0]["stages"][1]["name"];

これでステージ情報を送信することができます。
これにメッセージを加えて、

//jsonを取得後の処理
post_message = 'ナワバリバトルのステージは....\n' + json1["results"][0]["stages"][0]["name"] + '\n' + json1["results"][0]["stages"][1]["name"];

など、さらにわかりやすくできます!
応用すればもっといろいろなことができますね。さらに詳しくは次回記事で解説します。

6. さいごに

いかがでしたか?GASでのjson取得から、Spla3API実践まで書きました。次回からはこれを使ってさらにいろいろなコードを書いていきます!
お楽しみに。

友達追加
公式サイト

7. 今回のコード

TOKENには自分の取得したTOKENを張り付けて下さい。

//jsonを取得後の処理
var ACCESS_TOKEN = 'TOKEN';
var URL = 'https://api.line.me/v2/bot/message/reply'; 

function doPost(e) {
    var json = JSON.parse(e.postData.contents);
    var reply_token = json.events[0].replyToken;
    if (typeof reply_token === 'undefined') {
        return;
    }

    var user_message = json.events[0].message.text;
    var post_message = "";
    if ('コマンド' == user_message) {
        var response = UrlFetchApp.fetch("https://spla3.yuu26.com/api/regular/now"); 
        var json1=JSON.parse(response.getContentText());
        post_message = '★ステージ\n' + json1["results"][0]["stages"][0]["name"] + '\n' + json1["results"][0]["stages"][1]["name"];
    }
}
    UrlFetchApp.fetch(URL, {
        'headers': {
            'Content-Type': 'application/json; charset=UTF-8',
            'Authorization': 'Bearer ' + ACCESS_TOKEN,
        },
        'method': 'post',
        'payload': JSON.stringify({
            'replyToken': reply_token,
            'messages': [{
                'type': 'text',
                'text': post_message,
            }],
        }),
    });
    return ContentService.createTextOutput(JSON.stringify({ 'content': 'post ok' })).setMimeType(ContentService.MimeType.JSON);
}

これで動くはず、、、ですが、間違いなどありましたらコメントなどでご指摘いただけると助かります。
今回の記事は以上です。最後までご覧くださりありがとうございました。

8. 参考など

Spla3API
LINE BOTをGASで作成
GASでJsonを取得してhtmlで表示する

3
1
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
3
1