Skip to content

Instantly share code, notes, and snippets.

@javiercbk
Last active August 31, 2016 19:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save javiercbk/0b0f4cdfc846c21373bdcaaaa503c0c6 to your computer and use it in GitHub Desktop.
Save javiercbk/0b0f4cdfc846c21373bdcaaaa503c0c6 to your computer and use it in GitHub Desktop.
A small class to write a spreadsheet in google
var readline = require('readline');
var Promise = require('bluebird');
var google = require('googleapis');
//requires the keys to authenticate to google apis
var creds = require('./service-account.json');
var OAuth2 = google.auth.OAuth2;
var SCOPES = ['https://www.googleapis.com/auth/drive'];
exports.Spreadsheet = class Spreadsheet {
constructor(){
this.oauth2Client = new OAuth2(creds.installed.client_id, creds.installed.client_secret, creds.installed.redirect_uris[0]);
}
authorize(){
var self = this;
return new Promise(function(resolve, reject){
var authUrl = self.oauth2Client.generateAuthUrl({
access_type: 'offline',
scope: SCOPES
});
console.log('Authorize this app by visiting this url: ', authUrl);
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('Enter the code from that page here: ', (code) => {
rl.close();
self.oauth2Client.getToken(code, (err, token) => {
if (err) {
console.log('Error while trying to retrieve access token', err);
reject(err);
}else{
self.oauth2Client.credentials = token;
self.drive = google.drive({version: 'v3', auth: self.oauth2Client});
resolve();
}
});
});
});
}
createFolder(name){
var self = this;
return new Promise(function(resolve, reject){
var fileMetadata = {
'name' : name,
'mimeType' : 'application/vnd.google-apps.folder'
};
self.drive.files.create({
resource: fileMetadata,
fields: 'id'
}, function(err, file) {
if(err) {
reject(err);
} else {
resolve(file.id);
}
});
});
}
createSpreadsheet(name, folderId){
var self = this;
return new Promise(function(resolve, reject){
var spreadSheetMetadata = {
name: name,
mimeType: 'application/vnd.google-apps.spreadsheet'
};
if(folderId){
spreadSheetMetadata.parents = [folderId];
}
self.drive.files.create({
resource: spreadSheetMetadata,
}, function(err, file){
if(err){
reject(err);
}else{
resolve(file);
}
});
});
}
getRows(fileId, range){
var self = this;
return new Promise(function(resolve, reject){
var sheets = google.sheets('v4');
sheets.spreadsheets.values.get({
auth: self.oauth2Client,
spreadsheetId: fileId,
range: range,
}, function(err, response) {
if (err) {
reject(err);
return;
}
var rows = response.values;
resolve(rows);
});
});
}
editRows(fileId, data, range, inputOption){
var self = this;
return new Promise(function(resolve, reject){
var sheets = google.sheets('v4');
sheets.spreadsheets.values.append({
auth: self.oauth2Client,
spreadsheetId: fileId,
valueInputOption: inputOption,
range: range,
resource: data
}, function(err, response) {
if (err) {
reject(err);
return;
}
console.log(JSON.stringify(response));
var rows = response.values;
resolve(rows);
});
});
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment