繁体   English   中英

如何使用facebook php sdk 3.0做fql.multiquery

[英]how to do fql.multiquery using 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.')", "profiles" : "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.')", "profiles" : "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:解析器错误:位置0处意外的'{'

任何有助于了解如何使用新的PHP SDK进行多重查询的帮助表示赞赏。

对于您的特定查询,请使用新的 fql Graph 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 = $user)");
    $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

只需将查询作为关联数组传递:

  $common_fields_fql = 'SELECT uid, email, contact_email, first_name, last_name, birthday_date, pic_square, sex, hometown_location, current_location, is_app_user FROM user WHERE uid ';
  $fql = array(
    'friends' => 'SELECT uid2 FROM friend WHERE uid1 = me()',
    'friends_details' => $common_fields_fql . 'IN (SELECT uid2 FROM #friends)',
    'me' => $common_fields_fql . '= me()',
    'family' => 'SELECT uid, birthday, name, relationship FROM family WHERE profile_id = me()',
  );
  $details = $facebook->api(array(
    'method'   => 'fql.multiquery',
    'queries'  => $fql,
  ));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM