Pregunta

Estoy tratando de hacer una cosa muy básica con la nueva API de gráficos.

Ya sabe cómo conseguir mis amigos: " https://graph.facebook.com/me/friends?access_token=4333ed34d ... "

Pero si tengo un amigo que es ID es 123456, entonces yo desee obtener sus los amigos: " https://graph.facebook.com/123456/friends?access_token=4333ed34d ... "

Pero consigo 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 para pedir a la API.

¿Fue útil?

Solución

Si intento de conseguir amigos de un usuario al azar I GET de 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 auto-explicativo.

Si intento de conseguir amigos de mi amigo que permite la visualización de sus otros amigos que trabaja muy bien. Si mi amigo eligió para no permitir la visualización de sus otros amigos me sale el mismo error.

Otros consejos

Se puede robar podía comprender la información de facebook pública. No es bonito, toma un par de segundos, pero las obras.

Tengo un código JS que se extiende desde la consola y hace petición AJAX - facebooks los mismos hace que al solicitar más amigos en el facebook de interfaz de usuario regular cuando se desplaza hacia abajo (http://www.facebook.com/profile.php?sk = amigos). Entonces analizar el resultado. Hasta ahora funciona perfectamente. Yo sólo pido más amigos y cuando no consigo un partido, 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(); } } );
    }
}

Se puede obtener las variables neccesary de un usuario conectado actualmente como esto:

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(); }
        });
    }

}

Yo entiendo que esto es probablemente inútil para su caso ya que esta es JS. De todos modos, alguien podría encontrar este útil.

P.S .: $ jq = jQuery. P.P.S .: aquellos objetos de trabajo se ocupan de las peticiones Ajax secuenciales. Descubrí que los necesito ya que mi FF no tenía ganas de hacer la solicitud 2000+ AJAX al mismo tiempo: -D

Usted simplemente no puede hacer eso.

Si necesita la autorización extendida apropiada cuando los usuarios autorizan su aplicación, se puede acceder a algunos datos de los amigos del usuario que ha iniciado sesión, pero eso es todo lo que obtienes ( http://developers.facebook.com/docs/authentication/permissions ver:. friends_xxxx permisos), pero no su / sus amigos

Tengo amigos de amigos (limitado). Yo tenía el mismo problema. A pesar de que es muy tarde para responder a la pregunta, que le ayudará a alguien. Es por eso que responder a esta pregunta.

puede conseguir amigos de los amigos son los usuarios de la aplicación. Se necesita requisitos siguientes:

  1. Su amigo necesita estar usando la aplicación (permisos aceptados para su aplicación).
  2. Permiso de read_stream aplicación, publish_stream, publish_checkins.

$ fb_id = ID de usuario cuyo amigos de amigos requerido.

Trate de esta consulta FQL.

  

$ consulta = "SELECT uid, nombre, work_history DE DONDE usuario UID IN (SELECT   uid2 DE amigo DONDE EN uid1 (UID SELECT usuario en que UID   (SELECT uid2 DE DONDE amigo uid1 = $ fb_id) y is_app_user = 1)) ";

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top