J'ai donc passé la majeure partie de la matinée à travailler sur les boutons de partage social personnalisés de mon site Web. Lire les partages Twitter et Facebook n’était pas un problème, mais Google Plus est un véritable défi, car ils ne proposent pas une API GET facile à utiliser.
J'ai trouvé une technique de travail utilisant des barebones CURL ( http://www.tomanthony.co.uk/blog/google_plus_one_button_seo_count_api/comment-page-1/ ) . Mais auparavant, j'ai essayé de le faire fonctionner avec les fonctions de Wordpress telles que wp_remote_post et j'ai échoué. Tout le monde peut me dire ce que j'ai fait de mal?
Voici ce que j'ai réussi à réunir. Deux requêtes différentes échouent:
$google_url = 'https://clients6.google.com/rpc?key=AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ';
$headers = array('Content-type' => 'application/json');
$body = array( "method" => "pos.plusones.get"
,"id" => "p"
,"params" => array( "nolog" => true
,"id" => $url
,"source" => "widget"
,"userId" => "@viewer"
,"groupId" => "@self"
)
,"jsonrpc" =>"2.0"
,"key" => "p"
,"apiVersion" => "v1"
);
$response = wp_remote_post( $google_url , array( 'method' => 'POST'
,'headers' => $headers
,'body' => $body ) );
if (!is_wp_error($response)) {
$resp = json_decode($response['body'],true);
_e($response['body']);
}
else
{
_e('error');
}
// Another attempt to get data with WP_Http
$request = new WP_Http;
$result = $request->request( $google_url , array( 'method' => 'POST', 'body' => $body, 'headers' => $headers ) );
if (!is_wp_error($result)) {
$resp = json_decode($result['body'],true);
_e($result['body']);
}
else
{
_e('error AGAIN');
}
PS: La clé d’API est publique pour les développeurs.
Je vois que la question a 2 ans, mais j'ai travaillé dur pendant deux jours pour trouver une solution au même problème et voici mon code (pour moi, ça marche à 100%).
$json_string = wp_remote_request('https://clients6.google.com/rpc',
array(
'method' => 'POST',
'body' => '[{"method":"pos.plusones.get","id":"p","params":{"nolog":true,"id":"'.rawurldecode(get_permalink()).'","source":"widget","userId":"@viewer","groupId":"@self"},"jsonrpc":"2.0","key":"p","apiVersion":"v1"}]',
'headers' => array('Content-Type' => 'application/json')
));
$json = json_decode($json_string['body'], true);
if(isset($json[0]['result']['metadata']['globalCounts']['count'])){
echo intval($json[0]['result']['metadata']['globalCounts']['count']);
}else{
echo'0';
}
La grande différence par rapport au code ci-dessus est que j'envoie la demande au format JSON, pas sous forme de tableau.