c# - example - Haz que los amigos de mi amigo usen Graph API
get friends facebook api (4)
Si trato de obtener amigos de un usuario aleatorio obtengo HTTP 500 pero contiene esta respuesta:
{
"error": {
"type": "Exception",
"message": "(#604) Can''t lookup all friends of <UID>. Can only lookup for the logged in user (<MY_UID>), or friends of the logged in user with the appropriate permission"
}
}
que es bastante autoexplicativo.
Si trato de hacer amigos de mi amigo que permite ver a sus otros amigos, funciona bien. Si mi amigo eligió no permitir ver a sus otros amigos, recibo el mismo error.
Estoy tratando de hacer algo muy básico con la nueva API Graph.
Ya sé cómo conseguir a mis amigos: " https://graph.facebook.com/me/friends?access_token=4333ed34d ..."
Pero si tengo un amigo cuya identificación es 123456, entonces quiero obtener sus amigos: " https://graph.facebook.com/123456/friends?access_token=4333ed34d ..."
Pero tengo una excepción:
"El servidor remoto devolvió un error: (500) Error interno del servidor".
¿Por qué no puedo hacer eso? Es una tarea muy trivial preguntar desde la API.
realmente puedes robar la información del facebook público. No es bonito, toma un par de segundos, pero funciona.
Tengo un código JS que se ejecuta desde la consola y hace la solicitud de AJAX. El mismo facebook lo hace cuando solicita más amigos en la interfaz de usuario normal de Facebook cuando se desplaza hacia abajo (http://www.facebook.com/profile.php?sk=friends) . Luego analizo el resultado. Hasta ahora funciona sin problemas. Solo pido más amigos y cuando no obtengo una coincidencia, sé que los tengo todos.
No quiero compartir todo el código, pero esta es la parte esencial:
// Recursively load person friends
function getMoreFriends(job, uid, fb_dtsg, post_form_id, offset, callback, finished ){
var url = "http://www.facebook.com/ajax/browser/list/friends/all/?uid="+uid+"&offset="+offset+"&dual=1&__a=1&fb_dtsg="+fb_dtsg+"&lsd=&post_form_id="+post_form_id+"&post_form_id_source=AsyncRequest";
var request = { type: ''POST'', url: url, data: { __a: 1, dual: 1, offset: offset, uid: uid }, dataType: "text", complete: function(data){
var response = data.responseText.match(/HTML.*$/)[0];
response = response.replace(/u003c/gi,"<");
response = response.replace(///u([a-f0-9]{4})/gm, "&#x$1;").replace(//////g,"/").replace(////g,'''');
response = response.match(/^.*<//div><//div><//div>/);
if(response != null){
response = response[0].replace("HTML(","");
var people = [];
$jq(response).find(".UIImageBlock").each( function(){
var newPerson = new Person( $jq(this).find(''.UIImageBlock_Content a'').text(), $jq(this).find(''a'').first().attr(''href''), $jq(this).find(''img'').attr(''src''), jQuery.parseJSON( $jq(this).find(''a'').last().attr(''data-gt'') ).engagement.eng_tid );
people.push( newPerson );
});
callback(people);
getMoreFriends(job, uid, fb_dtsg, post_form_id, offset+60, callback, finished);
}
} };
job.addToQueue( request );
if(job.state != "processing"){
if (typeof finished != "function" ){ finished = function(){}; }
job.startProcessing({ finished: function(){ finished(); } } );
}
}
Puede obtener las variables necesarias de un usuario actualmente conectado de esta manera:
function loadFriends(person, onInit, store, callback){
info("loading friends of "+person.name+" initiated");
//addStatus("loading friends of "+person.name+" initiated");
if (typeof onInit == "function" ){
onInit();
}
if(person.id == -1){
error("Person "+person.name+" doesn''t have an id.!");
addStatus("Person "+person.name+" doesn''t have an id.!","error");
return false;
}
else {
// Load friends
var fb_dtsg = $jq(''input[name="fb_dtsg"]'').eq(0).val();
var post_form_id = $jq(''#post_form_id'').val();
var loadFriendsJob = ajaxManager.addJob({limit: 1});
getMoreFriends(loadFriendsJob,person.id, fb_dtsg, post_form_id, 0, function(people){ // callback on each iteration
d( "Loaded "+people.length+" friends of " + person.name );
store(people);
},function(){ // callback on finish
info("loading friends of "+person.name+" finished");
//addStatus("loading friends of "+person.name+" finished");
if (typeof callback == "function" ){ callback(); }
});
}
}
Entiendo que esto es probablemente inútil para su caso, ya que este es JS. De todos modos, alguien podría encontrar esto útil.
PD: $ jq = jQuery. PPS: esos objetos de trabajo se encargan de las solicitudes secuenciales de ajax. Descubrí que los necesito ya que mi FF no tenía ganas de hacer más de 2000 solicitudes de AJAX al mismo tiempo :-D
Simplemente no puedes hacer eso.
Si necesita el permiso extendido apropiado cuando los usuarios autorizan su aplicación, puede acceder a algunos datos de los amigos del usuario actualmente registrado, pero eso es todo lo que obtiene ( http://developers.facebook.com/docs/authentication/permissions see: friends_xxxx permisos), pero no a sus amigos.
Tengo amigos de amigos (limitado). Tuve el mismo problema Aunque es muy tarde para responder la pregunta, ayudará a alguien. Es por eso que estoy respondiendo esta pregunta.
Podemos hacer amigos de amigos que son usuarios de la aplicación. Necesita los siguientes requisitos:
- Tu amigo necesita usar la aplicación (permisos aceptados para la aplicación).
- Permiso de la aplicación read_stream, publish_stream, publish_checkins.
$ fb_id = id de usuario cuyos amigos de amigos requirieron.
Pruebe esta consulta fql.
$ query = "SELECT uid, name, work_history FROM usuario WHERE uid IN (SELECCIONAR uid2 FROM friend DONDE uid1 IN (SELECCIONAR uid FROM usuario WHERE uid IN (SELECCIONAR uid2 FROM friend DONDE uid1 = $ fb_id) y is_app_user = 1))";