我正在尝试通过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);
}
我也试过了:
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);
}
但两项都没有奏效,我总是得到:
尽管将我的Facebook应用ID放入变量中。我知道“窗口”是外部JavaScript库的一部分,这就是为什么我无法在Google Apps脚本中使用它,但即使在查看其他帖子后我仍然对为什么我得到“FB”感到困惑没有定义错误。“ReferenceError:”FB“未定义。”并且“ReferenceError:”窗口“不是 定义“
和
“(#4)达到了应用程序请求限制”,“键入”:“OAuthException”,“code”:4}}
关于如何解决这个问题的任何想法?
答案 0 :(得分:9)
本页底部有错误代码:
Facebook Graph API - Error codes
" OAuthException "与登录状态有关。如果您收到该错误,那么您还没有登录,并且为了获得您想要的内容,您需要登录。
您可以使用服务器到服务器请求获取应用访问令牌。
有四种类型用户访问令牌有两种形式:短期令牌和长期令牌
您可能没有App Access令牌。您有一个应用程序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);
};
运行该代码,然后在脚本编辑器中,选择VIEW菜单和LOGS菜单项。阅读LOGS中的内容。不要一遍又一遍地运行这段代码。如果它成功,只需运行一次。
如果该代码有效,那么您刚刚成功与Facebook沟通。
您需要了解代币可以执行的操作以及您的选项。如果您不打算通过客户端授权从用户那里获得令牌,那么您需要了解应用程序令牌。
App Tokens允许您代表应用程序而不是用户与Facebook进行交互。这可用于阅读您的应用洞察并修改您的应用的参数。
您永远不想在客户端(浏览器)代码中使用App Token。那将是一个重大的安全问题。
但是,如果用户已授予您的应用程序发布权限,则您可以使用App Token代表该人将内容发布到Facebook。因此,如果您的应用已被授予发布权限,则可以使用应用访问令牌代替用户访问令牌来进行API调用。
但是你如何获得发布权限?好吧,没有办法通过服务器获得最初的短期访问令牌。如果从安全性的角度考虑它,这才有意义。除了通过客户端登录之外,您无法以任何其他方式获取初始的短期访问令牌。因此,如果您想要做的事情不在App Access Token的范围内,那么您无法在没有用户通过客户端登录的情况下执行此操作。
您可以实现客户端登录,而无需使用JavaScript SDK。因此,对于Apps Script Stand Alone HTML Web应用程序,您仍然可以使用Facebook登录而无需链接到Facebook JavaScript SDK。如果您需要这样做,请告诉我。
在该代码中,FB
是一个对象。需要为对象分配"键/值"对。每个"键/值" pair是对象中的元素(property)。该错误与对象的工作方式直接相关。该FB
对象从链接(在HTML内部)中分配给Facebook API。如果您尝试使用从服务器端(.gs)代码到Facebook API的HTML链接,它将无法正常工作。有很多事情可能会出错。为了确切地知道出现了什么问题,我们需要知道该代码是在gs
文件中,还是在<script>
标记内的HTML文件中。
有几种方法可以连接到Facebook:
看起来您正在使用的代码来自如何使用旨在从HTML内部运行的Facebook JavaScript SDK的示例。问题在于,Apps Script会清理发送到浏览器的HTML。因此,如果您尝试通过HTML链接到Facebook JavaScript SDK,则可能无法访问。我知道,在过去,我无法使用NATIVE沙盒模式在HTML中使用Facebook API链接。我还没有尝试过新的IFRAME沙盒模式。