【问题标题】:How to request specific data from the Google Search Console API using Google Apps Script?如何使用 Google Apps 脚本从 Google Search Console API 请求特定数据?
【发布时间】:2021-11-16 10:19:49
【问题描述】:

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

我正在学习一个教程,该教程引导我在 Google Cloud 平台中设置所需的身份验证,并向我展示了如何设置一个基本请求,以检索我在 Search Console 中可以访问的网站列表。

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

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

 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 Discover 数据,但正如我所说,我无法弄清楚如何做到这一点。提到的请求获取我需要的数据如下:

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

【问题讨论】:

  • 您能具体说明问题所在吗?阅读您的问题后,尚不清楚问题是什么或您需要什么才能开始工作。
  • 嗨,我编辑了这个问题,希望它更清楚。
  • 你能显示response.getContentText()的结果吗,正在检索任何数据吗?另外,您可以检查响应是否包含您需要的内容here
  • 请注意,您在代码中调用的端点是指this。如果您需要使用 Search Analytics,则 url 结构必须是:POST https://www.googleapis.com/webmasters/v3 /sites/siteUrl/searchAnalytics/query
  • 我将 var apiURL 更改为“googleapis.com/webmasters/v3/sites/MyWebsite/searchAnalytics/…”,并在“var options”中将 "method" : "GET" 更改为 "method" : "POST"。但是日志说 startDate 丢失了,我到底应该在哪里添加它?

标签: google-apps-script google-sheets google-api google-search-console


【解决方案1】:

我相信你的目标如下。

  • 您希望使用 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);

参考资料:

【讨论】:

  • 我认为这正是我所需要的,但是当我实现代码时,此错误显示“范围必须包含至少一行。”对于这行代码s_sites.getRange(2,1,URLs.length,2).setValues(URLs);
  • 朋友帮我解决了最后的错误。 for 代码已更改为 for (var i in json.rows) { s_sites.appendRow([json.rows[i].keys[0], json.rows[i].clicks]); },现在一切正常。
  • @Gilbert 感谢您的回复。很高兴您的问题得到解决。
  • 非常感谢您的帮助。 :D
猜你喜欢
  • 2022-08-08
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多