Комментарии и лайки на обновлениях в фейсбуке

Я читал на сайте developments.facebook.com, но они очень плохо объясняют эти вещи. Поэтому я надеюсь, что некоторые из вас могли бы объяснить мне, как я могу добавить комментарий и кнопку «Мне нравится» в статусах Facebook, используя JavaScript и Graph API.

Теперь у меня есть приложение, которое отображает домашнюю ленту вошедшего в систему пользователя (новостную ленту, если хотите). Чего я хочу, так это базовой функциональности 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 height="50px" width="50px" 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, которые содержат кнопку «Нравится» и комментарий, и по крайней мере один, чтобы отображать самые последние комментарии при нажатии (так же, как на Facebook). И мне нужно было бы добавить какой-то код JS, который отправляет запрос в facebook с идентификатором статуса/изображения, идентификатором пользователя, типом выполняемого действия (нравится или комментарий) и, наконец, какое содержание комментарий в таком случае.

Причина, по которой я запрашиваю эту информацию, заключается в том, что я работаю над проектом и просто пробую различные функции Facebook Graph API, поскольку они могут стать хорошим дополнением к функциям моего проекта, и это полезно знать. для будущих ссылок.

Надеюсь, некоторые из вас знают, что я могу сделать, чтобы заставить его работать

С уважением, Александр.


person Aleksander    schedule 26.02.2013    source источник


Ответы (1)


Лично я думаю, что Документы отлично справляются со своей задачей.

Из документов:

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

Комментировать просто: как только у вас есть идентификатор поста, который вы хотите прокомментировать, просто запустите

 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!');
  }
});
person Tommy Crush    schedule 26.02.2013
comment
Спасибо чувак! Я попробую это, как только доберусь до своего компьютера, и сообщу вам, сработало это или нет :) Еще один вопрос. Как мне реализовать это в моем уже существующем коде? Где бы я разместил ваш код и так далее? - person Aleksander; 26.02.2013
comment
Я не могу помочь вам с этой деталью, мне нужен весь проект. Поместите этот код туда, где вы хотите поставить лайк/прокомментировать. - person Tommy Crush; 26.02.2013
comment
Итак, у меня было время, чтобы попробовать это сейчас. Сначала казалось, что это работает, но я столкнулся с большой проблемой. Итак, я сделал проверку if/else, чтобы увидеть, есть ли объект, связанный с публикацией. В этом случае аналогичная функция принимает переменную object_id. Но если есть стандартный пост (без каких-либо объектов), он принимает переменную Post_id, которая извлекается из 'response.data[i].id'. Однако это дает мне сообщение об ошибке в консоли (когда я нажимаю кнопку «Мне нравится»): SyntaxError: По крайней мере одна цифра должна стоять после десятичной точки. Идентификатор поста выглядит так: xxxxxxx_xxxxxx - person Aleksander; 03.03.2013