kin*_*986 8 php facebook facebook-graph-api
我正在努力用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;
}
Run Code Online (Sandbox Code Playgroud)
它返回:
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
(
)
)
Run Code Online (Sandbox Code Playgroud)
我没有看到任何可以使用的信息,这仅仅是针对page_impressions.我甚至改变了日期,从7月31日开始到10月31日结束,但仍然没有任何结果.我的两个问题是:1.我做错了什么?2.如何进行多次调用以获取上面列表中的所有数据?
先谢谢你!
- 我做错了什么?
由于响应没有抛出错误,请确保您满足以下要求:
page_impressions,page_stories,等),您的访问令牌必须有read_insights许可.对于第1点,如果您没有权限,Facebook Graph Api不会抛出错误,它只是不会给您数据(因为它不公开).对于这一点,你必须申请提交read_insight同意您的Facebook应用程序,并获得审查通过Facebook团队批准.
或者(不推荐的方式)检查: 如何获得永不过期的Facebook页面访问令牌
这是使用Graph Api Explorer显示指标数据的方法:
点击"获取令牌",然后点击"获取用户访问令牌"
单击"扩展权限"选项卡,选中read_insights并单击"获取访问令牌".
授予自己所请求的权限.
现在在Graph API查询字段中输入测试查询,然后单击提交:
在那里,您将看到指标的数据.如果它没有生成任何数据,那么它是因为第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() . "<br />\n";
echo "Response: " . $response->getBody() . "</p>\n\n";
echo "<hr />\n\n";
}
}
Run Code Online (Sandbox Code Playgroud)