Трудность получения Google плюс один счет - PullRequest
2 голосов
/ 06 сентября 2011

Я искал во всем интернете, как программно получить Google плюс количество кнопок. Наконец я нашел эту статью Вот сценарий 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"}]

Понятия не имею, где я ошибаюсь. Это просто простой код.

Ответы [ 2 ]

6 голосов
/ 06 сентября 2011

Вероятно, проблема в том, что curl не принимает CA сервера.Вы можете узнать наверняка с помощью:

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

Если это действительно проблема с ненадежным центром сертификации, у вас есть два варианта.Небезопасным и простым способом было бы добавить еще один параметр для curl:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Это отключает проверку.Второй вариант (лучше и немного сложнее) - перейти к 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");
2 голосов
/ 16 марта 2013

Способ 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;
}
...