如何做fql.multiquery使用Facebook php sdk 3.0 [英] how to do fql.multiquery using facebook php sdk 3.0

查看:101
本文介绍了如何做fql.multiquery使用Facebook php sdk 3.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在从2.x PHP SDK迁移到3.x.所有的多次调用都被打破,我无法弄清楚如何解决。



使用oauth javascript的Facebook连接登录工作,并允许当前用户的数据被访问服务器端。我认为这验证我的访问令牌是合法的。



我尝试过以下代码变体,每次都会收到错误:



旧方式:

  $ id = $ fb-> getUser(); // RETURNS A VALID USER ID 
$ fql ='{friends:SELECT uid FROM user WHERE has_added_app = 1 and uid IN(SELECT uid2 FROM friend WHERE uid1 ='。$ id。'),配置文件:SELECT uid,name,pic_square FROM user WHERE uid IN(SELECT uid FROM #friends)}';

$ response = $ fb-> api(array('method'=>'fql.multiquery','queries'=> $ fql));


出现错误:PHP致命错误:未捕获异常:102:需要用户会话\\ n抛出







假设有新的方式:

  $ id = $ fb-> getUser(); // RETURNS A VALID USER ID 
$ fql ='{friends:SELECT uid FROM user WHERE has_added_app = 1 and uid IN(SELECT uid2 FROM friend WHERE uid1 ='。$ id。'),配置文件:SELECT uid,name,pic_square FROM user WHERE uid IN(SELECT uid FROM #friends)}';

$ response = $ fb-> api(array('method'=>'fql.query','query'=> $ fql));

提供错误:PHP致命错误:未捕获异常:601:解析器错误:意外的{'at位置0




非常感谢任何帮助理解如何使用新的PHP SDK进行多重查询。

$对于您的特定查询,请使用 fql 图API端点,只有一个查询:

  $ user = $ facebook-> getUser(); 
if($ user){
try {
$ fql = urlencode(SELECT uid,name,pic_square FROM user WHERE is_app_user = 1 AND uid IN(SELECT uid2 FROM friend WHERE uid1 = $用户));
$ response = $ facebook-> api(/ fql?q = {$ fql});
} catch(FacebookApiException $ e){
echo'< pre>'。htmlspecialchars(print_r($ e,true))。'< / pre>
$ user = null;
}
}

还可以使用 is_app_user 而不是已弃用的 has_added_app 一个!


I'm in the process of migrating from the 2.x PHP SDK to 3.x. All of the multiquery calls are broken and I haven't been able to figure out how to resolve.

The facebook connect login using oauth javascript works and allows data for the current user to be accessed server side. I assume this verifies my access token is legit.

I've tried the following code variations and get errors each time:

Old way:

        $id = $fb->getUser(); // RETURNS A VALID USER ID
        $fql = '{ "friends" : "SELECT uid FROM user WHERE has_added_app=1 and uid IN (SELECT uid2 FROM friend WHERE uid1 = '.$id.')", "profiles" : "SELECT uid, name, pic_square FROM user WHERE uid IN (SELECT uid FROM #friends)"}';

        $response = $fb->api( array('method' => 'fql.multiquery','queries' => $fql));


Gives the error: PHP Fatal error: Uncaught Exception: 102: Requires user session\n thrown



Assumed New Way of doing it:

        $id = $fb->getUser(); // RETURNS A VALID USER ID
        $fql = '{ "friends" : "SELECT uid FROM user WHERE has_added_app=1 and uid IN (SELECT uid2 FROM friend WHERE uid1 = '.$id.')", "profiles" : "SELECT uid, name, pic_square FROM user WHERE uid IN (SELECT uid FROM #friends)"}';

        $response = $fb->api( array('method' => 'fql.query','query' => $fql));

Gives the error: PHP Fatal error: Uncaught Exception: 601: Parser error: unexpected '{' at position 0

Any help understanding how to do a multiquery using the new PHP SDK is appreciated.

解决方案

For your particular query, use the new fql Graph API end-point and in only one query:

$user = $facebook->getUser();
if ($user) {
  try {
    $fql = urlencode("SELECT uid, name, pic_square FROM user WHERE is_app_user = 1 AND uid IN (SELECT uid2 FROM friend WHERE uid1 = $user)");
    $response = $facebook->api("/fql?q={$fql}");
  } catch (FacebookApiException $e) {
    echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>';
    $user = null;
  }
}

Also use the is_app_user instead of the deprecated has_added_app one!

这篇关于如何做fql.multiquery使用Facebook php sdk 3.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆