如何发送对于谷歌的NodeJS索引批量要求的multipart /混合的要求吗?

问题描述 投票:5回答:2

我使用的NodeJS与GoogleApis v35.0.0连接到谷歌告诉更新或删除从谷歌索引的网页。我被困在多/混合请求,多的身体,当我通过Google indexing batch request发送请求。

我可以能够通过以下的indexing API documentation发送一个单独的页面更新请求给谷歌。但由于谷歌已经在最高每天200所请求的名额有限,我需要更新多个URL的比。所以,我想使用谷歌索引批量要求其能在组最大100个个人的请求,并将其算作1级的要求。

我有多域主体的正确格式时,我试图通过发送批量请求的问题。我使用GoogleApis从扩展的oauth2验证我的帐户JWT(JSON网络令牌),并使用request library v2.88.0发送请求给谷歌。

由于要求图书馆已处理多边界,这就是为什么我不发送的请求选项信息为一体。我还检查在多部分/混合请求NPM库的信息,但我只找到一个相似但不相同的,其是多部分/相关(https://github.com/request/request#multipartrelated)。

根据片从Google批量要求体。例如,我需要使用多部分/混合在主请求内容类型:

POST /batch HTTP/1.1
Host: indexing.googleapis.com
Content-Length: content_length
Content-Type: multipart/mixed; boundary="===============7330845974216740156=="
Authorization: Bearer oauth2_token

--===============7330845974216740156==
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-ID: <b29c5de2-0db4-490b-b421-6a51b598bd22+2>

POST /v3/urlNotifications:publish [1]
Content-Type: application/json
accept: application/json
content-length: 58

{ "url": "http://example.com/jobs/42", "type": "URL_UPDATED" }

这里是我的代码:

    return jwtClient.authorize(function(err, tokens) {
      if (err) {
        console.log(err);
        return;
      }

      let options = {
        url: 'https://indexing.googleapis.com/batch',
        method: 'POST',
        headers: {
          'Content-Type': 'multipart/mixed'
        },
        auth: { 'bearer': tokens.access_token },
        multipart: [
          {
            body: JSON.stringify({
              headers: {
                'Content-Type': 'application/http'
              },
              method: 'POST',
              url: 'https://indexing.googleapis.com/v3/urlNotifications:publish',
              body: {
                'Content-Type': 'application/json',
                url: 'https://www.test.com/es/1234',
                type: 'URL_UPDATED'
              }
            })
          }
        ]
      };

      request(options, function (error, response, body) {
        console.log(body);
      });

    });

我在多体得到错误,我不知道哪一种人体谷歌索引的批量要求的等待。好像一切都内多的身体正在考虑为标题。但是,根据文档批量要求的格式,它说,“每个部分开始有自己的内容类型:应用程序/ HTTP HTTP标题中的每个部分的主体本身就是一个完整的HTTP请求,有自己的动词,URL,标题和正文”。欲了解更多详情信息查询:https://cloud.google.com/storage/docs/json_api/v1/how-tos/batch

不过,我收到以下错误,当我执行我的代码:

{
  "error": {
    "code": 400,
    "message": "Failed to parse batch request, error: Failed in parsing HTTP headers: {\"Content-Type\":\"application/http\",\"method\":\"POST\",\"url\":\"https://indexing.googleapis.com/v3/urlNotifications:publish\",\"body\":{\"Content-Type\":\"application/json\",\"url\":\"https://www.test.com/es/1234\",\"type\":\"URL_UPDATED\"}}\n. Received batch body: ",
    "status": "INVALID_ARGUMENT"
  }
}

是否有人知道这是多内时,它要求给Google索引批量请求主体的格式是否正确?

感谢在前进!

node.js google-api multipart google-api-nodejs-client google-indexing-api
2个回答
1
投票

作为@DalmTo说,配额仍将适用,甚至批量请求。但你也不能正确地构建有效载荷,在下面的示例。

const items = batch
  .filter(x => x)
  .map(line => {
    return {
      'Content-Type': 'application/http',
      'Content-ID': batchId,
      body:
        'POST /v3/urlNotifications:publish HTTP/1.1\n' +
        'Content-Type: application/json\n\n' +
        JSON.stringify({
          url: line,
          type: 'URL_UPDATED',
        }),
    };
  });
const options = {
  url: 'https://indexing.googleapis.com/batch',
  method: 'POST',
  headers: {
    'Content-Type': 'multipart/mixed',
  },
  auth: { bearer: access_token },
  multipart: items,
};
request(options, (err, resp, body) => {
  //...
});

3
投票

配料并不有助于避免配额限制

我可以能够通过以下索引API文档发送个人页面更新请求给谷歌。但由于谷歌已经在最高每天200所请求的名额有限,我需要更新多个URL的比。所以,我想使用谷歌索引批量要求其能在组最大100个个人的请求,并将其算作1级的要求。

没有什么batching,指出它仅计为一个在您的配额。

虽然配料可以节省您的构建的HTTP请求的开销批处理请求中的每一个谷歌的API请求将计入​​日常的项目的配额。默认情况下,一个项目可以弥补每天200请求;配料不会帮助你保持这个低于配额。

申请更高的配额

你有没有考虑申请更多配额?我知道这需要一段时间才能得到响应回来,但你可能只是想看看他们怎么说。

enter image description here

注意谷歌的API-的NodeJS客户端

该库不支持批处理,所以你将不得不做你自己,你是目前#1130

您的实际问题

让我知道如果你想继续试图让批处理工作。我会看到,如果我可以提供帮助。随着手动版。

© www.soinside.com 2019 - 2024. All rights reserved.