如何使用 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_nameimage.

  • 您应该将查询字符串直接包含在请求的 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);

}

参考 - 使用的函数