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

# 目次
[1.はじめに](#1-はじめに)
[2.前回のおさらい](#2-前回のおさらい)
[3.GASでjsonを扱う](#3-GASでjsonを扱う)
[4.SplaAPIを使ってみる](#4-SplaAPIを使ってみる)
[5.実際にコードを書いてみる](#5-実際にコードを書いてみる)
[6.さいごに](#6-さいごに)
[7.今回のコード](#7-今回のコード)
[8.参考など](#8-参考など)
# 1. はじめに
この記事では先日宣伝も含め投稿した、[[LINEBot] Splatoon3の多機能Botを作った件](https://qiita.com/Sorakana_jp/items/dce227e48bdb01cda7b4)のステージ情報取得について解説します。
(この記事はLINEMessagingAPIを使用できることを前提とし、筆者はWindows10・GoogleAppsScriptを使用しています。)
# 2. 前回のおさらい
Botについて紹介を主にしました。
こちらから友達追加などできますのでよければ。(友達追加すると筆者が泣いて喜びます。)
[友達追加](https://lin.ee/Tdr603i)
[公式サイト](https://sorakana-jp.github.io/SplashBot/)
# 3. GASでjsonを扱う
そもそもjsonとはなにか。
```lang:JSON
{
 "key1" : value1,
 "key2" : xxxxx,
 "key3" : yyy
}
```
こういうやつです。
まずはjsonのデータを取得します。
```js
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の読み込みができたので、ここから情報を取得します。
```js
//先ほどの手順のようにjsonを読み込む
Logger.log(jsonObject);
```
これでjsonのデータは出力されます。
ただ、全部出力されてもあまり使えません。そこで、ほしい値だけを取得します。
```js
//先ほどの手順のように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を使ってみる
先ほど解説した通り、
```js
function myFunction() {
    var url = "https://xxxxxxxx/yy.json";
    var json = UrlFetchApp.fetch(url).getContentText();  
    var jsonObject = JSON.parse(json); 
  }
```
でjsonを取得、
```js
//先ほどの手順のようにjsonを読み込む
Logger.log(jsonObject[0]['test']); //基本-0番目の配列の、testを取得
Logger.log(jsonObject['Name'][2][keys][2][values]); //Nameに格納されている2番目配列のkeysに格納されている2番目配列のvaluesの値を取得
```
で取得＆出力できます。
これを使って、[Spla3API](https://spla3.yuu26.com/)を使ってみましょう。
まずはjsonを読み込みます。
各データのjsonの取得方法についてはSpla3APIサイト内にありますのでご確認ください。
今回は現在開催中のナワバリバトルを取得します。
```js
function myFunction() {
    var url = "	https://spla3.yuu26.com/api/regular/now";
    var json = UrlFetchApp.fetch(url).getContentText();  
    var jsonObject = JSON.parse(json); 
  }
```
試しに、ステージを取得してみます。
```js
//先ほどの手順のようにjsonを読み込む
Logger.log(jsonObject['results'][0][stages][0][name]); //ステージ1
```
これで、ステージが取得できます。しかし、、1つしか取得できていません。
そのようなときは上で紹介した通り、このように記述します。
```js
//先ほどの手順のようにjsonを読み込む
Logger.log(jsonObject['results'][0][stages][0][name]); //ステージ1
Logger.log(jsonObject['results'][0][stages][1][name]); //ステージ2
```
これでステージをすべて取得できました。
ほかの値も同様の手順で取得できます。
# 5. 実際にコードを書いてみる
実際にコードを書いてみましょう。
今回のコードの完成形は[7.今回のコード](#7-今回のコード)に書いておきます。
```js
//jsonを取得後の処理
//post_messageはあくまで例
//"\n"は改行コード
post_message = json1["results"][0]["stages"][0]["name"] + '\n' + json1["results"][0]["stages"][1]["name"];
```
これでステージ情報を送信することができます。
これにメッセージを加えて、
```js
//jsonを取得後の処理
post_message = 'ナワバリバトルのステージは....\n' + json1["results"][0]["stages"][0]["name"] + '\n' + json1["results"][0]["stages"][1]["name"];
```
など、さらにわかりやすくできます！
応用すればもっといろいろなことができますね。さらに詳しくは次回記事で解説します。
# 6. さいごに
いかがでしたか？GASでのjson取得から、Spla3API実践まで書きました。次回からはこれを使ってさらにいろいろなコードを書いていきます！
お楽しみに。

[友達追加](https://lin.ee/Tdr603i)
[公式サイト](https://sorakana-jp.github.io/SplashBot/)
# 7. 今回のコード
TOKENには自分の取得したTOKENを張り付けて下さい。
```js
//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](https://spla3.yuu26.com/)
[LINE BOTをGASで作成](https://qiita.com/t_gata/items/897936761695124ef920)
[GASでJsonを取得してhtmlで表示する](https://web.biz-prog.net/gas/json.html)