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を有効化します。
- GCPコンソールにアクセスし、プロジェクトを選択または新規作成します。
- 左側のナビゲーションメニューから「APIとサービス」>「ライブラリ」に移動します。
- 「Google Photos Library API」を検索し、有効にします。
- 同様に「Google Drive API」も有効にします。
2.2 OAuth 2.0 クライアントIDの作成
次に、OAuth 2.0 クライアントIDを作成します。
- 「APIとサービス」>「認証情報」に移動します。
- 「認証情報を作成」>「OAuth 2.0 クライアントID」を選択します。
- アプリケーションの種類を「ウェブアプリケーション」に設定し、必要なリダイレクト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の設定や認証フローが少し複雑ですが、一度設定を完了すると、自動化されたプロセスで効率的にデータを管理することができます。