【GAS】APIを使って犬の画像を表示するWEBアプリを作る
今回は、APIを実際に使ってみようと思います。APIを扱うのは初めてなので、できるだけかんたんなAPIを使って画像を表示するWEBアプリを作ります。
Dog APIで画像を表示させるWEBアプリを作る
今回、使用させていただくAPIは以下のリンクです。犬の画像をランダムで表示してくれます。
Fetch!と書いてあるテキストボックスに入っているURLがエンドポイントになります。その下にあるボックス内に書かれている文字列がjsonとして受け取れる内容です。
json
エンドポイントにアクセスすると以下のレスポンスが得られます。GASで受け取るjsonの中身です。
{
"message": "https://images.dog.ceo/breeds/bulldog-boston/n02096585_6567.jpg",
"status": "success"
}
GASでのFetch
GASでは以下のようにfetchを使うとReferenceErrorが出ます。
fetch('http://example.com/movies.json')
.then(response => response.json())
.then(data => console.log(data));
GoogleのリファレンスではUrlFetchApp.fetch()を使いましょうとあるので、使います。
var dogjson = UrlFetchApp.fetch(dogUrl);
JSON.parse()
jsonをGASで扱えるようにするために、jsonデータを解析します。
var data = JSON.parse(dogjson.getContentText());
jsonデータからURLを取り出し
jsonデータからURLだけを取り出します。
var dogimgurl = data.message;
HTMLで表示できるように書き込み
一応、URLを取り出せているか確認するために、dogimgをpタグで表示させていますが、なくてもいいです。
10行目ですが、「dogimg」にはURLの中身しか入っていないので、「'<img src="' + dogimg + '" >’」となりそうですが、これではうまく動作しません。
そこで、ダブルコーテーション「"」を文字列として認識させることで画像を表示させています。具体的には、「\」(¥か\)を用いてエスケープしています。
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<?
var dogimg = fetchDogUrl();
output.append('<p>' + dogimg + '</p>');
output.append('<img src=\"' + dogimg + '\" >');
?>
</body>
</html>
GAS全体
値が代入されているかの確認のため、「console.log」がたくさん入っていますが、なくても動きます。
console.logをしておくと、変数の中に今どんな内容が入っているのかを確認できて便利です。jsonもどのように扱われているのかなんとなくわかります。うまく動作しない場合は活用していきましょう。
function doGet(){
var htmlTemplate = HtmlService.createTemplateFromFile('dog');
return htmlTemplate.evaluate();
}
function fetchDogUrl(){
const dogUrl ="https://dog.ceo/api/breeds/image/random";
var dogjson = UrlFetchApp.fetch(dogUrl);
console.log(dogjson);
var data = JSON.parse(dogjson.getContentText());
console.log(data);
console.log(data.message);
console.log(data.status);
var dogimgurl = data.message;
console.log(dogimgurl);
return dogimgurl;
}
実行結果
ここで表示される画像は「Dog API」から取得しているので、毎回ランダムな画像が表示されます。画像のURLもその時々で変わるはずです。
以前作ったアプリを流用して作ったので、「HelloWorld」の文字列が入っていますが、今回のコードを使うと入らないはずです。
最後に
今回は、jsonを扱うのが初めてだったり、fetchのことでなかなか進みませんでしたが、無事に犬の画像を表示できてよかったです。次は、APIで取得した画像を使って、犬か猫の画像を選択できるアプリを作ろうと思います。
ディスカッション
コメント一覧
まだ、コメントがありません