在JavaScript中使用Google Index API时出现错误请求

问题描述

您好,我想制作一个脚本,该脚本使用 http:// localhost:8000 / test.html 上的google indexing api更新我的网站的新网址。 我将 http:// localhost:8000 添加到客户端ID中的授权JavaScript来源 但我有错误400:

Sign-in successful

cb=gapi.loaded_0:228 GET https://content.googleapis.com/discovery/v1/apis/indexing/v3/rest?pp=0&fields=kind%2Cname%2Cversion%2CrootUrl%2CservicePath%2Cresources%2Cparameters%2cmethods%2CbatchPath%2Cid&key='my api' 400
wh @ cb=gapi.loaded_0:228
g @ cb=gapi.loaded_0:228
xh @ cb=gapi.loaded_0:229
(anonymous) @ cb=gapi.loaded_0:229
d @ cb=gapi.loaded_0:186
b @ cb=gapi.loaded_0:181


Error loading GAPI client for API 
{error: {…}}
error:
code: 400
message: "Request contains an invalid argument."
status: "INVALID_ARGUMENT"
__proto__: Object
__proto__: Object

我将浏览器从chrome更改为edge可以工作一次,然后关闭了PC,但问题再次出现后的第二天。 我正在使用api expoler脚本:link 我把脚本和控制台日志作为图像

<!DOCTYPE html>
<html lang="en">

<head>
  <Meta charset="UTF-8">
  <Meta name="viewport" content="width=device-width,initial-scale=1.0">
  <title>Document</title>

</head>

<body>
  <script src="https://apis.google.com/js/api.js"></script>
  <script>
    /**
     * Sample JavaScript code for indexing.urlNotifications.publish
     * See instructions for running APIs Explorer code samples locally:
     * https://developers.google.com/explorer-help/guides/code_samples#javascript
     */

    function authenticate() {
      return gapi.auth2.getAuthInstance()
        .signIn({
          scope: "https://www.googleapis.com/auth/indexing"
        })
        .then(function() {
            console.log("Sign-in successful");
          },function(err) {
            console.error("Error signing in",err);
          });
    }

    function loadClient() {
      gapi.client.setApiKey("My-API");
      return gapi.client.load("https://content.googleapis.com/discovery/v1/apis/indexing/v3/rest")
        .then(function() {
            console.log("GAPI client loaded for API");
          },function(err) {
            console.error("Error loading GAPI client for API",err);
          });
    }
    // Make sure the client is loaded and sign-in is complete before calling this method.
    function execute() {
      return gapi.client.indexing.urlNotifications.publish({
          "resource": {
            "url": "example","type": "URL_UPDATED"
          }
        })
        .then(function(response) {
            // Handle the results here (response.result has the parsed body).
            console.log("Response",response);
          },function(err) {
            console.error("Execute error",err);
          });
    }
    gapi.load("client:auth2",function() {
      gapi.auth2.init({
        client_id: "my OAuth client ID"
      });
    });
  </script>
  <button onclick="authenticate().then(loadClient)">authorize and load</button>
  <button onclick="execute()">execute</button>
</body>

</html>

here the console log

解决方法

感谢上帝,我尝试使用loadClient然后进行身份验证,它可以正常工作

  like this <button onclick="loadClient().then(authenticate)">authorize and load</button>

然后我使用 chrome无痕浏览

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <title>Document</title>
 
</head>

<body>
  <script src="https://apis.google.com/js/api.js"></script>
  <script>
    /**
     * Sample JavaScript code for indexing.urlNotifications.publish
     * See instructions for running APIs Explorer code samples locally:
     * https://developers.google.com/explorer-help/guides/code_samples#javascript
     */

    function authenticate() {
      return gapi.auth2.getAuthInstance()
        .signIn({scope: "https://www.googleapis.com/auth/indexing"})
        .then(function () { console.log("Sign-in successful"); },function (err) { console.error("Error signing in",err); });
    }
    function loadClient() {
      gapi.client.setApiKey("My API");
      return gapi.client.load("https://content.googleapis.com/discovery/v1/apis/indexing/v3/rest")
        .then(function () { console.log("GAPI client loaded for API"); },function (err) { console.error("Error loading GAPI client for API",err); });
    }
    // Make sure the client is loaded and sign-in is complete before calling this method.
    function execute() {
      return gapi.client.indexing.urlNotifications.publish({
        "resource": {
          "url": "my web site","type": "URL_UPDATED"
        }
      })
        .then(function (response) {
          // Handle the results here (response.result has the parsed body).
          console.log("Response",response);
        },function (err) { console.error("Execute error",err); });
    }
    gapi.load("client:auth2",function () {
      gapi.auth2.init({client_id:"My client ID"});
    });
  </script>
  <button onclick="loadClient().then(authenticate)">authorize and load</button>
  <button onclick="execute()">execute</button>
</body>

</html>

GAPI client loaded for API
Sign-in successful
Response {result: {…},body: "{↵  "urlNotificationMetadata": {↵    "url": "https…e": "2020-09-15T20:34:07.091671446Z"↵    }↵  }↵}↵",headers: {…},status: 200,statusText: null}