npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@davidrouyer/gatsby-source-google-spreadsheets

v0.1.0

Published

A source plugin for Gatsby that allows reading data from Google Sheets.

Downloads

5

Readme

Welcome to @davidrouyer/gatsby-source-google-spreadsheets 👋

A source plugin for Gatsby that allows reading data from Google Sheets.

Forked from butlerx/gatsby-source-google-spreadsheets to allow pulling the entire sheet as an objects and using public sheets

Why go through the hassle of setting up a complicated headless CMS when Google Sheets already has user permissions, revision history, and a powerful UI?

This source plugin for Gatsby JS will turn any Google Sheets worksheet into a GraphQL type for build-time consumption.

Install

yarn add @davidrouyer/gatsby-source-google-spreadsheets

Usage

Step 1: Set up your google project & enable the sheets API

  1. Go to the Google Developers Console
  2. Select your project or create a new one (and then select it)
  3. Enable the Sheets API for your project
    • In the sidebar on the left, select APIs & Services > Library
    • Search for "sheets"
    • Click on "Google Sheets API"
    • click the blue "Enable" button

Step 2: set up sheets/permissions

Next you need to decide if you wish to authenticate with a service account or an API key.

  1. Create a service account for your project
    • In the sidebar on the left, select APIs & Services > Credentials
    • Click blue "+ CREATE CREDENITALS" and select "Service account" option
    • Enter name, description, click "CREATE"
    • You can skip permissions, click "CONTINUE"
    • Click "+ CREATE KEY" button
    • Select the "JSON" key type option
    • Click "Create" button
    • your JSON key file is generated and downloaded to your machine (it is the only copy!)
    • click "DONE"
    • note your service account's email address (also available in the JSON key file)
  2. Open your google sheet, click "File > Share..." and enter your service account's e-mail address (you can find it in the credentials file).

Or if you wish to use an API Key not only must the Spreadsheet in question be visible to the web, but it must also have been explicitly published.

  1. Create an API key for your project
    • In the sidebar on the left, select Credentials
    • Click blue "+ CREATE CREDENITALS" and select "API key" option
    • Copy the API key
  2. OPTIONAL - click "Restrict key" on popup to set up restrictions
    • Click "API restrictions" > Restrict Key"
    • Check the "Google Sheets API" checkbox
    • Click "Save"
  3. Open your google sheet, Click "File > Publish to the web" and Share entire sheet or specific worksheets.
  4. Click "File > Share" and click "Get Shareable Link", the link should look like https://docs.google.com/spreadsheets/d/$SPREADSHEET_ID/edit?usp=sharing

Step 2: configure your gatsby project

Standard source plugin installation.

// gatsby-config.js
// ...
{
  resolve: 'gatsby-source-google-spreadsheets',
  options: {
    spreadsheetId: 'get this from the sheet url',
    apiKey: 'GOOGLE-API-KEY'
    // Or
    credentials: require('./path-to-credentials-file.json')
  }
},
// OR using environment variables
{
  resolve: 'gatsby-source-google-spreadsheets',
  options: {
    spreadsheetId: process.env.SPREADSHEET_ID,
    apiKey: process.env.GOOGLE_API_KEY,
    // OR
    credentials: {
      type: 'service_account',
      project_id: process.env.PROJECT_ID,
      private_key_id: process.env.PRIVATE_KEY_ID,
      private_key: process.env.PRIVATE_KEY.replace(/(\\r)|(\\n)/g, '\n'),
      client_email: process.env.CLIENT_EMAIL,
      client_id: '',
      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/${process.env.PROJECT_ID}%40appspot.gserviceaccount.com`,
    },
  }
},
// ...

The plugin makes the following conversions before feeding Gatsby nodes:

  1. Numbers are converted to numbers. Sheets formats numbers as comma-delineated strings, so to determine if something is a number, the plugin tests to see if the string (a) is non-empty and (b) is composed only of commas, decimals, and digits:
if (
    "value".replace(/[,\.\d]/g, "").length === 0
      && "value" !== ""
   ) {
    ...assume value is a number and handle accordingly
}
  1. "TRUE"/"FALSE" converted to boolean true/false
  2. empty cells ("" in sheets payload) converted to null
  3. Column names are converted to camelcase

A few notes:

  1. Not tested with cells of data type dates.
  2. Google sheets mangles column names and converts them all to lower case. This plugin will convert them to camelcase, so the best convention here is to name your columns all lowercase with dashes. e.g. instead of "Column Name 1" or "columnName1", prefer "column-name-1"--this last one will be turned into "columnName1" in your GatsbyQL graph.

Troubleshooting

  1. If you get the error "No key or keyFile set", make sure you are using a Service Account API key and not a simple API key.
  2. If you get the error "Cannot read property 'worksheets' of undefined", make sure you have shared your spreadsheet with your service account user.

🤝 Contributing

Contributions, issues and feature requests are welcome!

Feel free to check issues page.