2

私はプログラムでグーグルプラスワンボタンカウントを取得する方法についてインターネット全体で検索してきました。最後に、この記事を見つけました。これ は、アークティクルで言及されているPhpスクリプトです。

<?php

 $url = "http://www.tomanthony.co.uk/";

 $ch = curl_init();   
 curl_setopt($ch, CURLOPT_URL, "https://clients6.google.com/rpc?key=AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ"); 
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, '[{"method":"pos.plusones.get","id":"p","params":{"nolog":true,"id":"' . $url . '","source":"widget","userId":"@viewer","groupId":"@self"},"jsonrpc":"2.0","key":"p","apiVersion":"v1"}]');
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));


 $curl_results = curl_exec ($ch);
 curl_close ($ch);

 $parsed_results = json_decode($curl_results, true);

 echo $parsed_results[0]['result']['metadata']['globalCounts']['count'];

?>

私はすべてを試しました、私はそれに3時間座っていましたが、それを動かすことができました。しかし、それは彼にとっては完全にうまく機能しているようです。それは完全に単純で単純なスクリプトです。

リクエストを調べるためにfirebugを使用しました。postdataの値を見つけた値に置き換えてみました。

[{"method":"pos.plusones.get","id":"pos.plusones.get","params":{"cdx":"cb4","id":"http://www.tomanthony.co.uk/google_plus_one_api_example.php","source":"widget","container":"http://www.tomanthony.co.uk/google_plus_one_api_example.php","userId":"@viewer","groupId":"@self"},"jsonrpc":"2.0","key":"pos.plusones.get","apiVersion":"v1"}]

どこが間違っているのかわかりません。単純なコードです。

4

2 に答える 2

6

おそらく、サーバーのCAを受け入れないcurlの問題です。あなたは確かに見つけることができます:

$curl_results = curl_exec ($ch);
echo curl_error($ch);

信頼できないCAに実際に問題がある場合は、2つのオプションがあります。安全でない簡単な方法は、curlにもう1つのオプションを追加することです。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

これにより、チェックが無効になります。2番目のオプション(より良く、もう少し複雑)は、https://clients6.google.comにアクセスし、CA証明書をエクスポートして、次のようにカールにフィードすることです。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/CAcerts/exported.crt");
于 2011-09-06T14:36:01.467 に答える
2

ここにある他の投稿にリストされているcURLとAPIの方法は機能しなくなりました。

まだ少なくとも1つの方法がありますが、それは醜く、Googleは明らかにそれをサポートしていません。正規表現を使用して、公式ボタンのJavaScriptソースコードから変数をリッピングするだけです。

function shinra_gplus_get_count( $url ) {
    $contents = file_get_contents( 
        'https://plusone.google.com/_/+1/fastbutton?url=' 
        . urlencode( $url ) 
    );

    preg_match( '/window\.__SSR = {c: ([\d]+)/', $contents, $matches );

    if( isset( $matches[0] ) ) 
        return (int) str_replace( 'window.__SSR = {c: ', '', $matches[0] );
    return 0;
}
于 2013-03-16T12:42:34.027 に答える