Guardar comentarios con api de facebook

La funcionalidad de guardar comentarios de uno de mis portales se desactivo debido a actualizaciones en la api de facebook.

Aunque la funcionalidad de escribir los comentarios se mantuvo intacta, la de guardarlos en mi base de datos se perdió.

El código que tenia era algo como lo siguiente:

<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>
<div id="divfb_connect"></div>

<script type="text/javascript">
    var fbcDiv = document.getElementById('divfb_connect');
    var fbcUrl = 'http://www.mysite.com' + location.pathname;
    var fbcPath = location.pathname;
    var fbcTitle = document.title;
    var fbcXid = 'asdfqwer';

    fbcDiv.innerHTML = '<fb:comments numposts="10" candelete="true" canpost="true" url="' + fbcUrl + '" title="' + fbcTitle + '" xid="' + fbcXid + '" quiet="true"></fb:comments>';
    FB.init('21asdf231asd23f1', "xd_receiver.html");

    FB_RequireFeatures(["Comments"], function() {
    FB.CommentClient.add_onComment(function(comment) {

    var url = 'mypage.aspx?id=' + 279763 + '&comments=' + comment.post + '&user=' + comment.user;
    $.get(url, "", function handle_comments(data, status) {
        //code here
    });
    });

    });   
</script>

Investigando encontré que habia que realizar un cambio para usar la nueva versión. En esta se debia usar:

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({appId: 'your app id', status: true, cookie: true,
             xfbml: true});
  };
  (function() {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);
  }());
</script>

Y para poder controlar el evento de cuando se agrega un comentario se usa la función:

FB.Event.subscribe('comments.add', function(response) {
        alert('Comment Added')
});


La cual debe ir dentro de la función de window.fbAsyncInit despues de la función init, y dentro del fb:comment hay que agregar la propiedad notify en true.

Pero ahí fue donde iniciaron los problemas. El objeto response no posee propiedades que permitan acceder ni al id del usuario ni al texto que escribio como comentario. Pero he aqui una solución ingeniosa... la idea es obtener el comentario que se acabo de escribir. El código queda:

<div id="aclfb_connect"></div>
<script type="text/javascript">
    var fbcDiv = document.getElementById('aclfb_connect');
    var fbcUrl = 'http://www.mysite.com' + location.pathname;
    var fbcPath = location.pathname;
    var fbcTitle = document.title;
    var fbcXid = 'asdfqwer';

    fbcDiv.innerHTML = '<fb:comments numposts="10" candelete="true" canpost="true" url="' + fbcUrl + '" title="' + fbcTitle + '" xid="' + fbcXid + '" quiet="true" notify="true"></fb:comments><div id="fb-root"></div>';

    window.fbAsyncInit = function () {
        FB.init({ appId: '21asdf231asd23f1', status: true, cookie: true,
            xfbml: true
        });
        FB.Event.subscribe('comments.add', function (resp) {
          FB.api({
              method: 'comments.get',
              xid: fbcXid
          },
          function (response) {                   
              var fb_commentData = {
                  xid: response[0].xid,
                  fromid: response[0].fromid,
                  time: response[0].time,
                  text: response[0].text,
                  id: response[0].id,
                  username: response[0].username,
                  reply_xid: response[0].reply_xid,
                  post_id: response[0].post_id,
                  app_id: response[0].app_id,
                  object_id: response[0].object_id
              };
              var url = 'mypage.aspx?id='+ response[0].xid
 +'&comments=' + response[0].text + '&user=' + response[0].fromid + '&id=' + response[0].id + '&username=' + response[0].username + '&reply_xid=' + response[0].reply_xid + '&post_id=' + response[0].post_id;
              $.get(url, "", function handle_comments(data, status) {
                  //code here
              });

          });
        });
    };
    (function () {
        var e = document.createElement('script'); e.async = true;
        e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
        document.getElementById('fb-root').appendChild(e);
    } ());
  
</script>

Y por fin! logré guardar los comentarios que los usuarios escribian en mi portal.

Comentarios

  1. Amigo con ese codigo tambien puedo almacenar los comentarios en un proyecto de visual 2008

    ResponderEliminar
  2. si puedes dame mas pautas tambien sobre el api de facebook xq recien estoy q lo utilizo y lo necesito para un proyecto en visual basic 2008.

    Gracias.

    ResponderEliminar
  3. Si, este codigo también funciona con visual basic 2008. Lo que tienes que hacer, adicional a lo que ya tiene el post, es programar la página llamada mypage.aspx

    Dentro de esa página se envían por GET los datos del comentario y debes programarla para poder guardar estos datos ya en tu base de datos.

    ResponderEliminar
  4. hola si correo en google crome pero en firefox y en iexplore no jala me dice lo siguiente

    Webpage error details

    User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; InfoPath.2; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET4.0C; .NET CLR 3.0.30729)
    Timestamp: Wed, 15 Jun 2011 21:12:15 UTC


    Message: 'fbcDiv' is null or not an object
    Line: 9
    Char: 5
    Code: 0
    URI: http://pagina.com/facebook2/2.php

    ResponderEliminar
  5. Hola, yo no soy programador ni nada. Uso Website X5 para crear mi sitio.
    Segun FB aplique la version HTML5 del codigo para los comments.
    Si vas a http://developers.facebook.com/docs/reference/plugins/comments/
    la primer parte del codigo generado la inserto en la pagina principal y la segunda parte del codigo esto en cada subpagina donde quiero insertar el comment box
    El problema es que no se como modificar ese codigo para que me mande alertas cuando alguien comenta o presiona el boton like que tambien esta insertado ah.
    Hay alguna manera de alertar por facebook or por mail cuando algo llega? Lo mejor seria por mail pero decime si se puede al menos por face.

    Muchas Gracias

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Instalar programa como servicio Windows

Ejecutar programa como servicio windows server 2008

Habilitar Ping Firewall Windows 2008