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

use*_*932 7 google-sheets google-apps-script facebook-graph-api-v2.0

我正在尝试通过Google Apps脚本连接到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);
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

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);

}
Run Code Online (Sandbox Code Playgroud)

但是没有工作,我总是得到:

"ReferenceError:"FB"未定义." 并且"ReferenceError:"窗口"未定义"

"(#4)达到应用程序请求限制","类型":"OAuthException","code":4}}

尽管将我的Facebook应用程序ID放入变量中.我知道"窗口"是外部JavaScript库的一部分,这就是为什么我无法在Google Apps脚本中使用它,但即使在查看其他帖子之后我仍然对为什么我得到"FB"感到困惑没有定义错误.

关于如何解决这个问题的任何想法?

Ala*_*lls 9

本页底部有错误代码:

Facebook Graph API - 错误代码

" OAuthException "与登录状态有关.如果您收到该错误,那么您没有登录,并且为了获得您想要的内容,您需要登录.

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

访问令牌:

  • 用户 - 代表他们阅读,修改或写入特定人员的Facebook数据.
  • 应用程序 - 修改和阅读应用程序设置,并发布Open Graph操作.
  • 页面 - 读取,写入或修改属于Facebook页面的数据.
  • 客户端 - 很少使用客户端令牌.访问Facebook非常有限.

访问令牌的形式

用户访问令牌有两种形式:短期令牌和长期令牌

  • 短暂的 - 大约一个半小时的生命 - 通过网络登录生成
  • 寿命长 - 约60天的寿命

您可能没有应用访问令牌.您有应用程序ID,但这与应用程序令牌不同.

您只能获得一次App令牌.你需要运行一些代码来获得它.

请注意,您还必须知道您的App Secret才能运行此代码.如果你不知道,或者有你的App Secret,那么你需要得到它.

看看你是否可以运行这段代码:

//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);
};
Run Code Online (Sandbox Code Playgroud)

运行该代码,然后在脚本编辑器中,选择VIEW菜单和LOGS菜单项.阅读LOGS中的内容.不要一遍又一遍地运行此代码.如果它成功,只需运行一次.

如果该代码有效,那么您刚刚与Facebook成功沟通.

您需要了解令牌可以做什么,以及您的选择是什么.如果您不打算通过客户端授权从用户获取令牌,那么您需要了解App令牌.

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

您永远不想在客户端(浏览器)代码中使用App Token.那将是一个重大的安全问题.

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

但是你如何获得发布权限?好吧,没有办法通过服务器获得最初的短期访问令牌.如果从安全性的角度考虑它,这才有意义.除了通过客户端登录之外,您无法以任何其他方式获取初始短期访问令牌.因此,如果您想要执行不在App Access Token范围内的操作,则无法在用户通过客户端登录的情况下执行此操作.

可以在不使用JavaScript SDK的情况下实现客户端登录.因此,对于Apps Script Stand Alone HTML Web应用程序,您仍然可以使用Facebook登录而无需链接到Facebook JavaScript SDK.如果您需要这样做,请告诉我.

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

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

  • 来自HTML(客户端)
  • 来自具有HTTP请求的服务器

看起来您正在使用的代码来自如何使用旨在从HTML内部运行的Facebook JavaScript SDK的示例.问题在于,Apps Script会清理发送到浏览器的HTML.因此,如果您尝试通过HTML链接到Facebook JavaScript SDK,则可能无法访问.我知道,在过去,我无法使用NATIVE沙盒模式在HTML中使用Facebook API链接.我没有尝试过新的IFRAME沙盒模式.

  • 得到了应用令牌.有用!下一步是什么? (2认同)