如何在Node.js中开始使用谷歌表单API

1,175 阅读6分钟

在Node.js中开始使用谷歌表单API

Google Sheets API使程序员能够创建能够读取、写入和更新Google电子表格的应用程序。在编程的高级阶段,Google表单可以作为一个数据库,应用程序从那里获取数据并将其渲染到UI模板。

然而,本教程将侧重于使用Node.js实现Google表单的功能。

目标

本教程旨在通过建立一个向现有Google表单中插入和读取数据的应用程序,展示可用于使用Google表单API读取和写入Google表单的功能。

前提条件

为了有效地跟上我的思路,你需要具备以下工具和技能。

  • 你将需要在你的电脑上安装[Node.js]。
  • 对Node.js和JavaScript有基本了解。
  • 一个代码编辑器。我将使用[visual studio]code。
  • 谷歌云控制台。

谷歌云控制台

谷歌云控制台是一个基于网络的平台,使开发者能够在谷歌基础设施上构建和部署应用程序。

该平台允许人们创建一个项目,并指定项目中要使用的资源,或将特定资源添加到现有项目中。

要使用Google Cloud Console上的资源,需要有一个Google账户和我们想要使用的特定资源的访问凭证。

在我们的案例中,我们将使用Google Sheets API,因此,我们需要有API的访问凭证。

创建访问凭证

我们需要一个客户ID和秘密来访问驱动器存储。

按照下面的步骤来获取客户秘密和ID。

  1. 访问控制台.cloud.google.com
  2. 如果你没有现有的项目,创建一个新的项目。
  3. 选择项目并选择APIs and services
  4. 点击ENABLE APIS AND SERVICES
  5. 在搜索框中,搜索google sheets API ,然后为创建的项目启用它。
  6. 一旦你启用了API,选择CREATE CREDENTIALS 来访问API。在下拉菜单中,选择Service Account
  7. 在下一个屏幕中,提供所需的细节,然后点击CREATE
  8. 接下来的两个步骤是可选的,只要点击CONTINUE ,然后点击DONE
  9. 复制电子邮件地址并将其保存在剪贴板上。点击电子邮件地址,进入下一个屏幕。在钥匙下,选择Create new key
  10. 选择JSON 作为keyType,然后选择Create 。这个过程会下载一个钥匙的JSON文件。
  11. 将下载的JSON文件移到与项目相同的文件夹中,由于名称太长,我们可以将其重命名为keys.json

该文件应该像下面这样。

{
  "type": "service_account",
  "project_id": "YOUR PROJECT ID",
  "private_key_id": "YOUR PRIVATE KEY ID",
  "private_key": "YOUR PRIVATE KEY ",
  "client_email": "YOUR CLIENT EMAIL",
  "client_id": "YOUR CLIENT ID",
  "auth_uri": "YOUR AUTH URI",
  "token_uri": "YOUR TOKEN URI",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/..."
}

创建一个谷歌工作表文件

接下来,我们创建一个Google表单文件,并与我们在上面第9步复制的电子邮件共享。通过该电子邮件,我们的应用程序将读取、编辑和更新Google表单文件的内容。

请确保将该电子邮件的角色设置为editor 。我们的Google表单文件将被用来收集文章建议及其作者,如下图所示。

Google Sheets File

开始使用

通过执行下面的命令创建一个名为google-sheet-api 的目录。

mkdir google-sheet-api
cd google-sheet-api

为了创建Node.js应用程序,我们将运行下面的命令来初始化一个空的package.json 文件。package.json 中定义了项目的有用信息,如项目版本、开发依赖性和其他相关脚本。

npm init -y

安装依赖项

接下来,我们将安装所需的依赖项。

我们将使用express 来渲染动态页面,ejs 用于前台,nodemon 用于开发过程中的实时更新,googleapis 用于访问Google sheets api。

为了安装所需的项目依赖,我们需要在我们的vscode终端执行以下命令。

    npm install –save googleapis express nodemon

接下来,我们创建应用程序的入口点。在主文件夹中创建一个名为index.js 的文件。我们将在这个文件中编写大部分的代码。

整合API

index.js ,导入已安装的依赖关系,如下所示。

// inlcude express 
const express = require("express");

//googleapis
const { google } = require("googleapis");

//initilize express
const app = express();

//set app view engine
app.set("view engine", "ejs");

我们将在index.js 文件中的post路线下编写下一组片段。下面是我们在添加这些代码之前的app.post路由的情况。

app.post("/", async (req, res) => {
    const { request, name } = req.body;
})

创建认证对象

    const auth = new google.auth.GoogleAuth({
        keyFile: "keys.json", //the key file
        //url to spreadsheets API
        scopes: "https://www.googleapis.com/auth/spreadsheets", 
    });

auth对象的客户端实例

    //Auth client Object
    const authClientObject = await auth.getClient();

谷歌电子表格API的实例

//Google sheets instance
    const googleSheetsInstance = google.sheets({ version: "v4", auth: authClientObject });

从URL中提取电子表格ID

要从Google表单的URL中获取电子表格ID。它是你的电子表格的URL中/d//edit 之间的字母数字值。

// spreadsheet id
const spreadsheetId = "YOUR SPREADSHEET ID";

写入电子表格

我们将创建一个表格来收集数据,并将其发送到我们的电子表格。该表格将有两个字段,用于填写文章标题,另一个用于填写作者。

为了创建这个表格,创建一个名为views 的文件夹,然后创建一个名为index.ejs 的文件。

在创建的文件中,添加下面的片段。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>SHEETS API NODE JS</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
    <nav class="navbar navbar-expand-lg navbar navbar-dark bg-primary">
        <div class="container-fluid">
            <a class="navbar-brand" href="#">SECTION</a>
            <div class="collapse navbar-collapse" id="navbarSupportedContent">
                <ul class="navbar-nav me-auto mb-2 mb-lg-0">
                </ul>
            </div>
        </div>
        </nav><br><br>
    <div class="container">
        <div class="card">
            <div class="card-header">
            ARTICLE SUGESTION
            </div>
            <div class="card-body">
                <form action="" method="POST">
                    <div class="form-group">
                        <label for="formGroupExampleInput">Article Title</label>
                        <input type="text" class="form-control" id="article" name="article" placeholder="Article">
                    </div>
                    <div class="form-group">
                        <label for="formGroupExampleInput2">Article Author</label>
                        <input type="text" class="form-control" id="author" name="author" placeholder="Author">
                    </div>
                    <br>
                    <button type="submit" class="btn btn-primary btn-sm">Submit</button>
                </form>
            </div>
            </div>
    </div>
</body>
</html>

Form to collect data

写入电子表格的函数接受授权对象、电子表格ID和要写入的单元格范围、用户输入的值以及包含要插入到行中的信息的资源对象。

资源对象有一个子值,它是要输入到电子表格的数据的数组。数组的长度取决于电子表格的列数。

    //write data into the google sheets
    await googleSheetsInstance.spreadsheets.values.append({
        auth, //auth object
        spreadsheetId, //spreadsheet id
        range: "Sheet1!A:B", //sheet name and range of cells
        valueInputOption: "USER_ENTERED", // The information will be passed according to what the usere passes in as date, number or text
        resource: {
            values: [["Git followers tutorial", "Mia Roberts"]],
        },
    });

从谷歌表单文件中读取数据

从Google表单文件中读取数据的函数需要验证对象、电子表格ID和要读取的单元格范围。下面的片段用于读取文件内容。

    //Read front the spreadsheet
    const readData = await googleSheetsInstance.spreadsheets.values.get({
        auth, //auth object
        spreadsheetId, // spreadsheet id
        range: "Sheet1!A:A", //range of cells to read from.
    })

    //send the data reae with the response
    response.send(readData.data)

运行应用程序

为了测试该应用程序,我们需要启动服务器,然后通过填写表格和发送数据来进行测试。在index.js 文件中添加下面的代码块。然后在你的终端运行nodemon start 命令。

const port = 3000;
app.listen(port, ()=>{
    console.log(`server started on ${port}`)
});

到你的浏览器上的localhost 3000端口,填写表格,并点击提交按钮。你应该有一个成功的消息,如下图所示,并将数据输入到谷歌表单文件中。

success message

总结

在本教程中,我们演示了如何将Google表单API集成到Node.js应用程序中。我们创建了一个表单文件,并编写了从该文件中读取和写入的函数。

现在,请继续在你的项目中实现同样的功能。

最后的想法

谷歌表单有广泛的应用。程序员可以通过探索来最大限度地发挥其功能,也可以做出更好的应用。例如,[本教程]解释了如何使用Google sheet来记录使用QR码的考勤。

此外,正如[本教程]所解释的,我们可以使用Google sheet从金融网站上提取数据。通过适当的研究,我们可以了解如何从这些视频中提出的想法制作大规模的应用程序。