Node.jsでGoogle Drive APIを利用する
概要
Node.jsでGoogle Drive APIを利用する方法を記述します。
事前準備
- Google Cloud Platformでプロジェクトを作成する
- Google Drive APIを利用できるように設定する
- サービスアカウントを作成して、認証情報をjson形式でダウンロードする
実装
- ライブラリのインストール
$ npm install googleapis
- 認証
const { google } = require('googleapis') const auth = new google.auth.GoogleAuth({ keyFile: './credentials.json', // 事前準備でダウンロードしたjson形式の認証情報ファイル scopes: [ 'https://www.googleapis.com/auth/drive.readonly', 'https://www.googleapis.com/auth/drive.file' ] }) const drive = google.drive({ version: 'v3', auth })
- ファイルの一覧を取得
const res = await drive.files.list({ pageSize: 100, fields: 'nextPageToken, files(id, name)' }) const files = res.data.files if (files.length) { console.log('Files: ') files.map((file) => { console.log(`${file.name} (${file.id})`) } }
- ファイルのアップロード
const path = require('path') const fs = require('fs') //npm install file-type const fileType = require('file-type') const ft = await fileType.fromFile('path/to/file') const res = await drive.files.create({ requestBody: { name: path.basename('path/to/file'), mimeType: ft.mime }, media: { mimeType: ft.mime, body: fs.createReadStream('path/to/file') } }) const data = res.data console.log('uploadFile: ', { data }) // uploadFile: { // data: { // kind: 'drive#file', // id: 'xxxxxxxxxx', // name: 'xxxxx', // mimeType: 'xxxxx/xxx' // } // }
- ファイルの共有
const res = await drive.permissions.create({ resource: { type: 'user', role: 'writer', emailAddress: 'xxx@xxxxx' }, fileId: 'file id', fields: 'id' }) const data = res.data console.log('shareFile: ', { data }) // shareFile: { // data: { // id: 'xxxxx' // } // }
- ディレクトリの作成
const res = await drive.files.create({ resource: { name: 'directory name', mimeType: 'application/vnd.google-apps.folder' }, filed: 'id' }) const data = res.data console.log('createDirecotry: ', { data }) // createDirectory: { // data: { // kind: 'drive#file', // id: 'xxxxxxxxxx', // name: 'directory name', // mimeType: 'application/vnd.google-apps.folder' // } // }
- 特定のディレクトリ内へのファイルのアップロード
const ft = await fileType.fromFile('path/to/file') const res = await drive.files.create({ resource: { name: path.basename('path/to/file'), parents: ['directory id'] }, media: { mimeType: ft.mime, body: fs.createReadStream('path/to/file') }, fields: 'id' }) const data = res.data console.log('uploadFileInDirectory: ', { data }) // uploadFileInDirectory: { // data: { // id: 'xxxxxxxxxx' // } // }
- ファイルの削除
const res = await drive.files.delete({ fileId: 'file id' }) const status = res.status console.log('deleteFile: ', { status }) // deleteFile: { status: 204 }