【问题标题】:how to do fql.multiquery using facebook php sdk 3.0如何使用 facebook php sdk 3.0 执行 fql.multiquery
【发布时间】:2011-10-19 19:33:08
【问题描述】:

我正在从 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 进行多查询。

【问题讨论】:

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


    【解决方案1】:

    对于您的特定查询,请使用new 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

    【讨论】:

      【解决方案2】:

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

        $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,
        ));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-18
        • 2012-12-03
        • 1970-01-01
        相关资源
        最近更新 更多