4

I am in the process of setting up data scraper that writes the data to an excel file and then I want to upload those files to a folder in my own drive account. This will be done once a day via a scheduler, so fully automated is the aim here.

I am looking at this quickstart guide and it goes through the process of Oauth2. I don't want to access any others user data, just push up the files i create. This may be a stupid question but do i have to go through the oAuth process and not just use an api key and secret for example?

In Step 4 it says The first time you run the sample, it will prompt you to authorize access:, how would i do that if this is running on an EC2 instance for example

Thanks

Linda Lawton - DaImTo
  • 106,405
  • 32
  • 180
  • 449
Richlewis
  • 15,070
  • 37
  • 122
  • 283
  • To quote [the docs page about authorization](https://developers.google.com/drive/v3/web/about-auth): *"Your application must use OAuth 2.0 to authorize requests. No other authorization protocols are supported"*. You say you don't want to access user data, but that's what you're doing - it just happens to be your own user data. – Joe Clay Feb 09 '18 at 11:27

2 Answers2

2

If you are only going to be accessing your own account then you should look into a service account. Service accounts are preauthorized so you wont get a window popping up asking for access. I am not a node.js programer so i cant help much with code. I dont see a service account example for node.js for google drive you may be able to find one for one of the other apis or check the client library sample examples

A service account is not you its a dummy user you can take the service account email address and share a folder or file on your personal google drive account with the service account and it will have access. read more about service accounts

Linda Lawton - DaImTo
  • 106,405
  • 32
  • 180
  • 449
2

I thought i would post how i got this to work (i need to look into checking if the file exists and then replace it, but that's later), firstly @DalmTo and @JoeClay had good points so i looked into them further and come across this blog post.

# index.js
const google = require('googleapis');
const fs = require('fs');
const config = require('./creds.json');
const drive = google.drive('v3');
const targetFolderId = "123456789"


const jwtClient = new google.auth.JWT(
  config.client_email,
  null,
  config.private_key,
  ['https://www.googleapis.com/auth/drive'],
  null
);

jwtClient.authorize((authErr) => {
  if (authErr) {
    console.log(authErr);
    return;
  }


const fileMetadata = {
  name: './file.txt,
  parents: [targetFolderId]
};

const media = {
  mimeType: 'application/vnd.ms-excel',
  body: fs.createReadStream('./file.txt' )
};

drive.files.create({
  auth: jwtClient,
  resource: fileMetadata,
  media,
  fields: 'id'
}, (err, file) => {
  if (err) {
    console.log(err);
    return;
  }
    console.log('Uploaded File Id: ', file.data.id);
  });
});

As I said previously my next step is to check if the file exists and if it does replace it

Richlewis
  • 15,070
  • 37
  • 122
  • 283