如何使用 UrlFetchApp.fetch(url, params) 在 Google Apps 脚本中正确查询 Facebook Graph API?
How to query Facebook Graph API correctly in Google Apps Script using UrlFetchApp.fetch(url, params)?
我正在尝试使用 Google Apps 脚本从 Facebook 图 API 中检索特定 link (https://www.theverge.com/2019/10/25/20932653/facebook-news-breitbart-mark-zuckerberg-statement-bias) 的一组信息。
我可以使用以下 URL(已删除访问密钥)获取信息:
https://graph.facebook.com/v5.0/?id=https://www.theverge.com/2019/10/25/20932653/facebook-news-breitbart-mark-zuckerberg-statement-bias&fields=og_object{title,description,site_name,id,image},engagement&metadata=1&access_token=XXXXXXXXXXXXXX
但是当我尝试在 Google 脚本编辑器中使用以下代码时,我收到错误消息:
function myFunction() {
var url = 'https://graph.facebook.com/v5.0/';
var params = {
"method": 'GET',
"id":"https://www.theverge.com/2019/10/25/20932653/facebook-news-breitbart-mark-zuckerberg-statement-bias",
"fields":"og_object{title,description,site_name,id,image},engagement",
"access-token": 'XXXXXXXXXXXXXXXXX',
};
// Call the Facebook API
var response = UrlFetchApp.fetch(url, params);
// Parse the JSON reply
var json = response.getContentText();
var data = JSON.parse(json);
Logger.log(json);
}
错误:
Request failed for https://graph.facebook.com returned code 400. Truncated server response: {"error":{"message":"Unsupported get request. Please read the Graph API documentation at https:\/\/developers.facebook.com\/docs\/graph-api","type"... (use muteHttpExceptions option to examine full response) (line 15, file "Code")
如何才能正确发出请求并return JSON 响应?
考虑到您正在尝试访问图表 API 的 URL Node
:
您应该删除在您的请求中指定但未在 documentation 中指定的 fields
。它们是:site_name
和 image
.
您应该将查询字符串直接包含在请求的 URL 中。请注意,URLFetch 的 fetch(url, params)
的 params
参数不是查询字符串,而是文档中描述的一些特定参数。
修复上面详述的要点的可能的代码修改如下所示:
function myFunction() {
var base_url = 'https://graph.facebook.com/v5.0/?id=%s&fields=%s&access_token=%s';
var id_param = encodeURIComponent("https://www.theverge.com/2019/10/25/20932653/facebook-news-breitbart-mark-zuckerberg-statement-bias");
var fields_param = encodeURIComponent("og_object{title,description,site_name,id,image},engagement");
var access_token = "XXXXXXXXXXXXXXXXX";
var url = Utilities.formatString(base_url, id_param, fields_param, access_token);
// Call the Facebook API
var response = UrlFetchApp.fetch(url);
// Parse the JSON reply
var json = response.getContentText();
var data = JSON.parse(json);
Logger.log(json);
}
参考 - 使用的函数
我正在尝试使用 Google Apps 脚本从 Facebook 图 API 中检索特定 link (https://www.theverge.com/2019/10/25/20932653/facebook-news-breitbart-mark-zuckerberg-statement-bias) 的一组信息。
我可以使用以下 URL(已删除访问密钥)获取信息:
https://graph.facebook.com/v5.0/?id=https://www.theverge.com/2019/10/25/20932653/facebook-news-breitbart-mark-zuckerberg-statement-bias&fields=og_object{title,description,site_name,id,image},engagement&metadata=1&access_token=XXXXXXXXXXXXXX
但是当我尝试在 Google 脚本编辑器中使用以下代码时,我收到错误消息:
function myFunction() {
var url = 'https://graph.facebook.com/v5.0/';
var params = {
"method": 'GET',
"id":"https://www.theverge.com/2019/10/25/20932653/facebook-news-breitbart-mark-zuckerberg-statement-bias",
"fields":"og_object{title,description,site_name,id,image},engagement",
"access-token": 'XXXXXXXXXXXXXXXXX',
};
// Call the Facebook API
var response = UrlFetchApp.fetch(url, params);
// Parse the JSON reply
var json = response.getContentText();
var data = JSON.parse(json);
Logger.log(json);
}
错误:
Request failed for https://graph.facebook.com returned code 400. Truncated server response: {"error":{"message":"Unsupported get request. Please read the Graph API documentation at https:\/\/developers.facebook.com\/docs\/graph-api","type"... (use muteHttpExceptions option to examine full response) (line 15, file "Code")
如何才能正确发出请求并return JSON 响应?
考虑到您正在尝试访问图表 API 的 URL Node
:
您应该删除在您的请求中指定但未在 documentation 中指定的
fields
。它们是:site_name
和image
.您应该将查询字符串直接包含在请求的 URL 中。请注意,URLFetch 的
fetch(url, params)
的params
参数不是查询字符串,而是文档中描述的一些特定参数。
修复上面详述的要点的可能的代码修改如下所示:
function myFunction() {
var base_url = 'https://graph.facebook.com/v5.0/?id=%s&fields=%s&access_token=%s';
var id_param = encodeURIComponent("https://www.theverge.com/2019/10/25/20932653/facebook-news-breitbart-mark-zuckerberg-statement-bias");
var fields_param = encodeURIComponent("og_object{title,description,site_name,id,image},engagement");
var access_token = "XXXXXXXXXXXXXXXXX";
var url = Utilities.formatString(base_url, id_param, fields_param, access_token);
// Call the Facebook API
var response = UrlFetchApp.fetch(url);
// Parse the JSON reply
var json = response.getContentText();
var data = JSON.parse(json);
Logger.log(json);
}