🖥

GASでAPIから取得したデータをスプレッドシートに挿入する

2022/04/18に公開

初めに、スプレッドシートを作成します。

image.png

上のメニューから 拡張機能 → Apps Scriptを選択

※以前で言うとツール→スクリプトエディタ
Gyazo

Apps Scriptを選択するとこのような画面に移動します

  • プロジェクトに名前をつけておきましょう
    Gyazo

処理をが動くかテストする

  • テストでconsoleに文字列を表示を表示する
  • 関数の中に処理を追加 → ⌘ + Sで保存 → 実行をクリック
    Gyazo

APIからデータを取得

  1. リクエストURLを定義する
// jsonplaceholderのダミーAPI(実際にに叩けます)
var requestUrl = "https://jsonplaceholder.typicode.com/posts";
  1. URLを元ににfetchをする
    ※詳しくはこちらに書いてあります↓
    https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app
var response = UrlFetchApp.fetch(requestUrl);
  1. レスポンスからcontentを取得して、JSON.parseする
    レスポンスからの情報の取得はgetContentText()メソッドを使うことで取得できます。
var res = JSON.parse(response.getContentText());

上記の工程をまとめると下記のコードになると思います。これでAPIからデータの取得は完了です。

function fetchValues() {
  var requestUrl = "https://jsonplaceholder.typicode.com/posts";
  var response = UrlFetchApp.fetch(requestUrl);
  var res = JSON.parse(response.getContentText());
};

スプレッドシートのセルに挿入する

  1. resから二次元配列を作成する
  var values = res.map(content => {
    return [
      content.title,
      content.id,
    ]
  });

二次元配列とは下記のような配列のことです。

// 例
[["田中", "12345"], ["佐々木", "34567"]....];
  1. 現在のスプレッドシートを取得する。
    スプレッドシートClass → アクティブなスプレッドシートを取得 → アクティブなシートを取得
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  1. 取得したシートのセルに挿入する
    getRange()は指定した範囲のセルを取得できます。
    setValues()セルに引数に入れたデータを挿入してくれます(二次元配列は自動的にセルごとに展開される)
    ※挿入したいデータの数と、セルの指定が相違していると下記のエラーが出るのでデータの数をセルの指定を合わせておくこと
    image.png
// valuesのlength分
sheet.getRange(`A1:B${values.length}`).setValues(values);

まとめ

結構簡単にできるので、軽い情報収集など、やってみてはいかがでしょうか?😊
参考になれば幸いです。
作成したコードのまとめです↓↓↓

function fetchValues() {
  var requestUrl = "https://jsonplaceholder.typicode.com/posts";
  var response = UrlFetchApp.fetch(requestUrl);
  var res = JSON.parse(response.getContentText());
  var values = res.map(content => {
    return [
      content.title,
      content.id,
    ]
  });
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange(`A1:B${values.length}`).setValues(values);
};

実行結果
image.png

Discussion