Facebook PHP SDK越来越喜欢计数

问题描述

| 我有一个Facebook应用程序,该应用程序发布在用户墙上。在帖子中有一个(指向我的应用程序的)链接,在喜欢的页面中有一个喜欢的按钮。 现在,我正在制作一个每小时运行一次的脚本(从crontab中设置)。在该脚本中,我需要获得两个不同的喜欢计数: 喜欢在墙上张贴的消息。 喜欢在我的应用中完成的操作(使用按钮)。 对于第一个,我编写了以下代码
$result = $facebook->api(array(
              \'method\' => \'fql.query\',\'query\' => \'SELECT user_id FROM like WHERE post_id=\"\'.$idPost.\'\"\'
          ));
$likesWall = count($result);
代码有效,但突然无效。它引发以下异常:   致命错误:未捕获的异常:190:   验证访问令牌时出错:   会话无效,因为用户   登出。抛出在C:\\(...)\\ facebook \\ base_facebook.PHP   在656行 对于第二喜欢计数 我真的不知道该怎么做。我试过了:
$result = $facebook->api(array(
              \'method\' => \'links.getStats\',\'urls\' => $canvasPage.\"somePage.PHP?id=\".$id
          ));
但这引发:   致命错误:未捕获的CurlException:   60:SSL证书问题,请验证   CA证书还可以。细节:   错误:14090086:SSL   例程:SSL3_GET_SERVER_CERTIFICATE:证书   验证抛出失败   C:\\(...)\\ facebook \\ base_facebook.PHP   759行 然后将其提供给我:http://graph.facebook.com/?ids=http://apps.facebook.com/appName/somePage.PHP?id=68&Metadata=1其中粗体部分是网址我创建的赞按钮。当我将其放在浏览器中时,它会返回一个带有一些信息(包括喜欢计数)的JSON,但我不知道如何在脚本中使用它。 更多信息: 这是定义facebook对象的代码
include_once \'facebook/facebook.PHP\';
$facebook = new Facebook(array(
    \'appId\'  => $appId,\'secret\' => $secret
  ));
我正在使用最新版本的SDK(v3)。     

解决方法

        我找到了! 我是这样写的:
function get_content($url){
    $options = array(
        CURLOPT_RETURNTRANSFER => true,// return web page
        CURLOPT_HEADER         => false,// don\'t return headers
        CURLOPT_FOLLOWLOCATION => true,// follow redirects
        CURLOPT_ENCODING       => \"\",// handle all encodings
        CURLOPT_USERAGENT      => \"spider\",// who am i
        CURLOPT_AUTOREFERER    => true,// set referer on redirect
        CURLOPT_CONNECTTIMEOUT => 120,// timeout on connect
        CURLOPT_TIMEOUT        => 120,// timeout on response
        CURLOPT_MAXREDIRS      => 10,// stop after 10 redirects
        CURLOPT_SSL_VERIFYPEER => false,CURLOPT_SSL_VERIFYHOST => 2,);

    $ch      = curl_init( $url );
    curl_setopt_array( $ch,$options );
    $content = curl_exec( $ch );
    $err     = curl_errno( $ch );
    $errmsg  = curl_error( $ch );
    $header  = curl_getinfo( $ch );
    curl_close( $ch );

    $header[\'errno\']   = $err;
    $header[\'errmsg\']  = $errmsg;
    $header[\'content\'] = $content;
    //return $header;
    return $content;
}

$facebook = new Facebook(array(
    \'appId\'  => $appId,\'secret\' => $secret
));

$accessToken = get_content(\"https://graph.facebook.com/oauth/access_token?type=client_cred&client_id=\".$appId.\"&client_secret=\".$secret);
$accessToken = substr($accessToken,strpos($accessToken,\"=\") + 1);

$fqlResult = get_content(\"https://api.facebook.com/method/fql.query?query=SELECT+user_id+FROM+like+WHERE+post_id%3D\\\"\".$idPost.\"\\\"&format=json&access_token=\".$accessToken);
$fqlResult = json_decode($fqlResult);
$countLikesWall = count($fqlResult);

$fqlResult = get_content(\"https://api.facebook.com/method/fql.query?query=SELECT+like_count+FROM+link_stat+WHERE+url%3D\\\"http%3A%2F%2Fapps.facebook.com%2F**MyAppsName**%2F**somePage**.php%3Fid%3D\".$id.\"\\\"&format=json&access_token=\".$accessToken);
$fqlResult = json_decode($fqlResult);

$countLikesUrl = $fqlResult[0]->like_count;
    ,        您应该添加该应用需要用户的“ read_stream \”权限。如果您没有该权限,查询将返回一个空数组,例如\“ [] \”。