Facebook直播好友搜索fql问题

时间:2012-02-01 12:59:56

标签: php facebook facebook-fql facebook-php-sdk

我在朋友搜索方面遇到了一些问题。我正在开发app以发布一些东西来选择朋友们的墙。我正在使用JavaScript SDK登录并获得权限。

我的初始化功能:

FB.init({
                appId: 'xxxxxxxxx',
                status: true,
                cookie: true,
                xfbml: true,
                oauth: true});

登录功能:

FB.login(function(response) {
                    if (response.authResponse){
                        //if loged in
                    }else{ 
                       //if canceled
                    }
                }, {scope: 'publish_stream'});

在此之后我使用的输入id是用jQuery搜索朋友实时搜索:

$("#search").keyup(function(){
        $("#friends").load("draugai.php",{
            "search":$("#search").val()
        }, function(){
            $(".friend").click(function(){
                $(this).addClass("selected").siblings().removeClass("selected");
            });
        });
    });

我的php文件使用fql进行朋友搜索:

   require_once('facebook.php');

$config = array(
    'appId' => 'XXX',
    'secret' => '1234',
    'cookie' => true
);
$facebook = new Facebook($config);
try {
    $user_id = $facebook->getUser();
} catch (FacebookApiException $e) {
    echo($e->getType());
    echo($e->getMessage());
}

if ($_POST['search'] != "") {
    $search = strtolower($_POST['search']);
    $fql = "SELECT uid, name, pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) AND strpos(lower(name),'$search') >= 0 ORDER BY name";
} else {
    $fql = "SELECT uid, name, pic_square FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) ORDER BY name";
}
if ($user_id) {
    try {
        $ret_obj = $facebook->api(array(
            'method' => 'fql.query',
            'query' => $fql,
                ));
        foreach ($ret_obj as $value) {
            echo "<div class=\"friend\" uid=\"" . $value['uid'] . "\">";
            echo $value["name"] . "<img src=\"" . $value['pic_square'] . "\"/>";
            echo "</div>";
        }
    } catch (FacebookApiException $e) {
        echo($e->getType());
        echo($e->getMessage());
    }
} else {
    echo "no user";
}

我对这款应用有一些问题:

  • 我无法在谷歌浏览器上工作。当我使用firefox everythig工作很好,但当我尝试在Chrome php文件打印“没有用户”。如果我根本不登录,它的行为是一样的。
  • 另一个问题是这种实时搜索工作非常慢。它在5-6秒后发送响应。如何提高搜索速度?起初我努力使用请求对话框,但我只想选择一个用户。

我希望我解释每一个都很容易理解。我对我可怜的英语很有兴趣。

感谢您的回答和建议。

1 个答案:

答案 0 :(得分:0)

您可以考虑使用Feed Dialog。它使用(非常熟悉的)下拉列表进行朋友选择(您的用户无疑会熟悉它)。你可以留下朋友搜索到Facebook 您已经证明可以使用JavaScript SDK来调用login方法,因此调用FB.ui()方法应该相当直接。以下是我上面链接的Facebook文档中的代码示例。

var obj = {
  method: 'feed',
  link: 'https://developers.facebook.com/docs/reference/dialogs/',
  picture: 'http://fbrell.com/f8.jpg',
  name: 'Facebook Dialogs',
  caption: 'Reference Documentation',
  description: 'Using Dialogs to interact with users.'
};

function callback(response) {
  document.getElementById('msg').innerHTML = "Post ID: " + response['post_id'];
}

FB.ui(obj, callback);

callback功能中,您可以通过检查是否存在post_id参数来检测到帖子是否成功。

<小时/> 让Facebook帮你解决!A little bird once told me good programmers are always the lazy ones。 )