📌

備忘録: node.js で Google Drive のファイルを取得する

1 min read

googleapi を使う実装ではなく google-auth-library で url 決め打ちで実装しました。

import { JWT } from 'google-auth-library';
import fs from 'fs'

// GCP から取得できる credentail.json にあるはず。
const CLIENT_EMAIL = ...;
const PRIVATE_KEY = ...;
// 取得したいファイルのリンクの末尾 (注
const FILE_ID: string = ...;

const SCOPES = ['https://www.googleapis.com/auth/drive.readonly'];

const fileUrl =
  `https://www.googleapis.com/drive/v3/files/${FILE_ID}?alt=media`
const metadataUrl =
  `https://www.googleapis.com/drive/v3/files/${FILE_ID}`

const client = new JWT({
  email: clientEmail,
  key: privateKey,
  scopes: SCOPES,
});

type Metadata = {
  kind: string; // 'drive#file',
  id: string, // FILE_ID
  name: string, // filename,
  mimeType: string // e.g. 'image/jpeg'
}

const metaResponse = await client.request<Metadata>({ url: metadataUrl });
const filename = metaResponse.data.name;

const ws = fs.createWriteStream(filename);

const fileResponse = await client.request<WriteStream>({
  url: fileUrl,
  responseType: 'stream',
});

if(fileReseponse.status === 200) {
  fileResponse.data.pipe(ws);
}

注) FILE_ID は例えばGoogle Drive の画面からファイルのリンクを取得したとき

https://www.google.com/file/d/1jI8Gf4LXgukaukFHw2lO7qCVT5-JVqhd

なら

1jI8Gf4LXgukaukFHw2lO7qCVT5-JVqhd

になる。

Discussion

ログインするとコメントできます