Abro, Juni 2011

PHP: Google Plus One Count API

Eine kleine PHP-Funktion um die Anzahl der “Likes” des Google Plus One Buttons für eine URL auszulesen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function get_google_plus1_count($url)
{
  $ch = curl_init();
  curl_setopt_array($ch, array(
    CURLOPT_HTTPHEADER      => array('Content-type: application/json'),
    CURLOPT_POST            => true,
    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"}]',
    CURLOPT_RETURNTRANSFER  => true,
    CURLOPT_SSL_VERIFYPEER  => false,
    CURLOPT_URL             => 'https://clients6.google.com/rpc?key=AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ'
  ));
  $res = curl_exec($ch);
  curl_close($ch);
 
  if( $res )
  {
    $json = json_decode($res,true);
    return $json[0]['result']['metadata']['globalCounts']['count'];
  }
  return false;
}


14 kreative Kommentare

  1. pell, 04.07.2011 03:05h

    Hm, bei mir klappt das nicht. Wollte es eigentlich zu ruby porten.

  2. Abro, 04.07.2011 03:29h

    Ich hab’s gerade zur Sicherheit noch einmal getestet und ein positives Ergebnis erhalten.

    1
    2
    3
    
    get_google_plus1_count(
      'http://www.googlewatchblog.de/2011/07/google-bekommt-eine-api/'
    );

    Liefert wie auf der Website z.Zt. angezeigt ’28’. Für URLs auf denen der Count Null beträgt funktioniert’s ebenfalls.

    Die Mindestanforderung an’s Setup ist PHP 5.2.0 und eine funktionierende curl-lib. Zur Problemlösung antworte einfach mit näheren Details zur Fehlermeldung auf meine E-Mail die ich an dich rausgeschickt habe.

  3. Monitoring Socials, 08.12.2011 17:18h

    Hi,

    i don’t understand German but I know a little about coding. I have small problem. When i put $url = ($_GET[‘url’]); and wish to check +1 count this don’t work. Do you know how to fix that?

    THX

  4. Abro, 08.12.2011 21:11h

    hm kay – first: does it work if you add the url manually?

    1
    
    <?php echo get_google_plus1_count('http://foo.com/'); ?>

    if it does, check your form:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    <!-- file: index.html -->
    <form action="count.php" method="get" accept-charset="utf-8">
      <input type="text" name="url" value="" />
      <input type="submit" value="Get Count" />
    </form>
     
    /* file: count.php */
    <?php 
      function get_google_plus1_count($url)
      { 
        //see above...
      }
     
      var_dump($_GET['url']); //everything ok here?
      echo get_google_plus1_count($_GET['url']); 
    ?>
  5. Mark Lorenz, 24.02.2012 14:10h

    Hallo! Vielen Dank für das tolle Skript!

    Ich habe nur eine Frage. Was tun wenn die Anzahl der Likes zu groß ist, denn dann gibt die funktion den falschen wert aus. Probiert mal google.com als Variable einzugeben.

    Der wahre Wert ist nämlich hier:
    view-source:https://plusone.google.com/u/0/_/%2B1/fastbutton?count=true&url=http://www.google.com/

    im Quell-Text hinter c:

  6. Abro, 24.02.2012 14:47h

    Hallo Mark,

    dass die Funktion hier einen ‘falschen’ Wert ausgibt liegt nicht an einer zu großen Anzahl der Likes. Da geht nämlich noch einiges mehr.

    http://www.google.com/ = float(78937)
    https://www.google.com/webmasters/tools/home = float(142179)

    In meinem Test erhalte ich über die von dir gegebenen PlusOne-Button-URL mal die selbe Zahl, die wir hier auch über CURL erhalten und dann mal wieder nicht. Nach mehrmaligem reloaden gibt mir dann aber auch der Button die selbe Like-Anzahl wie unsere Funktion. (Zum selbst testen aufpassen: Der Button speichert seine Ergebnisse via Cookie ab.)

    Meine vage Schlussfolgerung ist, dass dein PlusOne-Button aus Performancegründen nur einen Näherungswert ausgibt, sobald die Zahlen größer werden. Was für Datenbanken recht typisch ist, nur bei dieser Anwendung eben nicht besonders naheliegend. Anders ist es für mich nur schwer zu erklären dass der Button innerhalb von 10sec auch mal 100 Likes weniger anzeigt als zuvor.

    Die Ausgabe der obigen Funktion scheint dagegen konsistent =)

  7. stefan maischner, 14.11.2012 23:11h

    danke – klappt auffallend prima. nutze es für mein kleines internes seo-tracking.

    ps.: was ist das eigentlich für ein key? euer api-key?

  8. Abro, 15.11.2012 09:23h

    Freut mich =)

    Der ‘Key’ ist nicht etwa unser API-Key, sondern ein fester Parameter, den auch alle offiziellen +1 Buttons benutzen. Im Button-SourceCode heisst er auch ‘developerKey’.

  9. Cornelius, 19.11.2012 18:14h

    Funktioniert super! Danke!!

  10. Mike, 28.12.2012 20:13h

    Also bei mir klappt das nicht. Ich mach schon ca. 2 Stunden rum und durchsuche das Internet ;( Irgendwie steh ich wohl gerade auf dem falschen Bahnhof *g

    Es scheint zwar ein Array zu existieren aber es gibt keine Daten. Obiger Code gibt beispielsweise “Notice: Undefined index: result in…” aus.

    Könnte mir jemand helfen?

    PHP-Version 5.3.19 und curl ist drinnen. Teste das ganze local. Test-Domains sollten gehen. Also an einer falschen URL liegt es nicht, die ich mit dieser Funktion übertrage.

  11. peter, 29.07.2013 23:27h

    hallo

    funktioniert sehr gut für einzelne seiten.
    aber wie frage ich die shares bzw +1 auf google+ seiten ab?

  12. Abro, 30.07.2013 12:54h

    Ich vermute dass alle +1 gleich funktionieren, also an eine URL gekoppelt sind und somit über obigen Quellcode abrufbar. Die passende URL eines GooglePlus-Posts erhält man wenn man auf sein Datum klickt.

    Zur Anzahl der Shares findet sich auf die Schnelle tatsächlich noch kein Code im Web. Müsste man aber auch relativ leicht herankommen indem man z.B. diese Buttons missbraucht: https://developers.google.com/+/web/share/ [ Mir fehlt leider die Zeit, sorry =( ]

  13. Alexander Trust, 12.09.2013 01:38h

    Danke für den Hinweis.

    Übrigens, was mir noch einfällt, du nutzt selbst ein Share-Plugin… Mr. Wong gibt es nicht mehr, bzw. ist jetzt ne Mode-Plattform… vielleicht solltest du also dein Plugin aktualisieren. :)

  14. Abro, 12.09.2013 09:41h

    Stimmt, danke dir.

Kommentare sind geschlossen.
Aufgrund interner Umstrukturierungsmaßnahmen ist es uns z.Zt. leider nicht
möglich auf neue Kommentare zu reagieren. Wir bitten dies zu entschuldigen.
Bei dringenden Rückfragen suchen Sie bitten den direkten Kontakt zu uns.
Das Unternehmen Lucido Media GbR wurde am 31.12.2013 stillgelegt. Diese Website existiert weiterhin zu Archivzwecken. Der Gesellschafter Daniel Abromeit führt seine Arbeit ab sofort unter dem Dach der Agentur Koch Essen fort. Für entsprechende Anfragen wenden Sie sich daher bitte an http://koch-essen.de/kontakt/