javascript - example - graph api v2 3 facebook
Cómo verificar si a un usuario le gusta mi página de Facebook o URL usando la API de Facebook (5)
Aunque esta publicación lleva aquí bastante tiempo, las soluciones no son JS puras. Aunque Jason notó que solicitar permisos no es ideal, lo considero una buena cosa ya que el usuario puede rechazarlo explícitamente. Todavía publico este código, aunque (casi) lo mismo también se puede ver en otra publicación de ifaour . Considere esto como la única versión de JS sin demasiada atención a los detalles.
El código básico es bastante simple:
FB.api("me/likes/SOME_ID", function(response) {
if ( response.data.length === 1 ) { //there should only be a single value inside "data"
console.log(''You like it'');
} else {
console.log("You don''t like it");
}
});
Alternativamente, reemplázame con la ID de usuario adecuada de otra persona (es posible que necesites modificar los permisos que se friends_likes
a continuación para hacer esto, como friends_likes
) Como se señaló, necesitas más que el permiso básico:
FB.login(function(response) {
//do whatever you need to do after a (un)successfull login
}, { scope: ''user_likes'' });
Creo que me estoy volviendo loco. No puedo conseguir que funcione.
Simplemente quiero comprobar si a un usuario le ha gustado mi página con javascript en una aplicación iFrame
.
FB.api({
method: "pages.isFan",
page_id: my_page_id,
}, function(response) {
console.log(response);
if(response){
alert(''You Likey'');
} else {
alert(''You not Likey :('');
}
}
);
Esto devuelve: Falso
Pero soy un fan de mi página, ¿no debería ser verdad?
Puede hacerlo en JavaScript como tal (Basándose en la respuesta de @ dwarfy a una pregunta similar ):
<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<style type="text/css">
div#container_notlike, div#container_like {
display: none;
}
</style>
</head>
<body>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : ''YOUR_APP_ID'', // App ID
channelUrl : ''http(s)://YOUR_APP_DOMAIN/channel.html'', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
FB.getLoginStatus(function(response) {
var page_id = "YOUR_PAGE_ID";
if (response && response.authResponse) {
var user_id = response.authResponse.userID;
var fql_query = "SELECT uid FROM page_fan WHERE page_id = "+page_id+"and uid="+user_id;
FB.Data.query(fql_query).wait(function(rows) {
if (rows.length == 1 && rows[0].uid == user_id) {
console.log("LIKE");
$(''#container_like'').show();
} else {
console.log("NO LIKEY");
$(''#container_notlike'').show();
}
});
} else {
FB.login(function(response) {
if (response && response.authResponse) {
var user_id = response.authResponse.userID;
var fql_query = "SELECT uid FROM page_fan WHERE page_id = "+page_id+"and uid="+user_id;
FB.Data.query(fql_query).wait(function(rows) {
if (rows.length == 1 && rows[0].uid == user_id) {
console.log("LIKE");
$(''#container_like'').show();
} else {
console.log("NO LIKEY");
$(''#container_notlike'').show();
}
});
} else {
console.log("NO LIKEY");
$(''#container_notlike'').show();
}
}, {scope: ''user_likes''});
}
});
};
// Load the SDK Asynchronously
(function(d){
var js, id = ''facebook-jssdk''; if (d.getElementById(id)) {return;}
js = d.createElement(''script''); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName(''head'')[0].appendChild(js);
}(document));
</script>
<div id="container_notlike">
YOU DON''T LIKE ME :(
</div>
<div id="container_like">
YOU LIKE ME :)
</div>
</body>
</html>
Donde el archivo channel.html en su servidor solo contiene la línea:
<script src="//connect.facebook.net/en_US/all.js"></script>
Hay una pequeña duplicación de código allí, pero entiendes la idea. Esto abrirá un cuadro de diálogo de inicio de sesión la primera vez que el usuario visita la página (que no es exactamente ideal, pero funciona). En visitas posteriores, nada debería aparecer.
Puedes usar (PHP)
$isFan = file_get_contents("https://api.facebook.com/method/pages.isFan?format=json&access_token=" . USER_TOKEN . "&page_id=" . FB_FANPAGE_ID);
Eso devolverá uno de tres:
- cadena verdadera cadena falso json
- respuesta formateada de error si token
- o page_id no son válidos
Supongo que la única manera de no usar token para lograr esto es con la solicitud firmada que Jason Siffring acaba de publicar. Mi ayudante con PHP SDK:
function isFan(){
global $facebook;
$request = $facebook->getSignedRequest();
return $request[''page''][''liked''];
}
También me arranqué el pelo por encima de este. Tu código solo funciona si el usuario ha otorgado un permiso extendido para lo que no es ideal.
En pocas palabras, si $_REQUEST[''signed_request'']
la opción avanzada de OAuth 2.0
para Canvas, Facebook enviará $_REQUEST[''signed_request'']
junto con cada página solicitada en su aplicación de pestañas. Si analiza esa solicitud firmada, puede obtener información sobre el usuario, incluso si le gustó la página o no.
function parsePageSignedRequest() {
if (isset($_REQUEST[''signed_request''])) {
$encoded_sig = null;
$payload = null;
list($encoded_sig, $payload) = explode(''.'', $_REQUEST[''signed_request''], 2);
$sig = base64_decode(strtr($encoded_sig, ''-_'', ''+/''));
$data = json_decode(base64_decode(strtr($payload, ''-_'', ''+/''), true));
return $data;
}
return false;
}
if($signed_request = parsePageSignedRequest()) {
if($signed_request->page->liked) {
echo "This content is for Fans only!";
} else {
echo "Please click on the Like button to view this tab!";
}
}
Yo uso jquery para enviar los datos cuando el usuario presiona el botón Me gusta.
<script>
window.fbAsyncInit = function() {
FB.init({appId: ''xxxxxxxxxxxxx'', status: true, cookie: true,
xfbml: true});
FB.Event.subscribe(''edge.create'', function(href, widget) {
$(document).ready(function() {
var h_fbl=href.split("/");
var fbl_id= h_fbl[4];
$.post("http://xxxxxx.com/inc/like.php",{ idfb:fbl_id,rand:Math.random() } )
}) });
};
</script>
Nota: puede usar texto de entrada oculto para obtener el id de su botón. En mi caso, lo tomo de la url misma en "var fbl_id = h_fbl [4];" porque existe el ejemplo id: url: http://mywebsite.com/post/22/some-tittle
entonces analizo la url para obtener la identificación y luego la inserto en mi databse en el archivo like.php. de esta manera, no necesita pedir permisos para saber si alguien presiona el botón Me gusta, pero si quiere saber quién lo presione, se necesitan permisos.