Skip to content

Instantly share code, notes, and snippets.

@wuriyanto48
Created January 7, 2025 11:04
Show Gist options
  • Save wuriyanto48/f2ff6183c708cc77683fa77dd2b0fb83 to your computer and use it in GitHub Desktop.
Save wuriyanto48/f2ff6183c708cc77683fa77dd2b0fb83 to your computer and use it in GitHub Desktop.
Google Drive API with googleapis Nodejs

Install googleapis

npm i googleapis
const { google } = require('googleapis');
const drive = google.drive("v3");
const config = require('./sa.json');
async function auth() {
var jwtClient = new google.auth.JWT(
config['client_email'],
undefined,
config['private_key'],
['https://www.googleapis.com/auth/drive']
);
return new Promise((resolve, reject) => {
jwtClient.authorize(err => {
if (err) {
reject(err);
}
resolve(jwtClient);
});
});
}
async function getStorageQuota(client) {
return new Promise((resolve, reject) => {
// https://developers.google.com/drive/api/reference/rest/v3/about
drive.about.get({
auth: client,
fields: "*"
}, (err, res) => {
if (err) {
return reject(err);
}
// convert to Gb
const limit = (res.data.storageQuota.limit / 1_000_000_000).toFixed(2);
const usage = (res.data.storageQuota.usage / 1_000_000_000).toFixed(2);
return resolve({
limit: `${limit} Gb`,
usage: `${usage} Gb`
})
});
});
}
async function getFiles(client, nextPageToken = '', q = null, pageSize = 10) {
return new Promise((resolve, reject) => {
let params = {
pageSize: pageSize
};
// https://developers.google.com/drive/api/guides/search-files#node.js
if (q != null) {
params.q = `${q.key} contains '${q.value}'`
}
if (nextPageToken != "") {
params.pageToken = nextPageToken
}
// https://developers.google.com/drive/api/reference/rest/v3/files/list
drive.files.list(params, {
auth: client,
fields: "files(id, name, mimeType, thumbnailLink)",
}, (err, res) => {
if (err) {
return reject(err);
}
return resolve({nextPageToken: res.data.nextPageToken, files: res.data.files});
});
});
}
async function deleteFile(client, fileId) {
if (!fileId){
return 'file id is not defined.';
}
return new Promise((resolve, reject) => {
drive.files.delete({
fileId: fileId,
auth: client,
}, (err, res) => {
if (err) {
return reject(err);
}
return resolve(res.data);
});
});
}
async function main() {
try {
const client = await auth();
const storageQuota = await getStorageQuota(client);
console.log('storage quota: ', storageQuota);
// delete file
// const deleteResult = await deleteFile(client, '1eegeeMNdage-xxxxxxxxxxxxxxxxxxxxxxxx');
// console.log(deleteResult);
const {nextPageToken, files} = await getFiles(client, '', {key:'name', value:'myfile-1734489450847'}, 5);
console.log('next page token: ', nextPageToken);
for(let i = 0; i < files.length; i++) {
const file = files[i];
console.log(file)
}
} catch(e) {
console.log(e);
}
}
main().catch(e => console.log(e));
{
"type": "service_account",
"project_id": "my-project",
"private_key_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"private_key": "-----BEGIN PRIVATE KEY-----\nxxxxxxxxxxxxx\n-----END PRIVATE KEY-----\n",
"client_email": "[email protected]",
"client_id": "111111111111111111",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/gdrive-xxxx%40my-project.iam.gserviceaccount.com",
"universe_domain": "googleapis.com"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment