Facebook Graph API与喜欢的帖子不同

时间:2013-02-08 05:50:38

标签: android facebook facebook-graph-api

我的应用中有一个方法,允许用户“喜欢”他/她的新闻Feed中的帖子。使用HttpMethod.POST完成了一个简单的图形请求。但是当我尝试使用HttpMethod.DELETE执行“不同”操作时,我收到错误回调:

02-08 00:35:57.298: I/Detail(2628): {Response:  responseCode: 403, graphObject: null, error: 
{HttpStatus: 403, errorCode: 200, errorType: OAuthException, errorMessage: (#200) 
Feed story publishing to other users is disabled for this application}, isFromCache:false}

现在我认为这与最近尝试使所有与Facebook集成的应用程序使用所有Facebook外观对话框和样式有关,但我可能是错的。这是让我怀疑的roadmap post

  

删除通过Graph API发布到朋友墙的能力我们会   删除通过图表发布到用户朋友的墙上的功能   API。具体来说,针对[user_id] / feed的帖子,其中[user_id]是   不同于session用户,或者stream.publish调用的地方   target_id用户与会话用户不同,将失败。如果你   想让人们发布他们朋友的时间表,调用   提要对话框。通过用户提及标记或包含朋友的故事   动作标记将显示在朋友的时间轴上(假设为   朋友批准标签)。有关详细信息,请参阅此博客文章。

关于我可能做错什么的任何想法,还是Facebook只是毁了我?谢谢!

编辑:这是我用来运行请求的代码。

Request likeRequest = new Request(Utility.fbSession, null, null, null, new Request.Callback() {
    @Override
    public void onCompleted(Response response) {
        String responseString = response.toString();
        Log.i("Detail", responseString);
        updateDetail();
    }
});
HttpMethod nextLikeCall = HttpMethod.DELETE;
likeRequest.setHttpMethod(nextLikeCall);
likeRequest.setGraphPath(itemId+"/likes");
likeRequest.executeAsync();

2 个答案:

答案 0 :(得分:1)

当您从图表数据中获取帖子ID时,它应采用以下格式:XXXXX_YYYYY。 XXXXX只是用户ID,YYYYY是实际的帖子ID。您需要做的是提取并仅使用图表为您提供的帖子ID的YYYYY部分。所以而不是graph.facebook.com/XXXXX_YYYYY/likes ....你想发送graph.facebook.com/YYYYY/likes。这将适用于喜欢和不喜欢,你可以先在图浏览器中测试,然后再将子串提取方法混合在一起。

不确定如何在Android上提取字符串的一部分,但我知道在Objective-C / iOS中,它可以像这样完成(代码未经过测试,仅供参考/想法):

SString *actualPostIdStr;      //The String we will put the actual postId in
NSString *oldIdStr          =   //<the string in format XXXXX_YYYYY>
NSInteger charCount         =   [oldIdStr length]; //get the length of the original XXXXX_YYYYY string
NSRange fRangeCount         =   [oldIdStr rangeOfString:@"_"]; //get count of characters to remove (XXXXXX)


if (fRangeCount.location != NSNotFound){
    NSInteger startingPos   =   fRangeCount.location + 1; //get the starting character position of the actual postId
    actualPostIdStr         =   [[oldIdStr substringWithRange:NSMakeRange(startingPos, charCount - startingPos)] copy];
}

希望这有帮助。

编辑:
好的,所以我一整天都喜欢玩这种方法......似乎这种方法有时不起作用,但这一切都取决于你试图喜欢/不同的图形对象的类型。例如...普通状态帖子,这种方法非常有效。但是,在尝试使用消息/故事帖子对象时,我遇到了一个问题。事实证明,在这种带照片的帖子对象的图表数据中,除了状态发布图数据中的普通“id”之外,还有一个名为“object_id”的附加参数。在这种情况下,使用照片和故事帖子,您需要传递“object_id”,不会因为成功而不加改变。

这个混乱似乎是FB结束时的一个错误,或者他们正在进行更改并禁止图表api&amp;只是忘了/还没有告诉我们:)希望前者。同时,你只需要使用我的上述答案,但只要确保你可以测试你可以找到的尽可能多的不同类型的帖子对象,并在条件不同时使用id(“id”的一部分) ......“object_id”等等是必需的。

答案 1 :(得分:0)

有时 Daniel McCarthy 的方法不起作用。在这种情况下,我们需要获取Graph API请求XXX_YYYY,找到字段 object_id ,与此object_id fid不同。