1

我编写了以下代码来了解 fql 多查询是如何工作的:

include_once "fbmain.php";
try{     
$your_id=xxxxxxxx;
     $fql= '{
     "friends":"SELECT uid2 FROM friend WHERE uid1='.$your_uid.',"
     "friendinfo":"SELECT * FROM standard_user_info WHERE uid IN (SELECT uid2
                  FROM #friends)"
             }';
$res = $facebook->api_client->fql_multiquery($fql);   
   }
catch(Exception $o){
        d($o); // d() is function to print
    }

但输出显示错误

在第 9 行调用非对象上的成员函数 fql_multiquery()

我也尝试过其他查询而不是这两个,但问题仍然存在。我正在使用 php sdk 3.0。

请帮忙。

4

2 回答 2

0

我不使用多查询,因为 fql 已移至图形 api。相反,我使用批处理请求。这是 /feed 请求的示例,第 10 个结果的评论和第 10 个帖子的永久链接的 fql multi。我相信这对于您需要的东西来说有点过头了,但这是我混合图形和 fql 以及使用名称功能的最佳示例,这似乎是您携带朋友所需要的。

https://developers.facebook.com/docs/reference/api/batch/

<?php 
    if($type=="home"){
$relURL = '/'.$pageid.'/'.$type.'?'.$access_token.'%26limit='.$limit.'%26return_ssl_resources=1%26fields=id,from,name,message,likes,comments,link,picture,caption,story,source,created_time,type,actions,application,object_id,description%26since='.$since.'%26until='.$until.'%26offset='.$offset.'';
    }else{
$relURL = '/'.$pageid.'/'.$type.'?'.$app_access_token.'%26limit='.$limit.'%26return_ssl_resources=1%26fields=id,from,name,message,likes,comments,link,picture,caption,story,source,created_time,type,actions,application,object_id,description%26since='.$since.'%26until='.$until.'%26offset='.$offset.'';
    }   
$queryProfile = array(
        array('method' => 'GET', 'relative_url' => '/'.$pageid.'?fields=id,name,link,picture%26'.$app_access_token.''),

    array('method' => 'GET', 'relative_url' => ''.$relURL.'', 'name' => 'comments', 'omit_response_on_success' => false),   
        array('method' => 'GET', 'relative_url' => '/{result=comments:$.data.0.id}/comments?fields=id,from,message,created_time%26limit=3%26offset=0'),
        array('method' => 'GET', 'relative_url' => '/{result=comments:$.data.1.id}/comments?fields=id,from,message,created_time%26limit=3%26offset=0'),
        array('method' => 'GET', 'relative_url' => '/{result=comments:$.data.2.id}/comments?fields=id,from,message,created_time%26limit=3%26offset=0'), 
        array('method' => 'GET', 'relative_url' => '/{result=comments:$.data.3.id}/comments?fields=id,from,message,created_time%26limit=3%26offset=0'), 
        array('method' => 'GET', 'relative_url' => '/{result=comments:$.data.4.id}/comments?fields=id,from,message,created_time%26limit=3%26offset=0'), 
        array('method' => 'GET', 'relative_url' => '/{result=comments:$.data.5.id}/comments?fields=id,from,message,created_time%26limit=3%26offset=0'), 
        array('method' => 'GET', 'relative_url' => '/{result=comments:$.data.6.id}/comments?fields=id,from,message,created_time%26limit=3%26offset=0'), 
        array('method' => 'GET', 'relative_url' => '/{result=comments:$.data.7.id}/comments?fields=id,from,message,created_time%26limit=3%26offset=0'),
        array('method' => 'GET', 'relative_url' => '/{result=comments:$.data.8.id}/comments?fields=id,from,message,created_time%26limit=3%26offset=0'),
        array('method' => 'GET', 'relative_url' => '/{result=comments:$.data.9.id}/comments?fields=id,from,message,created_time%26limit=3%26offset=0'),
        array('method' => 'GET', 'relative_url' => '/fql?q=SELECT+permalink+FROM+stream+WHERE+source_id=\''.$pageid.'\'+AND+post_id=\'{result=comments:$.data.0.id}\''),
        array('method' => 'GET', 'relative_url' => '/fql?q=SELECT+permalink+FROM+stream+WHERE+source_id=\''.$pageid.'\'+AND+post_id=\'{result=comments:$.data.1.id}\''),
        array('method' => 'GET', 'relative_url' => '/fql?q=SELECT+permalink+FROM+stream+WHERE+source_id=\''.$pageid.'\'+AND+post_id=\'{result=comments:$.data.2.id}\''),
        array('method' => 'GET', 'relative_url' => '/fql?q=SELECT+permalink+FROM+stream+WHERE+source_id=\''.$pageid.'\'+AND+post_id=\'{result=comments:$.data.3.id}\''),
        array('method' => 'GET', 'relative_url' => '/fql?q=SELECT+permalink+FROM+stream+WHERE+source_id=\''.$pageid.'\'+AND+post_id=\'{result=comments:$.data.4.id}\''),
        array('method' => 'GET', 'relative_url' => '/fql?q=SELECT+permalink+FROM+stream+WHERE+source_id=\''.$pageid.'\'+AND+post_id=\'{result=comments:$.data.5.id}\''),
        array('method' => 'GET', 'relative_url' => '/fql?q=SELECT+permalink+FROM+stream+WHERE+source_id=\''.$pageid.'\'+AND+post_id=\'{result=comments:$.data.6.id}\''),
        array('method' => 'GET', 'relative_url' => '/fql?q=SELECT+permalink+FROM+stream+WHERE+source_id=\''.$pageid.'\'+AND+post_id=\'{result=comments:$.data.7.id}\''),
    //array('method' => 'GET', 'relative_url' => '/'.$pageInfo[id].'/photos?fields=id,name%26limit=9')
);
$batchResponse = $facebook->api('?batch='.json_encode($queryProfile), 'POST');
    $pageInfo = json_decode($batchResponse[0]['body'], true);
    $pageType = $pageInfo[type];
    $pageLink = $pageInfo[link];
    $thispageid = $pageInfo[id];
    $MEcomments = json_decode($batchResponse[1]['body'], true);
?>
于 2012-03-26T23:28:06.297 回答
0

看起来相当有问题的实例化

$facebook->api_client

还值得注意的是,在 [standard_user_info] 列 [uid] 是字符串类型,因此您可能还需要添加引号。
https://developers.facebook.com/docs/reference/fql/standard_user_info/

根据 FB 文档,FQL 多查询应该比后续的批处理调用更快。 https://developers.facebook.com/docs/reference/fql/

于 2012-05-22T14:27:51.140 回答