SANANEBLOG
GAS PR

【GAS】Webサイトのスクリーンショットを自動化する方法

記事内に商品プロモーションを含む場合があります

はじめに

今回の記事では、Google Apps Script(GAS)を使用して、Webサイトのスクリーンショットを自動的に取得する方法を紹介します。

Google Apps Script(GAS)自体にはWebページのスクリーンショットを直接取得する機能は存在しません。そのため、今回の方法では、外部サービスであるAPIFlashというサービスを使用します。

APIFlashは、URLを指定するだけで簡単にWebページのスクリーンショットを取得できるAPIを提供しており、GASと組み合わせることでWebページのスクリーンショットを簡単に取得することができます。

全体の流れ

APIFLASHアクセスキーの取得

スクリーンショットを取得できるAPIサービス「APIFLASH」を使用するために、アカウントの作成、アクセスキーの生成を行います。

Google Driveの準備

今回の方法では、GASで取得したスクリーンショットをGoogle Driveに保存します。

そのため、保存したいGoogle DriveのフォルダのIDを取得しておく必要があります。

GASの設定

GASのスクリプトエディタでスクリーンショットを取得するためのスクリプトを記載します。合わせて定期的に実行させるためのトリガーの設定やテスト動作を行います。

作成方法

APIFLASHアクセスキーの取得

APIFLASHにアクセス 

アカウントの作成

[Get Started now] をクリックして、メールアドレス・パスワードを入力、[Create account]をクリックしてアカウントを作成します。

APIFLASHから届くメールからメールアドレス認証を行います。

アクセスキーの取得

アカウント作成後に表示される画面から、画像赤枠内にaccess_key=”アクセスキー”が表示されるため、こちらをコピーして控えておきます。

Google Driveの準備

Google Driveにアクセス  

フォルダIDの取得

スクリーンショットを保存したいフォルダを選択して、アドレスバーにあるフォルダIDをコピーして控えておきます。(画像赤枠参照)

https://drive.google.com/drive/u/0/folders/フォルダID

GASの設定

GASにアクセス

[+新しいプロジェクト]からスクリプトエディタを起動

新しいプロジェクトを作成すると、GASのエディタが起動します。デフォルトで表示されている以下のコードは削除しておきます。

function myFunction() {

}

代わりに、以下コードを貼り付けます。

function saveFullPageScreenshot() {
  // APIキー、フォルダID、URLを変数として記載
  var apiKey = 'XXXXXXXXXXXXXXXXXXXXXXX'; // apiflashから取得したアクセスキー
  var folderId = 'XXXXXXXXXXXXXXXXXXXXXXX'; // スクリーンショットを保存するGoogle DriveのフォルダID
  var url = 'https://example.com'; // スクリーンショットを取得したいURL
  
  var today = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyyMMdd');
  var apiUrl = 'https://api.apiflash.com/v1/urltoimage'
    + '?access_key=' + apiKey
    + '&url=' + encodeURIComponent(url)
    + '&full_page=true' // full_pageパラメータをtrueに設定してフルページのスクリーンショットを取得
    + '&fresh=true';

  try {
    var response = UrlFetchApp.fetch(apiUrl);
    if (response.getResponseCode() == 200) {
      var imageBlob = response.getBlob();
      var folder = DriveApp.getFolderById(folderId);
      
      // ファイル名を「yyyymmdd.png」とする
      var filename = today + '.png';
      folder.createFile(imageBlob).setName(filename);
      
      Logger.log('Screenshot saved to Google Drive with filename: ' + filename);
    } else {
      Logger.log('Failed to get screenshot: ' + response.getContentText());
    }
  } catch (e) {
    Logger.log('Error: ' + e.toString());
  }
}

2行目のXXX・・・の部分にはAPIFLASHのアクセスキーに置き換えます。

例:アクセスキーが1234567890の場合

var apiKey = ‘1234567890’;

3行目のXXX・・・の部分にはGoogleDriveのフォルダIDに置き換えます。

例:フォルダIDが1234567890の場合

var folderId = ‘1234567890’;

4行目にはスクリーンショットを取得したいwebページのURLに置き換えます。

例:google.comの場合

var url = ‘https://google.com’;

サービスの追加

[サービス]から[Drive API] > [追加]をクリックする。

トリガーの作成

GASの左メニューから[トリガー(時計マーク)]をクリックし、右下[+トリガーの作成]をクリックします。

[イベントのソースを選択]で任意の実行したい時間を選択できます。

テスト動作

GASを保存 

GASの上部バーから[プロジェクトの保存]をクリックして保存します。

テスト動作

[▷実行]をクリックします。最初のスクリプトの実行には権限が必要となるため、[承認が必要です]というモーダルが表示されたら、

[権限を確認]>[表示されているGoogleアカウント]>[詳細]>[無題のプロジェクト(安全ではないページ)に移動]>[許可]まで移動します。

クリック後GASが実行され、1分ほど待つと指定したフォルダにスクリーンショットが保存されます。

実行の際の注意点

APIFLASHの無料枠利用上限は月100枚までとなっています。定期的に実行する頻度によっては上限に達しスクリーンショットが取得できなくなる場合があります。

スクリーンショットを1枚取得するのに約1分ほどかかります。GAS無料枠の1度の実行時間上限は6分のため、大量のスクリーンショットを1度に取得することには向いていません。

便利なオプション

APIFLASHでは様々なオプションを追加することができます。今回はスクリプト内の以下の部分で、フルページを取得する[full_page]とキャッシュを無視する[flesh]を追加しています。

  var apiUrl = 'https://api.apiflash.com/v1/urltoimage'
    + '?access_key=' + apiKey
    + '&url=' + encodeURIComponent(url)
    + '&full_page=true' // full_pageパラメータをtrueに設定してフルページのスクリーンショットを取得
    + '&fresh=true';

以下に代表的なオプションを紹介します。

widthページ横幅を指定できます。
delayWebページの読み込み後、スクリーンショットを取得するまでの遅延時間をミリ秒単位で指定できます。
full_pageページ全体のスクリーンショットを取得できます。
freshキャッシュを無視して新しいスクリーンショットを取得できます。
qualityJPEGの品質を0から100の間で指定できます。

詳しいオプションの確認や、オプションの指定方法などは、APIFLASHのQuery builderから確認ができます。

GASおすすめ本

GASをもっと勉強したい!ほかにも自分で何か作成したい!という方には以下がおすすめです。仕事で使えるアイデアなども得ることができます。