Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook PHP SDK获得喜欢计数_Php_Facebook_Facebook Like - Fatal编程技术网

Facebook PHP SDK获得喜欢计数

Facebook PHP SDK获得喜欢计数,php,facebook,facebook-like,Php,Facebook,Facebook Like,我有一个facebook应用程序,在用户墙上发布。在帖子中有一个链接(指向我的应用程序),在喜欢的页面中有一个链接 现在我正在制作一个每小时运行一次的脚本(从crontab设置)。在该脚本中,我需要得到两个不同的喜欢计数: 喜欢贴在墙上的留言 喜欢在我的应用程序中完成(使用按钮) 对于我编写的第一个代码: $result = $facebook->api(array( 'method' => 'fql.query', 'quer

我有一个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\u facebook.php中抛出 在线656

    对于第二个喜欢计数

    我真的不知道该怎么做。我试过:

    $result = $facebook->api(array(
                  'method' => 'links.getStats',
                  'urls' => $canvasPage."somePage.php?id=".$id
              ));
    
    但这会引发:

    致命错误:未捕获的卷曲异常: 60:SSL证书问题,请验证 CA证书没有问题。细节: 错误:14090086:SSL 例程:SSL3\u获取\u服务器\u证书:证书 验证抛出的失败 C:\(…)\facebook\base\u facebook.php 在线759

    然后这是给我的:粗体部分是我创建的like按钮中的url。当我把它放在浏览器中时,它会返回一个JSON,其中包含一些信息(包括likes计数),但我不知道如何在脚本中使用它

    更多信息:

    $result = $facebook->api(array(
                  'method' => 'fql.query',
                  'query' => 'SELECT user_id FROM like WHERE post_id="'.$idPost.'"'
              ));
    $likesWall = count($result);
    
    以下是定义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;
    

    您应该添加应用程序需要用户的“读取流”权限。如果您没有该权限,查询将返回一个空数组,如“[]”

    即可,谢谢!我认为这应该是答案中的注释,而不是其他答案。您不明白哪部分?函数get_content($url){那一部分,你肯定会以某种方式调用该函数,那么你把什么作为$url?你必须把facebook API的任何url放在代码中。代码中显示了如何使用。创建$facebook后,我使用get_内容三次。为什么你仍然加载facebook类?@Andrei我很久以前就编写了该代码,但它似乎没有使用。我想所有这些都是这样重构时我忘了删除行。