所以我正在试用FB Graph API,我已经制作了这个只显示你的家庭饲料的小测试网站。我添加了一个喜欢按钮,这样你就可以像在FB上一样喜欢Feed中的项目了。
现在,我有一个问题。因为在API docs中它表示您应该发布到:
https://graph.facebook.com/OBJECT_ID/likes
其中'OBJECT_ID'是对象的ID。只要有对象(图片,共享故事等),这种方法就很有效,但并不总是有一个对象。没有对象的最常见项目可能是纯文本状态更新。因此,如果我尝试运行此代码:
function fbLike(id) {
console.log(id);
FB.api('/'+ id +'/likes', 'post', function(response) {
if (!response || response.error) {
alert('Error occured. ID: ' + id);
} else {
alert('Great! It worked. ID: ' + id);
}
});
}
如果没有object_id,我会收到错误消息:
'Error occured. ID: undefined'
这是显而易见的,因为没有OBJECT_ID。所以,我所做的就是在我的代码中进行if / else检查以查看是否存在OBJECT_ID。如果没有,我将改为使用POST_ID(response.data [i] .id)。但是这在控制台中给出了一个错误:
SyntaxError: At least one digit must occur after a decimal point
如果你不知道,帖子的ID看起来像这样:1796252809_3826036908205(而OBJECT_ID看起来像这样:545978668769904)。
所以,我很好奇的是我如何解决这个问题。如何在没有object_id的情况下更新纯文本(普通)状态更新?我知道这是可能的,因为我可以登录FB的网站,并在那里完全相同的状态。
总结:我怎样才能对正常职位做出喜欢?
希望有人知道如何解决这个问题! :)
此致 亚历山大。
编辑1: 当我尝试单击“喜欢”按钮时,控制台中会显示语法错误。但是fbLike函数没有运行,因为那时我将返回控制台中的id以及带有错误或成功消息的警报消息。这就是我设置我喜欢按钮的方式:
var facebook_footer = '<button onClick="fbLike('+object_id+')"> Like </button>';
and
var facebook_footer = '<button onClick="fbLike('+post_id+')"> Like </button>';
(我将它们保存为for循环中的变量,然后使用.innerHTML将它们打印到div中)
post_id是帖子的id(xxxxxxxxxx_xxxxxxxxxxx),object_id是对象的id(存在的位置)(xxxxxxxxx)。
答案 0 :(得分:0)
看起来某些类型转换出错某处。
我猜想包含下划线的POST_ID语义可能导致这种情况。您可能只对发布此类标识符的后半部分感兴趣,该标识符反映了帖子的实际OBJECT_ID。
当你回到POST_ID时,在发布之前试试你的变量(假设它是一个字符串):
// Filter out non-significant portion of POST_ID
// (ie. keep only what's after the last underscore, if any)
id = id.split('_').slice(-1)[0]