如何使用 Google Apps 脚本从 Google Search Console API 请求特定数据?

How to request specific data from the Google Search Console API using Google Apps Script?

我正在尝试通过 API 从 Google Search Console 中恢复 Google 发现数据,并将其显示在 Google Sheet 中。

我正在学习一个教程,该教程引导我在 Google 云平台中设置所需的身份验证,并向我展示了如何设置一个基本请求来检索我有权访问的网站列表搜索控制台。

我不明白的是如何修改下面的代码,以便 API 检索 Google 发现数据而不是我有权访问的网站列表。

Google Apps 脚本代码获取提到的网站并填充两列,一列是网站 link,另一列是我对该网站的访问级别。

 function listAccountSites() {
  var service = getService();
  if (service.hasAccess()) {
  
    var apiURL = "https://www.googleapis.com/webmasters/v3/sites";
    
    var headers = {
      "Authorization": "Bearer " + getService().getAccessToken()
    };
    
    var options = {
      "headers": headers,
      "method" : "GET",
      "muteHttpExceptions": true
    };
    
    var response = UrlFetchApp.fetch(apiURL, options);
    
    var json = JSON.parse(response.getContentText());
    Logger.log(json)
    
    var URLs = []
    for (var i in json.siteEntry) {
      URLs.push([json.siteEntry[i].siteUrl, json.siteEntry[i].permissionLevel]); 
    }
    s_sites.getRange(2,1,URLs.length,2).setValues(URLs);
    
  } else {
    var authorizationUrl = service.getAuthorizationUrl();
    Logger.log('Open the following URL and re-run the script: %s', authorizationUrl);
    Browser.msgBox('Open the following URL and re-run the script: ' + authorizationUrl)
  }
}

使用 this Google 文档页面,我能够构建一个 API 请求来获取我需要的 Google 发现数据,但正如我所说,我不能弄清楚如何做到这一点。提到的请求获取我需要的数据是以下一个:

{
  "startDate": "2021-11-01",
  "endDate": "2021-11-05",
  "dimensions": [
    "PAGE"
  ],
  "type": "DISCOVER"
}

我相信你的目标如下。

  • 您想使用 Google Apps 脚本实现以下请求。 Ref

      POST https://www.googleapis.com/webmasters/v3/sites/https%3A%2F%2Fwww.example.com%2F/searchAnalytics/query?key={MY_API_KEY}
      {
        "startDate": "2015-04-01",
        "endDate": "2015-05-01",
        "dimensions": ["country","device"]
      }
    
  • 在您的情况下,您希望使用以下请求正文。

      {
        "startDate": "2021-11-01",
        "endDate": "2021-11-05",
        "dimensions": [
          "PAGE"
        ],
        "type": "DISCOVER"
      }
    

如果我的理解是正确的,下面的示例脚本怎么样?

示例脚本:

此示例脚本假设您的访问令牌可以使用并且您已经能够使用 API。请注意这一点。

var siteUrl = "https://www.example.com/"; // Please set the site URL.

var apiURL = `https://www.googleapis.com/webmasters/v3/sites/${encodeURIComponent(siteUrl)}/searchAnalytics/query`;
var headers = { "Authorization": "Bearer " + getService().getAccessToken() };
var payload = {
  "startDate": "2021-11-01",
  "endDate": "2021-11-05",
  "dimensions": ["PAGE"],
  "type": "DISCOVER"
};
var options = {
  "headers": headers,
  "method": "POST",
  "muteHttpExceptions": true,
  "contentType": "application/json",
  "payload": JSON.stringify(payload),
};
var response = UrlFetchApp.fetch(apiURL, options);

参考文献: