¿Hay alguna forma de verificar programáticamente si un usuario compartió un enlace en Facebook?

Actualmente estoy usando jQuery para grabar cada clic en un enlace compartido de Facebook en mi sitio, pero estoy buscando una solución más precisa. En lugar de registrar los clics, me gustaría registrar los “recursos compartidos” reales. ¿Hay alguna forma de recuperar un mensaje de respuesta de Facebook después de que el usuario comparte un enlace?

Me encontré con esto hoy: http://graph.facebook.com/http://stackoverflow.com

Devuelve un recuento total de recursos compartidos para una URL especificada. Tengo URL únicas para cada usuario en mi aplicación, así que puedo rastrear sus recursos fácilmente usando esto.

También funciona para Twitter: http://urls.api.twitter.com/1/urls/count.json?url=http://stackoverflow.com

Mientras permanezca activo, puede utilizar el cuadro de diálogo ” Feed ” de Facebook en lugar del cuadro de diálogo ” Compartir ” para obtener SIEMPRE una confirmación de compartir. (Esto se aplica al Javascript Facebook SDK).

Aquí está mi entendimiento de las diferencias entre los dos:


Método compartido

FB.ui({ method: 'share', href: 'http://stackoverflow.com/questions/5363517', }, function(response){ console.log(response) }); 

Si el usuario ha INICIADO SESIÓN y ha autorizado su aplicación:

  • Si la publicación se compartió, obtendrá una identificación postal en la variable de response : {post_id: "10205041067000110_10205045578512895"} .
  • Si la publicación no se compartió, la response será nula.

Si el usuario NO ha INICIADO SESIÓN en su aplicación (aún necesitan iniciar sesión en Facebook):

  • La variable de response será nula independientemente de si el usuario compartió o no compartió.

Por lo tanto, si necesita absolutamente la confirmación de la acción, primero debe solicitar al usuario que inicie sesión. Esto puede no ser un problema para su aplicación, pero en mi caso esto agrega una fricción innecesaria al proceso de intercambio.


Método de alimentación

(Obsoleto pero aún activo)

 FB.ui({ method: 'feed', link: 'http://stackoverflow.com/questions/5363517', caption: 'Test Caption', }, function(response){ console.log(response) }); 

IRRESPECTIVA del estado de inicio de sesión (es decir, de su aplicación; aún deben iniciar sesión en Facebook):

  • Si una publicación fue realmente compartida, la variable de response devuelta por Facebook tendrá la identificación de la publicación: {post_id: "10205041067000110_10205045578512895"} .
  • Si la publicación no se compartió, la response será nula.

Al usar este método, siempre podrá saber si alguien publicó o no, independientemente de su estado de inicio de sesión.

Puede usar algo como ShareThis en lugar de su función jquery e incluso obtener más información, análisis, etc. Sin embargo, encontrará el mismo problema, creado a partir de recursos compartidos / me gusta externos, como el publicado aquí: http: // forums. sharethis.com/topic.php?id=2947

Esto es lo que hago … Crea el recurso compartido usando el anclaje normal que llama a esta función de JavaScript (espaciado o corchetes o algo podría estar desactivado):

 FB.ui( { display:'iframe', method: 'stream.publish', caption: 'Put something here', description: 'put something here', name: 'foo', link: 'http://www.foo.com', picture: 'http://img.rephp.com/php/img.gif' }, function (response) { if (response && response.post_id) { //this means the post was completed....response.post_id is the FB post ID $.ajax({ var URL = '/pages/ajax_InsertUserFacebookPost.aspx?'; URL += 'facebookpostid=' + response.post_id; type: "GET", url: URL, data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", async: true }); } else { //alert('Post was not published.'); } } ); 

A partir de abril de 2016, Twitter ha desaprobado v1 de su api y no proporciona una alternativa para el método anterior para determinar las acciones de un enlace. Tendrá que usar su API de búsqueda, que solo mantiene el recuento de recursos compartido durante los últimos 7 días, y ahora necesita suscribirse a su API de transmisión para mantener su cuenta de larga duración.

Alternativamente, puede usar un servicio gratuito como http://newsharecounts.com o http://opensharecount.com/ para que puedan suscribirse a la API en su nombre y mantener el conteo. Sin embargo, se espera que el conteo de acciones tarde un minuto (o más) en actualizarse.

De newsharecounts Preguntas frecuentes –

“No importa cuán grande sea su sitio web, ni cuántos años tenga su contenido, detectamos nuevas acciones en un plazo de 1 minuto en promedio”

Desde la página de inicio de opensharecount.com:

“Puede tomar algún tiempo para que entren resultados de búsqueda, por lo que inicialmente el recuento que se informa será cero en todos los enlaces. Póngase en contacto con nosotros si después de una hora sigue siendo cero”.

Re: FB sharing ( http://graph.facebook.com/(url) ), tenga en cuenta que es posible para el usuario utilizar el cuadro de diálogo de compartir y elegir la opción ‘Solo yo’ y todavía se cuenta de la misma manera que si hubieran compartido con sus amigos. Tenga en cuenta que el colaborador también puede eliminar la publicación poco después, pero las futuras llamadas a la API no lo reflejarán.