无法再从FB中删除链接

时间:2014-07-30 07:59:49

标签: javascript facebook facebook-graph-api

我目前正在制作一个应用程序,在你想删除应用程序中的一些已发布内容后,会从应用程序中删除你在Facebook上发布的链接。

昨天一切正常。

今天,当我尝试删除Facebook上共享的任何链接时,我收到以下错误:

{
    "error": {
        "message": "An unknown error has occurred.",
        "type": "OAuthException",
        "code": 1
    }
}

用户已授予read_streampublish_actions

的权限

我也在Facebook提供的Graph Explorer工具中尝试了同样的事情,同样的错误发生了,而昨天一切都很好。

我不知道发生了什么。如果有人可以照亮我,我将永远感激。

更新代码:

/**
 * @param {!function(string):boolean} filter
 * @param {Function} callback
 */
findRemoveFBposts = function(filter, callback) {
    var IDS = [];
    var removeLinks = function(index) {
        FB.api(IDS[index], "DELETE", function(response) {
            ++index < IDS.length ? removeLinks(index) : (callback && callback(IDS));
        });
    };
    var fetchFB = function(query) {
        FB.api(query, function(response) {
            if (!response['error']) {
                for (var i = 0, n = response['data'].length; i < n; i += 1) {
                    filter(response['data'][i]['link']) && IDS.push(response['data'][i]['id']);
                }
                response['paging'] && response['paging']['next'] ? fetchFB(response['paging']['next']) : (IDS.length ? removeLinks(0) : (callback && callback(IDS)));
            } else {
                IDS.length ? removeLinks(0) : (callback && callback(IDS));
            }
        });
    };
    fetchFB("/v2.0/me/links?fields=link");
};

findRemoveFBposts(function(link) {
    return link=='http://mywebsite.com/somepost';
}, function() {
    console.log('Everything is done')
});

编辑:

这是一个利用Facebook安全问题的功能。正确的方法是在Patrick的回答中。

1 个答案:

答案 0 :(得分:2)

看起来这可能正在发生,因为您的应用没有发布您要删除的项目。您需要检查实际发布的是您的应用

帖子应该有一个应用程序对象(如果它被发布了一个应用程序,否则它根本就不存在)与应用程序信息一起检查返回的关于帖子的数据

{
   //...
   "application": {
      "name": "Graph API Explorer",
      "id": "145634995501895"
   },
   //...
}

所以你可以做到

//Either the post was not created by an app
//or was not created by your app
if(response['data'][i].application === undefined || response['data'][i].application.id != "your app id") {
   return;
}