2013-07-03 4 views
1

Я пытаюсь создать приложение Facebook в Javascript, который позволит мне получить список статуса каждого друга с помощью FQL. Но кажется, что никаких результатов не возвращается из каждого запроса FQL. Вот мой код, слепленный из различных учебных шаблонов:Как получить статус друзей Facebook с помощью Javascript + FQL?

<html> 
<title>Testing Facebook Javascript SDK</title> 
<body> 
<div id="fb-root"></div> 
<script> 
    window.fbAsyncInit = function() { 
     // init the FB JS SDK 
     FB.init({ 
      appId  : 'MY_APP_ID', // App ID from the App Dashboard 
     channelUrl: '//www.myurl.net/channel.html', 
      status  : true, // check the login status upon init? 
      cookie  : true, // set sessions cookies to allow your server to access the session? 
      xfbml  : true // parse XFBML tags on this page? 
     }); 

    // Additional initialization code such as adding Event Listeners goes here 
    FB.getLoginStatus(function(response){ 
     if (response.status === 'connected'){ 
      showMyFriends(); 
      FB.api('/me/permissions',function(response){ 
       console.log(response); 
      }); 
     } else if (response.status === 'not_authorized'){ 
      login(); 
     } else { 
      login(); 
     } 
    }); 


    }; 
    function login(){ 
     FB.login(function(response){ 
      if (response.authResponse){ 
       alert('login'); 
      } else { 
       alert('cancelled'); 
      } 
     },{scope:'read_stream'}); 

    } 

    function showMyFriends(){ 
     FB.api('/me/friends',function(response){ 
      if(response.data){ 
       var length = response.data.length; 
       for(var i=0;i<50;i++){ 
        element=response.data[i]; 
        getAFriendStatus(element.id); 
       } 
      } 
     }); 
    } 

    function getAFriendStatus(friendUID){ 
     FB.api('/fql',{q:{"query1":"select message from status where uid="+friendUID}}, 
      function(response){ 
       console.log(response); 
      } 
     ); 
    } 



    // Load the SDK's source Asynchronously 
    // Note that the debug version is being actively developed and might 
    // contain some type checks that are overly strict. 
    // Please report such bugs using the bugs tool. 
    (function(d, debug){ 
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "https://connect.facebook.net/en_US/all" + (debug ? "/debug" : "") + ".js"; 
    ref.parentNode.insertBefore(js, ref); 
    }(document, /*debug*/ false)); 
</script> 
</body> 

Когда я проверяю консоль, все я получаю для каждого вызова getAFriendStatus() является:

Object {data: Array[1]} 
data: Array[1] 
0: Object 
fql_result_set: Array[0] 
name: "query1" 
__proto__: Object 
length: 1 
__proto__: Array[0] 
__proto__: Object 

Поскольку fql_result_set имеет размер 0 , Я думаю, что есть проблема с моим запросом. Я не думаю, что это проблема разрешения, потому что выход консольного FB.api('/me/permissions') является:

Object {data: Array[1], paging: Object} 
data: Array[1] 
0: Object 
basic_info: 1 
installed: 1 
read_stream: 1 

Так что я знаю, что у меня есть read_stream разрешения. Почему я не получаю статусы с этим запросом?

EDIT: Я просто попытался запрос FQL с

"select message from status where uid=me()" 

и я получил все мои последние сообщения о статусе. Кажется, что это только проблема получения статусов моих друзей? Может ли это быть связано с настройками конфиденциальности?

ответ

0

Это работает для меня, я использую

select message from status where uid = XXX 

, которая дает мне тот же результат, используя Graph API

XXX?fields=statuses 

Поскольку вы спрашиваете только для «read_stream», также необходимо для добавления разрешений для информации ваших друзей. Разрешение дополнительно вам необходимо обратиться за это

friends_status 

Без него, вы просто получите друг UID