2016-06-23 7 views
1

Ich bin neu in PHP und der Facebook PHP SDK und ich suche die 'like_count' aus der 'likes''summary' eines Facebook-Seitenbeitrags . Mein aktueller Code enthält folgende Komponenten:Getting 'total_count' von Page Post Likes 'Zusammenfassung' - Facebook PHP SDK (GESCHLOSSEN)

$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>'; 
     } 
    } 
} 

Die var_export($likekey['likes']); Exporte leere Arrays während var_export($likekey['summary']); NULL zurück. Doch in der Graph API Explorer, es gibt die folgende:

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

Wie kann ich das 'total_count' Feld zugreifen, da sie durch meine Methoden der 'likes' Zugriff und "summary' funktionieren nicht.

BEARBEITEN: Verwenden getGraphEdge()->asArray(); wird nicht funktionieren, da es das Übersichtsarray nicht zurückgibt. Ich müsste irgendwie die Werte von getDecodedBody(); oder eine andere Methode bekommen. Wenn ich $getLikeCount = $response->getDecodedBody(); verwenden, mit diesem Code:

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

Es gibt nichts zurück. Ich benutze 'admin_creator' als ein Beispiel, weil es funktioniert, wenn $getLikeCount = $response->getGraphEdge()->asArray(); und funktioniert nicht in meiner aktuellen Methode, aber ich kann diese Methode nicht verwenden, weil ich versuche, das 'total_count' Feld aus der 'summary' von 'likes' und die 'summary' nicht in der Array bei Verwendung der getGraphEdge() Methode und zeigt nur bei Verwendung getDecodedBody();. Ich frage mich, ob es eine Möglichkeit gibt, die Werte von getDecodedBody() oder wenn es eine Problemumgehung gibt, um das total_count-Feld von summary zu erhalten.

ANTWORT: Antwort kann unten gefunden werden.

Antwort

2

Ich habe eine Arbeit um gefunden.

Die Arbeit erfordert die Suche nach der Beitrags-ID und dann eine andere Anfrage, um nur die Likes Feld dieses Beitrags zu bekommen.

$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

Versuchen

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

Ich bearbeitet die Frage ein wenig. Das Problem scheint zu sein, dass 'getGraphEdge() -> asArray();' das Array 'summary' nicht zurückgibt. – Jack

5

Sie können diese Daten finden, ohne mehr API Call zu machen. Die zusammenfassenden Daten sind in den Metadaten des Feldes likes versteckt. Das Gleiche gilt für Kommentare und Reaktionen.

$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']; 
}