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 来检查请求。我尝试用我找到的值替换发布数据值。

[{"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

可能是 curl 不接受服务器的 CA 的问题。您可以通过以下方式确定:

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

如果确实是不受信任的 CA 的问题,您有两种选择。不安全且简单的方法是为 curl 添加一个选项:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

这将禁用检查。第二个选项(更好但更复杂一点)是转到https://clients6.google.com并导出 CA 证书并将其提供给 curl,如下所示:

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 方式不再有效。

至少还有一种方法,但它很丑,谷歌显然不支持它。您只需使用正则表达式从官方按钮的 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 回答