4

私は新しいGraphAPIで非常に基本的なことをしようとしています。

友達を作る方法はすでに知っています:「https ://graph.facebook.com/me/friends?access_token=4333ed34d ...」

しかし、 IDが123456の友達がいる場合は、その友達を取得したいと思います: " https ://graph.facebook.com/123456/friends?access_token=4333ed34d ..."

しかし、私は例外を受け取ります:

「リモートサーバーがエラーを返しました:(500)内部サーバーエラー。」

なぜ私はそれをすることができないのですか?APIから質問するのは非常に簡単な作業です。

4

4 に答える 4

8

ランダムなユーザーの友達を取得しようとすると、HTTP 500 が返されますが、次の応答が含まれています。

{
   "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"
   }
}

これはかなり自明です。

他の友達を表示できる友達の友達を取得しようとすると、うまくいきます。友人が他の友人の表示を許可しないことを選択した場合、同じエラーが発生します。

于 2010-08-06T15:31:48.800 に答える
6

あなたは実際に公開Facebookから情報を盗むことができます。きれいではなく、数秒かかりますが、機能します。

コンソールから実行してAJAXリクエストを行うJSコードがあります-下にスクロールしたときに通常のFacebookUIでより多くの友達をリクエストするときに同じFacebookが作成します(http://www.facebook.com/profile.php?sk=friends) 。次に、結果を解析します。これまでのところ、問題なく動作します。私はただもっと友達を求めます、そして私がマッチを得ることができないとき、私は私が彼ら全員を持っていることを知っています。

コード全体を共有したくありませんが、これは重要な部分です。

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

次のように、現在ログインしているユーザーから必要な変数を取得できます。

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

}

これはJSなので、これはおそらくあなたのケースには役に立たないことを理解しています。とにかく、誰かがこれが役に立つと思うかもしれません。

PS:$ jq=jQuery。PPS:これらのジョブオブジェクトはシーケンシャルなajaxリクエストを処理します。私のFFは2000以上のAJAXリクエストを同時に行う気がしなかったので、私はそれらが必要であることがわかりました:-D

于 2011-08-10T14:32:41.433 に答える
4

あなたはそれをすることはできません。

ユーザーがアプリを承認するときに適切な拡張アクセス許可が必要な場合は、現在ログインしているユーザーの友達の一部のデータにアクセスできますが、取得できるのはそれだけです ( http://developers.facebook.com/docs/authentication/permissions参照: friends_xxxxパーミッション)、しかし彼/彼女の友達は対象外です。

于 2010-08-10T15:13:58.363 に答える
2

友達の友達ができました(限定)。私は同じ問題を抱えていました。質問に答えるのは非常に遅いですが、誰かを助けるでしょう. だからこそ、この質問に答えます。

アプリユーザーである友達の友達を得ることができます。次の要件が必要です。

  1. あなたの友人はアプリケーションを使用している必要があります(アプリの許可された権限)。
  2. アプリケーション read_stream、publish_stream、publish_checkins からの許可。

$fb_id= 友達の友達が要求したユーザー ID。

この fql クエリを試してください。

$query="SELECT uid, name, work_history FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 IN (SELECT uid FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = $fb_id ) and is_app_user=1) )";

于 2012-02-25T12:17:47.623 に答える