首页 文章

Facebook API使用洞察力php sdk

提问于
浏览
8

我正在努力用PHP中的GRAPH API提取数据 . 我不了解Facebook开发者的文档 . 我也找不到任何帮助的例子 . 我想让我的API给我以下(在本月的第一天和当月的最后一天之间):

  • 新喜欢

  • 访问

  • 有机覆盖率(每月总计)

  • 有机覆盖面(本月每天)

  • 付费覆盖面(每月总计)

  • 付费到达(每月的每一天)

  • 迄今为止的费用

  • 参与

  • 有机印象

  • 付费展示次数

我已经达到了能够提取数据的能力,但是当我测试使用洞察力部分时,它并没有给我数据 . 例如我有这个:

// Sets the default fallback access token so we don't have to pass it to each request
$fb->setDefaultAccessToken('{access-token}');

try {
  $response = $fb->get('/{page-id}/insights/page_impressions?since=1443650400&until=1446246000', $accessToken);
  $graphEdge = $response->getGraphEdge();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
  // When Graph returns an error
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
  // When validation fails or other local issues
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}

它返回:

Facebook\GraphNodes\GraphEdge Object
(
    [request:protected] => Facebook\FacebookRequest Object
        (
            [app:protected] => Facebook\FacebookApp Object
                (
                    [id:protected] => *******************
                    [secret:protected] => ********************
                )

            [accessToken:protected] => *******************
            [method:protected] => GET
            [endpoint:protected] => /{page-id}/insights/page_impressions?since=1443650400&until=1446246000
            [headers:protected] => Array
                (
                    [Content-Type] => application/x-www-form-urlencoded
                )

            [params:protected] => Array
                (
                )

            [files:protected] => Array
                (
                )

            [eTag:protected] => 
            [graphVersion:protected] => v2.5
        )

    [metaData:protected] => Array
        (
            [paging] => Array
                (
                    [previous] => https://graph.facebook.com/v2.5/{page-id}/insights/page_impressions?access_token=*******************&appsecret_proof=*******************&since=1440968400&until=1443564000
                    [next] => https://graph.facebook.com/v2.5/{page-id}/insights/page_impressions?access_token=*******************&appsecret_proof=*******************&since=1446159600&until=1448755200
                )

        )

    [parentEdgeEndpoint:protected] => 
    [subclassName:protected] => 
    [items:protected] => Array
        (
        )

)

我没有看到任何可以使用的信息,这仅仅是针对page_impressions . 我甚至改变了日期,从7月31日开始到10月31日结束,但仍然没有任何结果 . 我的两个问题是:1 . 我做错了什么? 2.如何进行多次调用以获取上面列表中的所有数据?

先谢谢你!

1 回答

  • 6

    我做错了什么?

    由于响应没有抛出错误,请确保您满足以下要求:

    • 对于未公开提供的数据洞察指标( page_impressionspage_stories 等),您的访问令牌必须具有read_insights权限 .

    • 仅为拥有超过30人喜欢的Facebook页面生成数据洞察 . (您的Facebook页面必须有> 30个粉丝)

    对于第1点,如果您没有给出数据(因为它不公开),Facebook Graph Api不会抛出错误 . 为此,您必须为您的Facebook应用程序申请 read_insight 权限,并获得Facebook团队的reviewed批准 .

    或者(不推荐的方式)检查:How to get a never expiring Facebook Page Access Token

    这是使用Graph Api Explorer显示指标数据的方法:

    • 登录Graph Api Explorer

    • 点击“获取令牌”,然后点击“获取用户访问令牌”

    enter image description here

    • 单击'Extended Permissions'选项卡并选中 read_insights ,然后单击“获取访问令牌” .

    enter image description here

    • 为自己授予您请求的权限 .

    • 现在在Graph API查询字段中输入测试查询,然后单击提交:

    enter image description here

    在那里,您将看到指标的数据 . 如果它没有生成任何数据,那么它是因为第2点(必须有> 30次)

    如何进行多次调用以获取上面列表中的所有数据?

    Facebook允许批量请求,例如使用php-sdk:

    $fb = new Facebook\Facebook([
      'app_id' => '{app-id}',
      'app_secret' => '{app-secret}',
      'default_graph_version' => 'v2.5',
      ]);
    
    $fb->setDefaultAccessToken('user-access-token');
    
    // Example : Get page impression
    $requestPageImpression = $fb->request('GET', '/{page-id}/insights/page_impressions?since=1443650400&until=1446246000"');
    
    // Example : Get Organic page impressions
    $requestPageImpressionOrganic = $fb->request('GET', '{page-id}/insights/page_impressions_organic');
    
    // Add more variable and API req, according to your list
    // $requestPageStories = $fb->request('GET','....');
    // etc...
    
    $batch = [
        'page-impression' => $requestPageImpression,
        'page-impression-organic' => $requestPageImpressionOrganic, 
        // add more for your list
        ];
    
    echo '<h1>Make a batch request</h1>' . "\n\n";
    
    try {
      $responses = $fb->sendBatchRequest($batch);
    } catch(Facebook\Exceptions\FacebookResponseException $e) {
      // When Graph returns an error
      echo 'Graph returned an error: ' . $e->getMessage();
      exit;
    } catch(Facebook\Exceptions\FacebookSDKException $e) {
      // When validation fails or other local issues
      echo 'Facebook SDK returned an error: ' . $e->getMessage();
      exit;
    }
    
    foreach ($responses as $key => $response) {
      if ($response->isError()) {
        $e = $response->getThrownException();
        echo '<p>Error! Facebook SDK Said: ' . $e->getMessage() . "\n\n";
        echo '<p>Graph Said: ' . "\n\n";
        var_dump($e->getResponse());
      } else {
        echo "<p>(" . $key . ") HTTP status code: " . $response->getHttpStatusCode() . "
    \n"; echo "Response: " . $response->getBody() . "</p>\n\n"; echo "<hr />\n\n"; } }

相关问题