5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GASで動的HTML① HTMLの中のJavascriptを実行して動的HTMLを作成する。(Dog API使う)

Last updated at Posted at 2020-06-09

GASで動的HTMLページを作成したかった。

GASのHTMLが気になったので試しに作ってみました。コンテンツとしてDog APIを利用させていただきました。

Dog APIを使ってみた。

Dog APIはトークン(認証)なし・ヘッダーオプションなしで利用できるので非常にお手軽です!

Dog API(犬の画像をランダムに1枚返してくれるAPI)
https://dog.ceo/dog-api/

まずは、Dog APIの仕様を確認してみましょう。

Dog APIのエンドポイントにfetchするとjson形式のresponseが返ってきます。
とてもシンプルなjsonで、jsonの中のmessageという名前のプロパティがあり、そのパラメータとして画像urlが格納されているようです。それを使ってWebページに表示してみたいと思います。

GASのHTMLの概要

GASのHTMLはちょっと独特です。
基本的には1つの.gsのGASファイルと1つの.htmlファイルが最小構成となります。
詳しい説明は後述の参考サイトなどを参照ください。

Javascript(GASではない)や、CSSも使うことが出来ます。

実装

Googleドライブにスタンドアローンのプロジェクトを作成し、同じプロジェクト内に下記の2つのファイルを作成します。
image.png

コード

main.gs

function doGet() {
  return HtmlService.createHtmlOutputFromFile("index");
}

GASでHTMLする時の基本中の基本の構文です。
引数で渡すのはhtmlのファイル名です。ここではindexとしていますが、それ以外の名前を付けた場合は引数の名前も統一する必要があります。

index.html

下記はとりあえず表示できれば良いというコードです。
下記だけをを見ると基本的には普通のHTMLと同じですね。(一部GASならではの書き方もあるようです。)

今回は画像を表示するためにimgタグを動的に作成したいと思います。
createElementでimgタグを生成して、そのsrcにDogAPIから取得した画像アドレスを渡してbodyタグにアペンドします。


<!DOCTYPE html>
<html>
<body>
  <script>
    const url = "https://dog.ceo/api/breeds/image/random";
    
    function fetchDogImagePath(url){
        return fetch(url).then( (res) => res.json());
    }
    
    async function fetchDogImage (url){
        const response = await fetchDogImagePath(url);
        const imageElement = document.createElement('img');
        imageElement.src = response.message;
        document.body.appendChild(imageElement);
        }
    fetchDogImage(url);
  </script>
</body>
</html>

デプロイする

コードが書けたら、実際に公開するにはデプロイが必要です。
「ウェブアプリケーションとして導入」の設定を行います。
image.png

表示されたURLをコピーします。
このURLがWebページのアドレスになります。Execute(実行者)は自分、アクセス者はアノニマスにします。
アクセス者の値を変更するとGoogleアカウントログイン済みのユーザでないとアクセスできなくなります。
image.png

アクセスする

↑で発行されたURLをブラウザのアドレスバーにコピペしてアクセスします。
image.png
わんちゃんの画像が表示されました。

何度かブラウザをリロードすると、そのたびに画像が変わります。

ブラウザ開発者ツールを使ってHTMLソースを見てみると、imgタグがbodyにアペンドされているのがわかりました。
image.png

GASならではのGoogleDriveファイルと連携したページ作成もできるようで面白そうですね!
色々と試してみようと思います。

参考

(いつも隣にITのお仕事)Google Apps ScriptでWebアプリケーションを作る最初の一歩
https://tonari-it.com/gas-web-application-beginner/

余談

HTMLファイル内で GASの新しいV8ランタイムから使用可能なアロー関数を使っていますが、V8ランタイムを無効にした状態でも動作します。
これはHTMLはクライアント側で動くものだからでしょう。

続き

GASで動的HTML② HTML内でGoogleドライブの画像ファイルを表示させる。
https://qiita.com/jooji/items/b89ce338af359742e813

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?