GoogleフォトからGoogleドライブへのデータ移動と複製:Google Apps Scriptを活用した手順

この記事の内容について、業務や開発でお困りの場合は個別に対応できます。

GoogleフォトからGoogleドライブへデータを移動または複製するための方法について、この記事ではGoogle Apps Script (GAS) を使用した手順を解説します。具体的なスクリプトの設定方法、APIの有効化、OAuth認証の設定などについて詳しく説明します。

1. はじめに

Googleフォトに保存されている写真をGoogleドライブに移動または複製する必要がある場合、Google Apps Scriptを利用することでこのプロセスを自動化できます。この記事では、必要な設定とスクリプトの実装方法をステップバイステップで解説します。

2. 必要な準備

2.1 Google Cloud Platform (GCP)での設定

まず、Google Cloud Platform (GCP)でプロジェクトを設定し、必要なAPIを有効化します。

  1. GCPコンソールにアクセスし、プロジェクトを選択または新規作成します。
  2. 左側のナビゲーションメニューから「APIとサービス」>「ライブラリ」に移動します。
  3. 「Google Photos Library API」を検索し、有効にします。
  4. 同様に「Google Drive API」も有効にします。

2.2 OAuth 2.0 クライアントIDの作成

次に、OAuth 2.0 クライアントIDを作成します。

  1. 「APIとサービス」>「認証情報」に移動します。
  2. 「認証情報を作成」>「OAuth 2.0 クライアントID」を選択します。
  3. アプリケーションの種類を「ウェブアプリケーション」に設定し、必要なリダイレクトURIとして https://script.google.com/oauthcallback を追加します。

3. Google Apps Scriptの設定

次に、Google Apps Scriptのプロジェクトを作成し、必要なスコープを設定します。

3.1 appsscript.json ファイルの編集

appsscript.json ファイルに以下のスコープを追加します。

{
  "timeZone": "Asia/Tokyo",
  "dependencies": {
    "enabledAdvancedServices": [
      {
        "userSymbol": "Drive",
        "version": "v3",
        "serviceId": "drive"
      }
    ]
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes": [
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/photoslibrary.readonly",
    "https://www.googleapis.com/auth/drive.file"
  ]
}

3.2 スクリプトの実装

以下のスクリプトをGASプロジェクトに貼り付けます。このスクリプトは、指定したGoogleフォトのアルバムから写真を取得し、指定したGoogleドライブのフォルダにコピーします。

const ALBUM_NAME = 'テストアルバム'; // アルバム名を定数として設定
const FOLDER_ID = '1YSzmJj-uBLAwDkh49NrphF3KMFawlwC3'; // フォルダIDを定数として設定

function copyPhotosToDrive() {
  const photoLibrary = getPhotoLibrary();
  const album = getAlbumByName(ALBUM_NAME, photoLibrary);
  if (!album) {
    Logger.log('アルバムが見つかりませんでした');
    return;
  }

  const photos = getPhotosFromAlbum(album.id);
  const folder = DriveApp.getFolderById(FOLDER_ID);

  photos.forEach(photo => {
    const fileName = `${ALBUM_NAME}_${photo.filename}`;
    if (!isFileExists(folder, fileName)) {
      const blob = getPhotoBlob(photo.baseUrl);
      const file = folder.createFile(blob);
      file.setName(fileName);
      Logger.log(`ファイル ${fileName} をコピーしました`);
    } else {
      Logger.log(`ファイル ${fileName} は既に存在します`);
    }
  });
}

function getPhotoLibrary() {
  const url = 'https://photoslibrary.googleapis.com/v1/albums';
  const response = UrlFetchApp.fetch(url, {
    headers: {
      Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
    }
  });
  return JSON.parse(response.getContentText());
}

function getAlbumByName(name, photoLibrary) {
  return photoLibrary.albums.find(album => album.title === name);
}

function getPhotosFromAlbum(albumId) {
  const url = `https://photoslibrary.googleapis.com/v1/mediaItems:search`;
  const payload = JSON.stringify({ albumId: albumId });
  const options = {
    method: 'post',
    contentType: 'application/json',
    headers: {
      Authorization: 'Bearer ' + ScriptApp.getOAuthToken()
    },
    payload: payload
  };
  const response = UrlFetchApp.fetch(url, options);
  return JSON.parse(response.getContentText()).mediaItems;
}

function getPhotoBlob(baseUrl) {
  const url = baseUrl + '=d';
  return UrlFetchApp.fetch(url).getBlob();
}

function isFileExists(folder, fileName) {
  const files = folder.getFilesByName(fileName);
  return files.hasNext();
}

4. 認証フローの実行

スクリプトを初回実行時に認証フローが開始されるので、必要な権限を付与します。認証が完了すると、スクリプトが正常に動作し、GoogleフォトからGoogleドライブへのデータ移動または複製が実行されます。

5. 結論

このガイドでは、GoogleフォトからGoogleドライブへデータを移動または複製するためのGoogle Apps Scriptの設定方法と実装手順を詳しく解説しました。APIの設定や認証フローが少し複雑ですが、一度設定を完了すると、自動化されたプロセスで効率的にデータを管理することができます。

ZIDOOKA!

この記事の内容について、対応できます

この記事に関連する技術トラブルや開発上の問題について個別対応を行っています。

個別対応は3,000円〜 内容・工数により事前にお見積りします
最後までお読みいただきありがとうございました

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

AI活用に関するポリシー

当サイトでは、記事の執筆補助にAIを活用する場合がありますが、全面的な委任は行いません。