@laboratoria/fetch-gsheets
fetch-gsheets
is a command line tool used to retrieve data from Google
Spreadsheets.
Installation
Global install:
npm install --global @laboratoria/fetch-gsheets
npm i -g @laboratoria/fetch-gsheets
As project devDependency:
npm install --save-dev @laboratoria/fetch-gsheets
npm i -D @laboratoria/fetch-gsheets
Usage
Usage: fetch-gsheets [options] <selector-1> [...<selector-N>]
Command expects one or more "selectors" as arguments.
Each selector is a string with the following format:
'<spreadSheetId>!<sheetId>!<range>'
For example:
fetch-gsheets '2vG81bkFMfroZFNmCbD9SQcUo-Wed08goNrJB9Yyl9AB!SCL!A1:I'
In this example
* spreadSheetId: '2vG81bkFMfroZFNmCbD9SQcUo-Wed08goNrJB9Yyl9AB'
* sheetId: 'SCL'
* rangeL 'A1:I'
Options:
-c, --credentials Path to OAuth Client ID JSON file. Default: credentials.json
-h, --help Show this help.
-v, --version Show fetch-gsheets version.
For more info please check https://github.com/Laboratoria/fetch-gsheets
Authentication
Before you use the fetch-gsheets
command you will need to create a project
in the Google Cloud Console,
enable access to the Google Sheets API
for that project and create an OAuth Client ID. After creating a project in
Google Cloud and enabling access to the Google Sheets API, to get an
OAuth Client ID (the credentials for fetch-gsheets
), follow these steps:
-
Go to https://console.cloud.google.com/apis/credentials.
-
Select Create credentials
, then OAuth Client ID
.
-
Pick other
in the application type radio selector, give a name to the
client ID (something for you to remember what this client id is for) and
click on the Create
button.
-
Dismiss the confirmation dialog after clicking
-
Finally click on the download button next to the newly generated OAuth 2.0
client ID in the list.
This file is expected to be an OAuth 2.0 Client ID. Something like:
{
"installed": {
"client_id":"557161231987-cjdfhbhatdov4idv3irt6js4jkv9248a.apps.googleusercontent.com",
"project_id":"your-amazing-project",
"auth_uri":"https://accounts.google.com/o/oauth2/auth",
"token_uri":"https://www.googleapis.com/oauth2/v3/token",
"auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs",
"client_secret":"asd7123-abcbdyasd123ertg",
"redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]
}
}
By default, fetch-gsheets
will look for a file called credentials.json
in
the current working directory (that is the directory from where
fetch-gsheets
was invoked).
You can also specify a different path to the credentials file using the -c
(short version) or --credentials
(long version) options.
fetch-gsheets \
-c ./path/to/oauth-client-id.json \
'2vG81bkFMfroZFNmCbD9SQcUo-Wed08goNrJB9Yyl9AB!SCL!A1:I'
fetch-gsheets \
--credentials ./path/to/oauth-client-id.json \
'2vG81bkFMfroZFNmCbD9SQcUo-Wed08goNrJB9Yyl9AB!SCL!A1:I'
Sign in
When fetch-gsheets
runs, it checks if an auth token already exists (in the same
dir as the credentials file - that's the OAuth Client ID JSON file). If it
does not exist, you will be prompted to authorize the app (the fetch-gsheets
command) as follows:
$ fetch-gsheets \
-c ./Downloads/client_secret_1234567890-abcdeovs2hetkgmpm4mui70283pth3a2.apps.googleusercontent.com.json \
'1Tviny8HzskBKP0HDKXoSClqyHsvQTO0XsWnyKWZGvJA!General!A1:H5'
Authorize this app by visiting this url: https://accounts.google.com/o/oauth2/v2/auth?access_type=offline&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fspreadsheets.readonly&response_type=code&client_id=897165371071-hgj5qovs2hetkgmpm4mui70283pth3a2.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob
Enter the code from that page here:
You should open the link in a web browser and follow the steps on the screen:
Finally, enter the token back in the console:
Enter the code from that page here: xxxxx
Token stored to /home/lupo/Downloads/token.json
[
// data goes here
]
Subsequent calls to fetch-gsheets
will not prompt for authentication and will
run directly.
$ fetch-gsheets \
-c ./Downloads/client_secret_1234567890-abcdeovs2hetkgmpm4mui70283pth3a2.apps.googleusercontent.com.json \
'1Tviny8HzskBKP0HDKXoSClqyHsvQTO0XsWnyKWZGvJA!General!A1:H5'
[
// data goes here
]
Examples
NOTE: In the examples below we assume there is a credentials.json
file with a
service account key in the directory where we are invoking fetch-gsheets
. This
allows for no -c
or --credentials
options and thus simpler examples.
Fetch a single range from a single spreadsheet:
fetch-gsheets '2vG81bkFMfroZFNmCbD9SQcUo-Wed08goNrJB9Yyl9AB!SCL!A1:I'
Fetch multiple ranges from a single spreadsheet:
fetch-gsheets \
'2vG81bkFMfroZFNmCbD9SQcUo-Wed08goNrJB9Yyl9AB!SCL!A1:I' \
'2vG81bkFMfroZFNmCbD9SQcUo-Wed08goNrJB9Yyl9AB!LIM!A1:I' \
'2vG81bkFMfroZFNmCbD9SQcUo-Wed08goNrJB9Yyl9AB!CDMX!A1:I'
Fetch multiple ranges from multiple spreadsheets:
fetch-gsheets \
'1xH90agOPuieIAAxSaP1IYx99-G64OP937GhHJs19q2O!SCL!B4:H60' \
'2vG81bkFMfroZFNmCbD9SQcUo-Wed08goNrJB9Yyl9AB!Sheet1!A1:I' \
'2vG81bkFMfroZFNmCbD9SQcUo-Wed08goNrJB9Yyl9AB!Sheet3!A1:X'