web-dev-qa-db-ja.com

Wp_remote_postでGoogle Plusのシェア数を取得する

それで私は私のウェブサイトのカスタマイズされたソーシャルシェアボタンに取り組んでいる私の朝の大部分を費やしました。 TwitterやFacebookのシェアを読むのは問題ないが、Google Plusは使いやすいGET APIを提供していないので、本当に難しい。

ベアボーンCURLを使った実用的なテクニックを見つけました( http://www.tomanthony.co.uk/blog/google_plus_one_button_seo_count_api/comment-page-1/ ) 。しかし、以前は、wp_remote_postのようなWordpressの機能をうまく機能させることを試みて失敗しました。誰が私が間違っていたことを私に言うことができますか?

これが私がどうにかして集まったものです。 2つの異なる要求が失敗します。

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

シモンズ:APIキーは開発者向けの公開キーです。

2
Joern

私は質問が2歳であると思いますが、私は2日間同じ問題の解決策を見つけるために一生懸命働きましたそしてここに私のコードがあります(私のために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';
}

上記のコードとの大きな違いは、リクエストを配列ではなくJSON形式で送信することです。

3
DFuchidzhiev