2016-06-23 3 views
1

私はPHPとFacebookのPHP SDKを初めてお使いになるので、'like_count'をFacebookのページ投稿'likes''summary'から入手しようとしています。 。 var_export($likekey['summary']);リターンがNULLながらページの投稿から 'total_count'を取得しています '概要' - Facebook PHP SDK(閉鎖)

$response = $fb->get('/me/posts?fields=admin_creator,likes.limit(0).summary(true)&limit=30'); 
$getLikeCount = $response->getGraphEdge()->asArray(); 
foreach($getLikeCount as $likekey){ 
    if(isset($likekey['likes'])){ 
     var_export($likekey['likes']); 
     foreach ($likekey['likes'] as $likekey){ 
      //echo $likekey['total_count'] . '<br>'; 
     } 
    } 
} 

var_export($likekey['likes']);輸出空白の配列:私の現在のコードは、次が含まれています。しかし、グラフAPIエクスプローラで、それは次の値を返します。

{ 
     "admin_creator": { 
     "name": "NAME", 
     "id": "ID" 
     }, 
     "id": "ID", 
     "likes": { 
     "data": [ 
     ], 
     "summary": { 
      "total_count": 1022, 
      "can_like": true, 
      "has_liked": false 
     } 
     } 
    }, 

'likes'と「summary'の私の方法からアクセスすると動作しないので、私は'total_count'フィールドにアクセスするにはどうすればよいです。

編集:getGraphEdge()->asArray();を使用すると、要約配列が返されないため、機能しません。私はどういうわけかgetDecodedBody();または別の方法から値を取得する必要があります。 $getLikeCount = $response->getDecodedBody();を使用する場合は、次のコードを使用してください。

foreach($getLikeCount as $key){ 
    if(isset($key['admin_creator'])){ 
     echo $key['admin_creator']['name']; 
    } 
} 

何も返しません。私は$getLikeCount = $response->getGraphEdge()->asArray();の場合に動作し、私の現在の方法では動作しませんので、'admin_creator'を例として使用していますが、投稿の'summary'から'total_count'フィールドを取得しようとしており、'summary'が表示されません。配列をgetGraphEdge()メソッドを使用している場合は、getDecodedBody();を使用する場合にのみ表示されます。 getDecodedBody()から値を取得する方法があるか、またはtotal_countフィールドをsummaryから取得する回避策があるかどうかは疑問です。

回答: 答えは以下のとおりです。

答えて

2

を試してみてください。

回避策を実行するには、投稿IDを見つけて、その投稿のlikesフィールドのみを取得する別のリクエストが必要です。

$response = $fb->get('/me/posts?fields=admin_creator,likes.limit(0).summary(true)&limit=30'); 
$getPostID = $response->getGraphEdge()->asArray(); 
foreach($getPostID as $IDKey){ 
    if(isset($IDKey['id'])){ 
     $currentPostID = $IDKey['id']; 
     $likesResponse = $fb->get('/'.$currentPostID.'/likes?limit=0&summary=true'); 
     echo $currentPostID . '<br>'; //optional 
     $getLikeCount = $likesResponse->getGraphEdge(); 
     $currentLikeCount = $getLikeCount->getTotalCount(); 
     echo $currentLikeCount . '<br>'; 
    } 
} 
0

は、私の周りの仕事を見つけた

$getLikeCount['likes']['summary']['total_count'] 
+0

少し編集しました。問題は 'getGraphEdge() - > asArray();'が 'summary'配列を返さないということです。 – Jack

5

このデータは、API呼び出しを増やすことなく見つけることができます。 サマリーデータは、フィールドのメタデータに隠されています。です。コメントと反応についても同じです。

$response = $fb->get('/me/posts?fields=id,likes.limit(0).summary(true)'); 
foreach ($reponse->getGraphEdge() as $graphNode) { 
    // Some fields can have metadata 
    $likesData = $graphNode->getField('likes')->getMetaData(); 
    echo 'The total of likes for the post ID "' . $graphNode->getField('id') . '" is: '. $likesData['summary']['total_count']; 
} 
関連する問題