Google Apps Script @福岡

GASで面白Webサービス&コスト削減や!

Google Apps Script 講座初級編「GASでWebAPIを利用してデータを取得する」

はじめに

後藤銃士です。FGO、「マンガで分かる!FGO」にハマっています。面白いなあ。

今回と次回に渡り、動的なWebアプリケーションを作りたいと思います。以下を予定しています。

  • 今回:WebAPI でデータを取得

  • 次回:上記のデータをWebアプリ化して公開

GAS では html を書いてゴニョゴニョすればサーバ用意しなくても全世界に公開できますのでその機能をつかいつつ、表示する内容は公開されている WebAPI を利用します。

以前は、Google の検索結果や、TwitterInstagram の URL から欲しい情報を抽出して利用してきましたが、やることは同じです。WebAPI も URL を叩いてデータを取得します。

通常、URL を叩くと帰ってくるのが html 形式ですが、WebAPI の場合 JSON 形式がほとんどです。JSON 形式は詳しくはググっていただくとして、JavaScript と親和性が高いので、データを簡単に扱えるもの、とだけ覚えて帰っていただければよいです。GAS でも JSON をハッシュ化できるのでデータ操作が容易になります(この辺りのお話はある程度プログラムを分かっていないと?かと思いますが、すぐ慣れます)。

なろうAPIを使うよ

今回利用するのは、「なろうデベロッパー」(https://dev.syosetu.com)で公開されている、2つのAPIです。

  • なろう小説API(小説情報を取得)

  • なろう小説ランキングAPI(小説を読もう!で公開しているランキング)

これを組み合わせてつくっていきます。流れは、

    1. なろう小説ランキングAPIで20件ほど取得
  1. なろう小説APIを使いで20件の情報からタイトル情報を取得
    1. で取得したデータをランキングで並べ直す

ということをします。2 で取得する際、指定した20件情報の順にデータを出力してくれない関係で、3. の並び替えの操作を行っています。 それでは早速ソースをみていきましょう。

この機能が役に立つのは

GAS で WebAPI を使ってみたい人向け(但しアクセストークンない場合)

講座スタート

いつもどおりコピペだけで大丈夫です。

用意が出来ましたか?では、

新しくタブを開き「script.google.com」を入力してコードを書ける状態にして下さい。

そして今回は、コード.gs にまるっとコピペして下さい。

function myFunction() {
  
  var rankNum = 20;
  var rankList = "";
  var thisMonth = Utilities.formatDate(new Date(), "JST", "yyyyMM01");
  var narouInfo = {};
  
  // なろう小説ランキング情報取得(月間)
  var narouRankingUrl = "https://api.syosetu.com/rank/rankget/?out=json&rtype=" + thisMonth + "-m";
  var response = UrlFetchApp.fetch(narouRankingUrl); //
  var json=JSON.parse(response.getContentText());
  for(var i in json){
    if (i > rankNum -1){
      break;
    }
    rankList = rankList + json[i]["ncode"] + '-';
  }
  rankList = rankList.slice(0, -1);
  
  // なろう小説情報取得
  var narouUrl = "https://api.syosetu.com/novelapi/api/?out=json&ncode=" + rankList;
  response = UrlFetchApp.fetch(narouUrl); //
  var infoJson=JSON.parse(response.getContentText());
  for(var i in infoJson){
    if (i == 0){
      continue;
    }
    rankList = rankList + infoJson[i]["ncode"] + '-';
    narouInfo[infoJson[i]["ncode"]] = infoJson[i];
  }
  
  // 並び替え
  for(var i in json){
    if (i > rankNum -1){
      break;
    }
    var ncode = json[i]["ncode"];
    Logger.log(i + ":" + ncode + " " + narouInfo[ncode]['title']);
  }  
}

f:id:jijyoronn:20190120132318p:plain

それでは実行してみて下さい。そしてログをご確認下さい。 ログに20件のなろう小説のタイトルが表示されましたね?

f:id:jijyoronn:20190120132334p:plain

特に難しいことはしていません。2回、APIを叩いて、抽出した結果を、JSON化後連想配列でデータを取得したり編集したり、といったところでしょうか。 また、取得の仕方や出したい情報などは、なろうAPIの仕様をみながら考えてみるのもよいかと思います。

今回は簡単ですが以上となります。

それでは、ご覧いただきありがとうございました。