どうも。つじけ(tsujikenzo)です。このシリーズでは、2021年5月から始まりました「ノンプロ研GAS中級講座5期」について、全8回でお届けします。今日は7回目のDay6です。
前回のおさらい
前回は、「Script Services2」をお届けしました。
今回は、 いよいよ最終回で 「HTTP通信・API」 をお届けします。
今日のアジェンダ
- HTTP通信とUrl Fetchサービス
- POSTリクエストとJSON
- 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 != ”)は少しトリッキーです。(私も知りませんでした。)
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とはなにか」という記事を書いたことがあるので、こちらも是非参考にしてください。
API
「API」という技術が浸透しはじめ、近年ではさまざまな事業所からAPIが提供されるようになりました。
書籍「シン・二ホン」でも書かれている通り、これからはAPIを利用するだけでなく、 APIを提供できるような事業者、またはユーザーになれるよう意識していきたいと思っています。
まとめ
以上で、「HTTP通信・API」 をお届けしました。実は、GASは ブラウザを操作するクラスが提供されていません ので、スクレイピングがちょっと苦手です。
どちらかというと、PythonのSeleniumや、VBAによるIE操作に分が上がるでしょう。
それでも、GASでログインの必要なWebサイトにアクセスしたり、スクレイピングする知見は溜まりつつあります。また新たなライブラリが登場したりする日もくるでしょう。
環境構築が不要な点や、集めたデータのスプレッドシート連携、時限トリガーなどは、圧倒的にGASが強いです。
まずは、公開されているAPIを叩きまくるのもいいかもしれませんね。
次回は、卒業LT大会です。 内容は「ノンプログラマーによるGAS開発モデル」 をお届けします。お楽しみに!
このシリーズの目次
- [ノンプロ研]GAS中級講座5期 事前課題
- [ノンプロ研]GAS中級講座5期Day1 スコープと関数
- [ノンプロ研]GAS中級講座5期Day2 クラス・ライブラリ
- [ノンプロ研]GAS中級講座5期Day3 組み込みオブジェクト
- [ノンプロ研]GAS中級講座5期Day4 ScriptServices1
- [ノンプロ研]GAS中級講座5期Day5 ScriptServices2
- [ノンプロ研]GAS中級講座5期Day6 HTTP通信・API
- [ノンプロ研]GAS中級講座5期卒業LT ノンプログラマーによるGAS開発モデルとは
- [ノンプロ研]GAS中級講座5期卒業LT プロの開発を知ろう
- [ノンプロ研]GAS中級講座5期卒業LT ノンプログラマーによる開発