脸书更新上的评论和喜欢

Posted

技术标签:

【中文标题】脸书更新上的评论和喜欢【英文标题】:Comments and likes on facebook updates 【发布时间】:2013-02-26 16:41:23 【问题描述】:

我一直在 developer.facebook.com 网站上阅读,但他们对这些事情的解释非常糟糕。所以我希望你们中的一些人可以向我解释如何使用 javascript 和 Graph API 在 Facebook 状态上添加评论和点赞按钮。

我现在拥有的是一个应用程序,它显示登录用户的主页(如果需要,也可以是新闻源)。我想要的是基本的 Facebook 功能,即能够评论和喜欢这些状态、图像、分享等(就像你在 Facebook 上一样),还可以查看评论和喜欢这些照片和状态的其他人。

我知道你需要使用 POST 方法,但我不知道我会这样做(这里有一些信息:http://developers.facebook.com/docs/reference/api/publishing/)

所以这是我现在的代码(我不知道这是否是最有效的方法,但它确实有效。如果你也能给我一些建设性的批评,我会很高兴):

FB.api('/me/home', function(response) 
  console.log(response.data);
  for(var i=0, len = response.data.length; i < len; i++) 

    var post_type = response.data[i].status_type; //Post type

    var poster_id = response.data[i].from.id; //Poster
    var poster_name = response.data[i].from.name; //Posters name
    var poster = '<a href="http://www.facebook.com/' + poster_id + '/" >' + poster_name + '</a>'; //Link to poster
    var poster_pic  = 'https://graph.facebook.com/' + poster_id + '/picture'; //Posters profile pic
    var poster_img = '<img   src="' + poster_pic + '" />';

    var post_id = response.data[i].id; //Id of message
    var post = response.data[i].message; //Content of message
    var post_date = response.data[i].created_time; //Date created

    var object_id = response.data[i].object_id; //Pic id (if pic's an object)
    var post_img_url = response.data[i].picture; //Pic url

    if(!object_id) 
      var post_img = '<a href="http://www.facebook.com/' + post_id + '/"> <img src="' + post_img_url + '" /> </a>'; // <a href="http://www.facebook.com/' + post_id + '/">See at Facebook</a>
     else 
      var post_img = '<a href="http://www.facebook.com/' + object_id + '/"> <img src="' + post_img_url + '" /> </a>';
    

    if (!post_img_url) 
      post_img = '';
    

    if(!post) 
      post = response.data[i].story;
    

    if (post_type === 'wall_post') 
      if(response.data[i].to) 
        var posted_to_name = response.data[i].to.data[0].name;
        var posted_to_id = response.data[i].to.data[0].id;
        var posted_to = '<a href="http://www.facebook.com/' + posted_to_id + '/" >' + posted_to_name + '</a>';

        document.getElementById("write").innerhtml += ('<hr> <div class="facebook_content"> <div class="facebook_left_side"> <div class="facebook_content_header"> <div class="poster_img">' + poster_img + '</div> <div class="poster">' + poster + '</div> <div class="post_type"> wrote on ' + posted_to + '\'s wall: </div> <div class="post_date">' + post_date + '</div> </div> <div class="story">' + post + '</div> </div> <div class="facebook_right_side"> <div class="img">' + post_img + '</div> </div> </div> </br>');
       else 
        document.getElementById("write").innerHTML += ('<hr> <div class="facebook_content"> <div class="facebook_left_side"> <div class="facebook_content_header"> <div class="poster_img">' + poster_img + '</div> <div class="poster">' + poster + '</div> <div class="post_date">' + post_date + '</div> </div> <div class="story">' + post + '</div> </div> <div class="facebook_right_side"> <div class="img">' + post_img + '</div> </div> </div> </br>');
      
     else if (post_type === 'added_photos') 
      document.getElementById("write").innerHTML += ('<hr> <div class="facebook_content"> <div class="facebook_left_side"> <div class="facebook_content_header"> <div class="poster_img">' + poster_img + '</div> <div class="poster">' + poster + '</div> <div class="post_type"> added a photo: </div> <div class="post_date">' + post_date + '</div> </div> <div class="story">' + post + '</div> </div> <div class="facebook_right_side"> <div class="img">' + post_img + '</div> </div> </div> </br>');

 else if (post_type === 'shared_story') 
      document.getElementById("write").innerHTML += ('<hr> <div class="facebook_content"> <div class="facebook_left_side"> <div class="facebook_content_header"> <div class="poster_img">' + poster_img + '</div> <div class="poster">' + poster + '</div> <div class="post_type"> shared: </div> <div class="post_date">' + post_date + '</div> </div> <div class="story">' + post + '</div> </div> <div class="facebook_right_side"> <div class="img">' + post_img + '</div> </div> </div> </br>');

 else 
      document.getElementById("write").innerHTML += ('<hr> <div class="facebook_content"> <div class="facebook_left_side"> <div class="facebook_content_header"> <div class="poster_img">' + poster_img + '</div> <div class="poster">' + poster + '</div> <div class="post_date">' + post_date + '</div> </div> <div class="story">' + post + '</div> </div> <div class="facebook_right_side"> <div class="img">' + post_img + '</div> </div> </div> </br>');

  
);

我显然需要添加三个(或更多)包含点赞和评论按钮的 div,并且至少有一个在单击时显示最近的 cmets(就像在 Facebook 上一样)。我需要添加某种 JS 代码,向 facebook 发送请求,其中包含状态/图像的 id、用户的 id、执行的操作类型(喜欢或评论)以及最后的内容评论是在这种情况下。

我请求此信息的原因是我正在处理一个项目,我只是在尝试 Facebook Graph API 的不同功能,因为它们可以很好地补充我的项目功能,而且它是很高兴知道以供将来参考。

希望你们中的一些人知道我可以做些什么来让它发挥作用

真诚地, 亚历山大。

【问题讨论】:

【参考方案1】:

就个人而言,我认为文档做得很好。

来自docs:

Create

You can write to the POST_ID/comments connection to post a comment to the post by issuing an HTTP POST request with the publish_stream permission and following parameters.

Parameter    Description     Type    Required
message Comment text    string   yes

评论很简单,一旦你有了要评论的帖子的ID,只需运行

 var comment = 'Reading JS SDK documentation';
 var POST_ID = '1231412351234';
 FB.api('/'+POST_ID+'/comments', 'post',  message: comment , function(response) 
  if (!response || response.error) 
    alert('Error occured');
   else 
    alert('Great! It worked!');
  
);

同样,喜欢也更简单。来自相同的文档:

You can like a Post by issuing a HTTP POST request to the POST_ID/likes connection with the publish_stream permission. You can suppress the notification created when liking a Post by passing a notify parameter with value of false.

所以,在 Javascript 中:

 var POST_ID = '1231412351234';
 FB.api('/'+POST_ID+'/likes', 'post', function(response) 
  if (!response || response.error) 
    alert('Error occured');
   else 
    alert('Great! It worked!');
  
);

【讨论】:

谢谢你!我一到我的电脑就试试这个,如果它有效,我会通知你:) 还有一个问题。我将如何在我现有的代码中实现这一点?我会把你的代码等放在哪里? 这个细节我帮不了你,我需要整个项目。将该代码放在您想要喜欢/评论的地方。 好的,所以我现在有时间尝试一下。起初它似乎工作,但我遇到了一个大问题。因此,我进行了 if/else 检查以查看是否存在与帖子相关的对象。在这种情况下,like 函数接受变量 object_id。但是,如果有一个标准帖子(没有任何对象),它会使用从“response.data[i].id”中检索到的变量 Post_id。然而,这在控制台中给了我一条错误消息(当我按下类似按钮时):“SyntaxError:小数点后必须至少有一位数字”。帖子的 id 如下所示:xxxxxxx_xxxxxx

以上是关于脸书更新上的评论和喜欢的主要内容,如果未能解决你的问题,请参考以下文章

我应该在我的图像表中存储评论/喜欢/不喜欢的数量吗?

如何通过 iPhone SDK 中的 FBconnect 或 Graph API 在 facebook 中评论或喜欢照片?

如何防止用户多次喜欢评论,如“facebook或youtube喜欢/不喜欢系统”? [关闭]

用户信息 脸书

Facebook Like 按钮显示喜欢、分享和评论的总数 - 而不仅仅是喜欢的数量

如何从包含所有喜欢和评论的页面中获取所有帖子?