it-swarm.com.de

Abrufen der Anzahl der Google Plus-Freigaben mit wp_remote_post

Daher habe ich den größten Teil meines Morgens damit verbracht, an den benutzerdefinierten Schaltflächen für soziale Netzwerke auf meiner Website zu arbeiten. Das Auslesen von Twitter- und Facebook-Shares war kein Problem, aber Google Plus ist eine echte Herausforderung, da es keine benutzerfreundliche GET-API bietet.

Ich fand eine Arbeitstechnik mit Barebones CURL ( http://www.tomanthony.co.uk/blog/google_plus_one_button_seo_count_api/comment-page-1/ ) . Aber zuvor habe ich mich sehr bemüht, es mit Wordpress-Funktionen wie wp_remote_post zum Laufen zu bringen, und es ist fehlgeschlagen. Kann mir jemand sagen, was ich falsch gemacht habe?

Hier ist, was ich zusammengebracht habe. Zwei verschiedene Anfragen schlagen fehl:

$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: Der API-Schlüssel ist öffentlich für Entwickler.

2
Joern

Ich sehe, dass die Frage 2 Jahre alt ist, aber ich habe zwei Tage hart gearbeitet, um die Lösung des gleichen Problems zu finden, und hier ist mein Code (für mich funktioniert 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';
}

Der große Unterschied zum obigen Code besteht darin, dass ich eine Anfrage im JSON-Format und nicht als Array sende.

3
DFuchidzhiev