google-apps-script - 如何使用 Google Apps 脚本从 Google Search Console API 请求特定数据?
问题描述
我正在尝试通过其 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)
}
}
使用此Google 文档页面,我能够构建一个 API 请求,该请求将获取我需要的 Google Discover 数据,但正如我所说,我无法弄清楚如何做到这一点。提到的请求获取我需要的数据如下:
{
"startDate": "2021-11-01",
"endDate": "2021-11-05",
"dimensions": [
"PAGE"
],
"type": "DISCOVER"
}
解决方案
我相信你的目标如下。
您想使用 Google Apps 脚本实现以下请求。参考
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);
参考:
推荐阅读
- python - Google OR-Tools 时间窗约束解决缓慢
- jsp - jsp中如何设置全局变量?
- r - ggplot2 如何评估因子水平?
- python - 文本分类 Python 上的伪标签
- c# - C# 在调用 Invoke() 后将命令添加到长时间运行的托管 PowerShell 会话
- java - 自动装配类方法的空指针异常
- go - 如何让 HTTP RPC 服务器和客户端工作?
- c++ - 这是如何生成随机数的
- google-cloud-platform - 创建了一个用户定义的指标,每次创建/修改/删除防火墙时都会使用该指标生成警报,但警报会自动恢复
- python - 使用 resnet50 模型时出错 - 项目图像字幕