[ノンプロ研]GAS中級講座5期 Day6HTTP通信・API

GAS

どうも。つじけ(tsujikenzo)です。このシリーズでは、2021年5月から始まりました「ノンプロ研GAS中級講座5期」について、全8回でお届けします。今日は7回目のDay6です。

前回のおさらい

前回は、「Script Services2」をお届けしました。

[ノンプロ研]GAS中級講座5期Day5 ScriptServices2
どうも。つじけ(tsujikenzo)です。このシリーズでは、2021年5月から始まりました「ノンプロ研GAS中級講座5期」について、全8回でお届けします。今日は6回目のDay5です。前回のおさらい前回は、「Script Servi...

今回は、 いよいよ最終回で 「HTTP通信・API」 をお届けします。

今日のアジェンダ

  1. HTTP通信とUrl Fetchサービス
  2. POSTリクエストとJSON
  3. API

HTTP通信とUrl Fetchサービス

fetch(フェッチ)とは

よく聞く言葉ですが、なじみのない単語だと思います。

fetchとは「取りに行く、呼び出す、引き出す」という意味の英単語ですが、こういうときはGoogleの画像検索をすると単語のイメージが湧きます。

海外でFive Nightsという犬のアニメが有名なようで、[fetch -five]で検索してみます。するとどうでしょう。

fetchという単語は、 犬になにかを取ってこさせる動作 がイメージできるようです。

パソコン用語のfetchも、プログラムなどの命令が特定の場所からデータを読み出す動作 のことを指しています。

try…catch文

最近の私事ですが、データに空行や空白セルが含まれるばあいは、if文などで条件分岐せずに、例外が発生したらtry…catchする ことの方が多いかもしれません。

reduce()メソッドは、空の配列を渡すと例外を発生します。

function myTestFunction() {

const values = [[100], [], [300]];

for (const value of values) {
const sum = value.reduce((a, c) => a + c);
console.log(sum);
}

}

//TypeError: Reduce of empty array with no initial value

if文を置いて、条件判定をするならこのような感じです。

function myTestFunction() {

const values = [[100], [], [300]];

for (const value of values) {

if (value != '') {

const sum = value.reduce((a, c) => a + c);
console.log(sum);

} else {

console.log('空の配列です');

}
}

}

//100, 空の配列です, 300

例外を吐くすべての条件を網羅できないばあいは、try…catchしたほうが早いとも言われています。

catchでは、下記のようにエラーメッセージを受け取ることもできます。

function myTestFunction() {

const values = [[100], [], [300]];

for (const value of values) {

try {
const sum = value.reduce((a, c) => a + c);
console.log(sum);
} catch(e){
console.log(e.message);
console.log('空の配列です');
}

}

}

//100, Reduce of empty array with no initial value, 空の配列です, 300

ちなみに、空の配列を判定する条件式(value != ”)は少しトリッキーです。(私も知りませんでした。)

JS Comparison Table

GETリクエスト

正式に言うとGETは、指定されたリソースからデータを要求するために使用されます。

GETリクエストの特徴
– キャッシュできる
– ブラウザの履歴に残る
– ブックマークできる
– 長さの制限があります
– データをリクエストするためにのみ使用される(変更されない)
– 機密データを処理する場合は、使用しない

クエリ文字列は、GETリクエストのURLで送信されます。

ほとんどのばあい、リクエストURLにクエリ文字列をパラメーターとして記述します。

const url = 'https://tonari-it.com/?s=python';
const response = UrlFetchApp.fetch(url);

あまりこのような書き方はしないと思いますが、fetchメソッドの第二引数を使ってリクエストを送信するさいは、bodyプロパティ として渡します。

const url = 'https://tonari-it.com';
const params = {body : JSON.stringify({s: 'python'})}
const response = UrlFetchApp.fetch(url, params);

POSTリクエストとJSON

POSTは、リソースを作成、更新するためにサーバーにリクエストを送信します。

POSTを使用してサーバーに送信されたデータは、HTTPリクエストの リクエスト本文 に保存されます。

POSTリクエストの特徴
– キャッシュされない
– ブラウザの履歴に残らない
– ブックマークできない
– データ長の制限がない

「JSONとはなにか」という記事を書いたことがあるので、こちらも是非参考にしてください。

[JSON]【基礎前編】JSONとは何か
どうも。つじけ(tsujikenzo)です。このシリーズでは、JSONについて、全3回でお送りします。(2021年11月に大幅にリニューアルしました)はじめにJSONは、JavaScript Object Notation...

API

「API」という技術が浸透しはじめ、近年ではさまざまな事業所からAPIが提供されるようになりました。

APIを探して、試して、使える - APIbank
API開発者の総合支援サイトAPIbankの「Home」です。API&#12395...

書籍「シン・二ホン」でも書かれている通り、これからはAPIを利用するだけでなく、 APIを提供できるような事業者、またはユーザーになれるよう意識していきたいと思っています。

まとめ

以上で、「HTTP通信・API」 をお届けしました。実は、GASは ブラウザを操作するクラスが提供されていません ので、スクレイピングがちょっと苦手です。

どちらかというと、PythonのSeleniumや、VBAによるIE操作に分が上がるでしょう。

それでも、GASでログインの必要なWebサイトにアクセスしたり、スクレイピングする知見は溜まりつつあります。また新たなライブラリが登場したりする日もくるでしょう。

環境構築が不要な点や、集めたデータのスプレッドシート連携、時限トリガーなどは、圧倒的にGASが強いです。

まずは、公開されているAPIを叩きまくるのもいいかもしれませんね。

次回は、卒業LT大会です。 内容は「ノンプログラマーによるGAS開発モデル」 をお届けします。お楽しみに!

このシリーズの目次

  1. [ノンプロ研]GAS中級講座5期 事前課題
  2. [ノンプロ研]GAS中級講座5期Day1 スコープと関数
  3. [ノンプロ研]GAS中級講座5期Day2 クラス・ライブラリ
  4. [ノンプロ研]GAS中級講座5期Day3 組み込みオブジェクト
  5. [ノンプロ研]GAS中級講座5期Day4 ScriptServices1
  6. [ノンプロ研]GAS中級講座5期Day5 ScriptServices2
  7. [ノンプロ研]GAS中級講座5期Day6 HTTP通信・API
  8. [ノンプロ研]GAS中級講座5期卒業LT ノンプログラマーによるGAS開発モデルとは
  9. [ノンプロ研]GAS中級講座5期卒業LT プロの開発を知ろう
  10. [ノンプロ研]GAS中級講座5期卒業LT ノンプログラマーによる開発
タイトルとURLをコピーしました