アップススクリプトのUrlFetchAppでCookieを利用する

アップススクリプトのUrlFetchAppでCookieを利用する

ログイン状態の維持に利用されるCookieをUrlFetchAppでも利用することで、各種ウェブサービスをアップススクリプトで利用することができます。

Cookie管理機能付きREST関数

Cookieを意識しなくても自動的にCookieを管理してくれるサンプルスクリプトです。引数のcookie、header、payloadにはオブジェクトを、method、actionには文字列を入力してください。returnされるのはUrlFetchのresponseです。

function fetchWithCookie(cookiemethodactionheaderpayload) {
  // cookieをオブジェクトからheaderパラメータに変換する
  var str = "";
  for(var s in cookiestr += Utilities.formatString("%s=%s;"scookie[s]);
  header["Cookie"] = str;

  // UrlFetchAppを実行する
  var params = {
    "method":method,
    "headers":header,
    "payload":payload,
    "followRedirects":false
  }
  var resp = UrlFetchApp.fetch(actionparams);

  // respからSet-Cookieを取得しcookieオブジェクトを更新する
  var setcookie = resp.getAllHeaders()["Set-Cookie"];
  for(var i = 0i < setcookie.length; i ++){
    var temp = setcookie[i].split(";")[0];
    temp = temp.split("=");
    cookie[temp[0]] = temp[1];
  }

  return resp;
}

サンプルのfetchWithCookieではcookieオブジェクトにSet-Cookieで受け取った値を保存しておき、fetchする度に更新があればcookieを更新します。

cookieオブジェクトは文字列に変換され、headerのCookie要素になります。

引数のmethodやheader、payloadを持ったパラメータをオプションとして、fetchを実行します。この時にfollowRedirectsをfalseにしておくことで、responseのSet-Cookieを取り逃さないようにします。

最後にresponseに含まれるSet-Cookieを取得して、元々のcookieオブジェクトを更新しています。

お読みくださり、ありがとうございました。