【问题标题】:Is it possible to read google sheets *metadata* only with API key?是否可以仅使用 API 密钥读取谷歌表格*元数据*?
【发布时间】:2023-03-21 13:05:02
【问题描述】:

只能使用 API 密钥(没有 OAuth 2.0)从工作表中读取数据,但读取开发者元数据似乎需要 OAuth 2.0。 有什么方法可以在不要求用户连接他的谷歌帐户的情况下从应用中读取元数据?

【问题讨论】:

    标签: google-sheets-api google-oauth


    【解决方案1】:
    • 您希望使用 API 密钥检索电子表格的开发者元数据。
    • 您已经能够使用 API 密钥从电子表格中获取值。

    如果我的理解是正确的,那么这个答案呢?请认为这只是几个可能的答案之一。

    问题和解决方法:

    很遗憾,Sheets API 中的“REST 资源:电子表格.developerMetadata”不能与 API 密钥一起使用。在这种情况下,如您的问题中所述,需要 OAuth2。开发人员元数据也可以通过 Sheets API 中的电子表格.get 方法检索。开发人员元数据可以通过 API 密钥检索。在这个方法中,所有的开发者元数据都被检索了。所以当你想搜索开发者元数据时,请从检索到的所有开发者元数据中进行搜索。

    要点:

    • 在这种情况下,请将开发者元数据的可见性设置为DOCUMENT。这样,开发人员元数据可以通过 API 密钥检索。如果可见性为PROJECT,则无法使用 API 密钥检索。请注意这一点。

    • 当您想使用 API 密钥检索开发者元数据时,请公开共享电子表格。这样,可以使用 API 密钥检索它。请注意这一点。

    示例情况1:

    作为示例情况,假设它创建新的电子表格,并将新的开发人员元数据作为“sampleKey”的键和“sampleValue”的值创建到电子表格中。

    在这种情况下,电子表格.batchUpdate 的示例请求正文如下。

    {
      "requests": [
        {
          "createDeveloperMetadata": {
            "developerMetadata": {
              "location": {
                "spreadsheet": true
              },
              "metadataKey": "sampleKey",
              "metadataValue": "sampleValue",
              "visibility": "DOCUMENT"
            }
          }
        }
      ]
    }
    

    curl 命令示例:

    当您从上述示例电子表格中检索开发人员元数据时,请使用以下 curl 命令。

    curl "https://sheets.googleapis.com/v4/spreadsheets/### spreadsheetId ###?key=### your API key ###&fields=developerMetadata"
    
    • 在这种情况下,fields=developerMetadata 用于更容易查看响应值。当然,您也可以将* 用作fields
    • 在这种情况下,将上述端点放入浏览器时,您可以看到检索到的值,因为 GET 方法。

    结果:

    {
      "developerMetadata": [
        {
          "metadataId": 123456789,
          "metadataKey": "sampleKey",
          "metadataValue": "sampleValue",
          "location": {
            "locationType": "SPREADSHEET",
            "spreadsheet": true
          },
          "visibility": "DOCUMENT"
        }
      ]
    }
    

    示例情况2:

    与其他情况一样,假设它创建新的电子表格,并将新的开发人员元数据创建到第一列(“A”列)作为“sampleKey”的键和“sampleValue”的值。

    在这种情况下,示例请求正文如下。

    {
      "requests": [
        {
          "createDeveloperMetadata": {
            "developerMetadata": {
              "location": {
                "dimensionRange": {
                  "sheetId": 0,
                  "startIndex": 0,
                  "endIndex": 1,
                  "dimension": "COLUMNS"
                }
              },
              "metadataKey": "sampleKey",
              "metadataValue": "sampleValue",
              "visibility": "DOCUMENT"
            }
          }
        }
      ]
    }
    

    curl 命令示例:

    当您从上述示例电子表格中检索开发人员元数据时,请使用以下 curl 命令。

    curl "https://sheets.googleapis.com/v4/spreadsheets/### spreadsheetId ###?key=### your API key ###&fields=sheets(data(columnMetadata(developerMetadata)))"
    
    • 在这种情况下,sheets(data(columnMetadata(developerMetadata))) 用于更容易查看响应值。当然,您也可以将* 用作fields

    结果:

    {
      "sheets": [
        {
          "data": [
            {
              "columnMetadata": [
                {
                  "developerMetadata": [
                    {
                      "metadataId": 123456789,
                      "metadataKey": "sampleKey",
                      "metadataValue": "sampleValue",
                      "location": {
                        "locationType": "COLUMN",
                        "dimensionRange": {
                          "dimension": "COLUMNS",
                          "startIndex": 0,
                          "endIndex": 1
                        }
                      },
                      "visibility": "DOCUMENT"
                    }
                  ]
                },
                {},
                ,
                ,
              ]
            }
          ]
        }
      ]
    }
    

    参考资料:

    如果我误解了您的问题并且这不是您想要的方向,我深表歉意。

    【讨论】:

    • 感谢您的详细解答!它真的有帮助!但我仍然想知道为什么开发人员元数据 api GET (by ID) 和 SEARCH 不可用于未经身份验证的请求,而您可以通过简单的 get 请求获取它 - 正如您所展示的那样。此外,如果您的请求包含项目 API 密钥,为什么您看不到“项目”可见性元数据?好吧,反正这个答案对我来说已经足够了
    • @Moshe Estroti 感谢您的回复。不幸的是,对于您的附加问题,虽然我认为这可能是谷歌方面的规范,但我没有明确的答案。我为此道歉。但上述情况是我们可以使用的当前结果。
    • 更多 cmets: 1. 我发现如果您想获取列元数据,您必须将“字段”设置为 sheets(data(columnMetadata(developerMetadata)))。如果您使用*,您将无法获得它们。 2.我也得到了只有API key的PROJECT可见性项目
    • @Moshe Estroti 感谢您提供更多信息。它将对用户有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多