Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何从Google Apps脚本连接到Facebook Graph API?_Google Apps Script_Google Sheets_Facebook Graph Api V2.0 - Fatal编程技术网

Google apps script 如何从Google Apps脚本连接到Facebook Graph API?

Google apps script 如何从Google Apps脚本连接到Facebook Graph API?,google-apps-script,google-sheets,facebook-graph-api-v2.0,Google Apps Script,Google Sheets,Facebook Graph Api V2.0,我正试图通过谷歌应用程序脚本连接到Facebook Graph API,但出现了一个错误 我试过: function myFunction (name) { FB.init({ appId : '{your-app-id}', status : true, xfbml : true, version : 'v2.0' }); var jsonData = UrlFetchApp.fetch

我正试图通过谷歌应用程序脚本连接到Facebook Graph API,但出现了一个错误

我试过:

function myFunction (name) {

  FB.init({  
    appId      : '{your-app-id}',  
    status     : true,  
    xfbml      : true,  
    version    : 'v2.0'   
  });  

  var jsonData = UrlFetchApp.fetch("graph.facebook.com/"; + name);
}
我也试过:

function myFuntion(name) {  

    window.fbAsyncInit = function() {  
        FB.init({  
          appId      : 'your-app-id',  
          xfbml      : true,  
          version    : 'v2.0'  
        });  
      };   

      var jsonData = UrlFetchApp.fetch("graph.facebook.com/"; + name);

}
但两者都不起作用,我总是得到:

“ReferenceError:“FB”未定义。“ReferenceError:“window”未定义 定义“

“(#4)已达到应用程序请求限制”,“类型”:“OAutheException”,“代码”:4}”

尽管在变量中加入了我的facebook应用程序ID。我知道“窗口”是外部javascript库的一部分,所以这就是为什么我不能在Google应用程序脚本中使用它的原因,但即使看了其他帖子,我仍然对为什么会出现“FB”未定义错误感到困惑


关于如何解决这个问题有什么想法吗?

本页底部有错误代码:

OAutheException”与登录状态有关。如果您收到该错误,则您没有登录,要获得所需的内容,您需要登录

您可以使用服务器到服务器请求获取应用程序访问令牌。有四种类型的

访问令牌:
  • 用户-代表某人读取、修改或写入其Facebook数据
  • 应用程序-修改和读取应用程序设置,并发布打开的图形操作
  • 页面-读取、写入或修改属于Facebook页面的数据
  • 客户端-很少使用客户端令牌。对Facebook的访问非常有限
访问令牌的形式 用户访问令牌有两种形式:短期令牌和长期令牌

  • 寿命短-约一到两小时-通过web登录生成
  • 寿命长约60天
您可能没有应用程序访问令牌。你有一个应用程序ID,但这与应用程序令牌不同

您只获得一次应用令牌。你需要运行一些代码才能得到它

请注意,要运行此代码,您还必须知道您的应用程序机密。如果你不知道,或者你的应用程序是秘密的,那么你需要知道

查看是否可以运行此代码:

//A Facebook App Token never changes unless you go to the Facebook Developers Console, 
//and you
//change the App Secret.  So, do NOT keep requesting a new App Token.  Just get it once, 
//then
//hard code it into a backend secret function.
// The App Token can be used to modify your App, but you can just do that 'Manually'

function getOneTimeFB_AppToken() {
  Logger.log("getOneTimeFB_AppToken ran");
  //keep this info secret
  //Generate an App Access Token

  var myApp_ID = 'Your App ID';
  var myAppSecret = 'Your App Secret';
  var optnAppTkn = {"method" : "get"};
  var getAppTknURL = "https://graph.facebook.com/oauth/access_token?client_id=" + myApp_ID + "&client_secret=" + myAppSecret + "&grant_type=client_credentials"
  var getAppTkn = UrlFetchApp.fetch(getAppTknURL, optnAppTkn);
  Logger.log("Object returned from GET: " + getAppTkn)
  var myAppTkn = getAppTkn.getContentText();
  Logger.log("myAppTkn: " + myAppTkn);
};
运行该代码,然后在脚本编辑器中选择“视图”菜单和“日志”菜单项。阅读日志中的内容。不要反复运行此代码。如果成功,只运行一次

如果该代码有效,那么您就成功地与Facebook进行了沟通

您需要了解令牌可以做什么,以及您的选项是什么。如果您不打算通过客户端授权从用户那里获得令牌,那么您需要了解应用令牌

应用令牌允许您代表应用程序而不是用户与Facebook进行交互。这可用于阅读你的应用程序洞察,并修改你的应用程序的参数

您永远不希望在客户端(浏览器)代码中使用应用令牌。这将是一个重大的安全问题

但是,如果用户已授予您的应用程序发布权限,则您可以使用应用程序令牌代表该用户将内容发布到Facebook。因此,如果您的应用已被授予发布权限,则可以使用应用访问令牌代替用户访问令牌来进行API调用

但如何获得发布权限?嗯,没有办法通过服务器获得初始短期访问令牌。如果你从安全的角度考虑,这是有道理的。除了通过客户端登录之外,您无法通过任何其他方式获得初始短期访问令牌。所以,如果你想做一些不在appaccess令牌范围内的事情,你不能在没有用户通过客户端登录的情况下完成

您可以实现客户端登录,而无需使用JavaScript SDK。因此,在应用程序脚本独立HTML web应用程序的情况下,您仍然可以使用Facebook登录,而无需链接到Facebook JavaScript SDK。如果你需要这样做,请告诉我

在该代码中,
FB
是一个对象。需要为对象分配“键/值”对。每个“键/值”对都是对象中的一个元素(属性)。错误与对象的工作方式直接相关。该
FB
对象从Facebook API的链接(HTML内部)获取赋值。如果您试图从服务器端(.gs)代码使用指向Facebook API的HTML链接,那么它将无法工作。有很多事情可能会出错。为了准确地知道出了什么问题,我们需要知道该代码是在
gs
文件中,还是在
标记中的HTML文件中

有几种方法可以连接到Facebook:

  • 从HTML(客户端)
  • 从服务器发送HTTP请求

看起来您使用的代码来自一个如何使用Facebook JavaScript SDK的示例,该SDK旨在从HTML内部运行。问题是,应用程序脚本会清理发送到浏览器的HTML。因此,如果您试图通过HTML链接到Facebook JavaScript SDK,您可能无法访问。我知道,在过去,我无法使用原生沙盒模式的HTML链接到Facebook API。我还没有尝试过新的IFRAME沙盒模式。

你能多放一些代码吗?这个答案可能会帮助你:你最终想做什么?发布到你的FB页面?发布到其他人的页面?允许其他人发布到您的页面?这取决于你想做什么,取决于你需要什么授权。我想通过返回FB页面的json从FB页面获取数据。例如,从NBA facebook页面获取json——好的,我只是使用API浏览器获取数据:现在我知道你想要什么了。嗨,桑迪,谢谢你的回复。我的代码在一个gs文件中,我正在尝试连接到gs文件中的facebook graph api(从服务器)