0

我一直在努力尝试从 facebook API 中提取朋友的生日,并且我已经能够提取朋友的 uid,但是当我用其他任何东西(即姓名、性别、生日等)替换 uid 请求时,它会破坏代码. 任何见解都会有很大帮助。谢谢

 <div id="fb_login"> 

             <div id="fb-root"></div>
          <script>
            window.fbAsyncInit = function() {
              FB.init({
                appId      : 'APP_ID',
                status     : true, 
                cookie     : true,
                xfbml      : true,
                oauth      : true,
              });
            };
            (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 class="fb-login-button" scope="user_birthday,friends_birthday">Login with Facebook</div>



      <div id="bday_display">
      <?php
                $app_id = 'APP_ID';
                $app_secret = 'APP_SECERT';
                $my_url = 'MY_URL';


                $code = $_REQUEST["code"];



               //auth user
               if(empty($code)) {
                  $dialog_url = 'https://www.facebook.com/dialog/oauth?client_id=' 
                  . $app_id . '&redirect_uri=' . urlencode($my_url) ;
                  echo("<script>top.location.href='" . $dialog_url . "'</script>");
                }

                //get user access_token
                $token_url = 'https://graph.facebook.com/oauth/access_token?client_id='
                  . $app_id . '&redirect_uri=' . urlencode($my_url) 
                  . '&client_secret=' . $app_secret 
                  . '&code=' . $code;
                $access_token = file_get_contents($token_url);

                // Run fql query
                $fql_query_url = 'https://graph.facebook.com/'
                  . '/fql?q=SELECT+uid2+FROM+friend+WHERE+uid1=me()'
                  . '&' . $access_token;
                $fql_query_result = file_get_contents($fql_query_url);
                $fql_query_obj = json_decode($fql_query_result, true);



                //display results of fql query
                echo '<pre>';
                print_r("query results:");
                print_r($fql_query_obj);
                echo '</pre>';





              ?>

    </div>
4

2 回答 2

0

试试这个 fql 语句。请记住,并非每个人都会填写他们的生日字段,或者如果他们已经填写了,则将其显示给您。

SELECT name, birthday_date FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me() )

您可以添加AND strlen(birthday_date) > 0到上述 FQL 的末尾以过滤掉没有可见生日的朋友。

于 2012-05-11T16:21:38.677 回答
0

这是有效的代码。感谢您对 cpilko 的所有帮助。没有你的帮助,我不可能完成它。

        try{
            $fql    =   "SELECT name, birthday_date FROM user WHERE uid IN (SELECT uid2          FROM friend WHERE uid1=me())";
            $param  =   array(
                 'method'    => 'fql.query',
                'query'     => $fql,
                'callback'  => ''
            );
            $fqlResult   =   $facebook->api($param);
        }
        catch(Exception $o){
            d($o);
    }
}
于 2012-05-22T18:14:44.770 回答