Как получить количество Google +1 для текущей страницы в PHP?

Я хочу получить количество Google +1 для текущей веб-страницы? Я хочу выполнить этот процесс в PHP, а затем записать количество акций или +1 в базу данных. Вот почему, мне это нужно. Итак, как я могу выполнить этот процесс (получение количества +1) в PHP?
Заранее спасибо.


person John    schedule 13.01.2012    source источник
comment
Поищи в Гугле. developers.google.com/+/plugins/+1button   -  person Josh    schedule 13.01.2012
comment
Я хочу выполнить этот процесс в PHP, а затем записать количество акций или +1 в базу данных. Вот почему, мне это нужно.   -  person John    schedule 13.01.2012
comment
johndyer.name/   -  person DerVO    schedule 13.01.2012
comment
@DerVO этот код не работает.   -  person John    schedule 13.01.2012
comment
@Джон - у меня работает :-)   -  person Manse    schedule 13.01.2012
comment
@ManseUK, но он возвращает 0 для каждой страницы.   -  person John    schedule 13.01.2012
comment
JaiV спрашивает, есть ли еще возможность получить +1 для URL-адреса?   -  person senderle    schedule 08.07.2012


Ответы (8)


Этот работает для меня и быстрее, чем CURL:

function getPlus1($url) {
    $html =  file_get_contents( "https://plusone.google.com/_/+1/fastbutton?url=".urlencode($url));
    $doc = new DOMDocument();   $doc->loadHTML($html);
    $counter=$doc->getElementById('aggregateCount');
    return $counter->nodeValue;
}

также здесь для твитов, пинов и Facebook

function getTweets($url){
    $json = file_get_contents( "http://urls.api.twitter.com/1/urls/count.json?url=".$url );
    $ajsn = json_decode($json, true);
    $cont = $ajsn['count'];
    return $cont;
}

function getPins($url){
    $json = file_get_contents( "http://api.pinterest.com/v1/urls/count.json?callback=receiveCount&url=".$url );
    $json = substr( $json, 13, -1);
    $ajsn = json_decode($json, true);
    $cont = $ajsn['count'];
    return $cont;
}

function getFacebooks($url) { 
    $xml = file_get_contents("http://api.facebook.com/restserver.php?method=links.getStats&urls=".urlencode($url));
    $xml = simplexml_load_string($xml);
    $shares = $xml->link_stat->share_count;
    $likes  = $xml->link_stat->like_count;
    $comments = $xml->link_stat->comment_count; 
    return $likes + $shares + $comments;
}

Примечание: номера Facebook представляют собой сумму лайков+репостов, а некоторые люди сказали плюс комментарии (я еще не искал), в любом случае используйте тот, который вам нужен.

Это будет работать, если ваши настройки php позволяют открывать внешний URL-адрес, проверьте настройку php «allow_url_open».

Надежда помогает.

person paulgagu    schedule 08.07.2013
comment
Как вы делаете это для Linked in? - person Chill Web Designs; 24.07.2013
comment
@ChillWebDesigns вырван из моего кода, неаккуратно отформатирован, но вы можете понять это: $stream = @file_get_contents("http://www.linkedin.com/countserv/count/share?url={$url}&format=json"); $json = json_decode($stream, true); $results['linkedin'] = intval($json['count']); - person Ben; 11.06.2014
comment
Я знаю, что это старо, но я только что попробовал, и у loadHtml были проблемы с тегами svg в документе. Вот мое быстрое решение: $html = file_get_contents( "https://plusone.google.com/_/+1/fastbutton?url=".urlencode($url)); $html = explode('<div id="aggregateCount" class="Oy">', $html)[1]; return explode('</div>', $html)[0]; - person Anthony; 13.04.2015
comment
Это все еще работает, но показывает много предупреждений. Вместо DOMDocument я использую return preg_replace('/.*<div id="aggregateCount"[^>]+>(\d+)<\/div>.*/s', '$1', $html); - person Dominik Späte; 23.03.2017

function get_plusones($url) {
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_URL, "https://clients6.google.com/rpc");
  curl_setopt($curl, CURLOPT_POST, 1);
  curl_setopt($curl, 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($curl, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
  $curl_results = curl_exec ($curl);
  curl_close ($curl);
  $json = json_decode($curl_results, true);
  return intval( $json[0]['result']['metadata']['globalCounts']['count'] );
}

echo get_plusones("http://www.stackoverflow.com")

с сайта internoetics.com.

person Milindu Sanoj Kumarage    schedule 31.07.2012

Способ 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;
}
person Luke Mlsna    schedule 16.03.2013
comment
Этот ответ, кажется, предполагает, что методы, использующие cURL + API, больше не работают, но в настоящее время у меня есть рабочее решение, использующее эти методы для получения общих ресурсов Google+ и +1, см. мой ответ далее (stackoverflow.com/a/23088544/328272). - person lmeurs; 16.04.2014
comment
Действительно смешно, что они не добавили официальную поддержку такой базовой функции, когда на нее есть огромный спрос. - person Jason Champion; 08.08.2014

Следующий PHP-скрипт пока отлично работает для получения количества акций Google+ и +1.

$url = 'http://nike.com';
$gplus_type = true ? 'shares' : '+1s';

/**
 * Get Google+ shares or +1's.
 * See out post at stackoverflow.com/a/23088544/328272
 */
function get_gplus_count($url, $type = 'shares') {
  $curl = curl_init();

  // According to stackoverflow.com/a/7321638/328272 we should use certificates
  // to connect through SSL, but they also offer the following easier solution.
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

  if ($type == 'shares') {
    // Use the default developer key AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ, see
    // tomanthony.co.uk/blog/google_plus_one_button_seo_count_api.
    curl_setopt($curl, CURLOPT_URL, 'https://clients6.google.com/rpc?key=AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ');
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, 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($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
  }
  elseif ($type == '+1s') {
    curl_setopt($curl, CURLOPT_URL, 'https://plusone.google.com/_/+1/fastbutton?url='.urlencode($url));
  }
  else {
    throw new Exception('No $type defined, possible values are "shares" and "+1s".');
  }

  $curl_result = curl_exec($curl);
  curl_close($curl);

  if ($type == 'shares') {
    $json = json_decode($curl_result, true);
    return intval($json[0]['result']['metadata']['globalCounts']['count']);
  }
  elseif ($type == '+1s') {
    libxml_use_internal_errors(true);
    $doc = new DOMDocument();
    $doc->loadHTML($curl_result);
    $counter=$doc->getElementById('aggregateCount');
    return $counter->nodeValue;
  }
}

// Get Google+ count.
$gplus_count = get_gplus_count($url, $gplus_type);
person lmeurs    schedule 15.04.2014

В настоящее время у Google нет общедоступного API для получения счетчика +1 для URL-адресов. Вы можете отправить запрос функции здесь. Вы также можете использовать ссылку метод обратного проектирования, упомянутый @DerVo. Имейте в виду, что этот метод может измениться и сломаться в любое время.

person abraham    schedule 14.01.2012

Я собрал этот код для чтения count непосредственно из iframe, используемого социальной кнопкой. Я не тестировал его в массовом масштабе, поэтому, возможно, вам придется замедлить запросы и/или изменить пользовательский агент :). Это мой рабочий код:

function get_plusone($url) 
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://plusone.google.com/_/+1/fastbutton?   
bsv&size=tall&hl=it&url=".urlencode($url));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$html = curl_exec ($curl);
curl_close ($curl);
$doc = new DOMDocument();
$doc->loadHTML($html);
$counter=$doc->getElementById('aggregateCount');
return $counter->nodeValue;

}

Использование следующее:

echo get_plusones('http://stackoverflow.com/');

Результат: 3166

person cardy    schedule 05.12.2012

Мне пришлось объединить несколько идей из разных вариантов и URL-адресов, чтобы заставить его работать на меня:

function getPlusOnes($url) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, "https://plusone.google.com/_/+1/fastbutton?url=".urlencode($url));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        $html = curl_exec ($curl);
        curl_close ($curl);
        $doc = new DOMDocument();
        $doc->loadHTML($html);
        $counter=$doc->getElementById('aggregateCount');
        return $counter->nodeValue;
    }

Все, что мне нужно было сделать, это обновить URL-адрес, но я хотел опубликовать полный вариант для тех, кто заинтересован.

echo getPlusOnes('http://stackoverflow.com/')

Спасибо Cardy за использование этого подхода, тогда мне просто нужно было получить URL-адрес, который работал для меня...

person user2176748    schedule 16.03.2013

Я выпустил библиотеку PHP, извлекающую количество для основных социальных сетей. В настоящее время он поддерживает Google, Facebook, Twitter и Pinterest.

Используемые методы аналогичны описанным здесь, и библиотека предоставляет механизм для кэширования извлеченных данных. Эта библиотека также имеет некоторые другие приятные функции: установка через Composer, полностью протестированная, поддержка HHVM.

http://dunglas.fr/2014/01/introduction-the-socialshare-php-library/

person Kévin Dunglas    schedule 17.01.2014