Auch wenn nach wie vor nicht geklärt ist, ob und wie die Anzahl der Google +1 “Likes” das organische Suchmaschinenranking beeinflusst, ist sie für mich zumindest im Social Media Bereich eine nennenswerte Metrik.
Im Gegensatz zu Facebook, das eine offene API für die Nutzung der Facebook Share Aktivitäten bietet, hat Google soetwas nicht vorgesehen. Intern gibt es natürlich eine API die verschiedene Funktionen unterstützt, angesprochen wird sie indirekt über den Browser, der durch JavaScript wiederum PHP Files aufruft. Gesichert ist das ganze nur relativ schwach. Für Funktionen, wie das Durchführen des “Likes”, muss man angemeldet sein und sich durch einen Token authentifizieren, was das Ausnutzen komplizierter (also interessanter) macht, da es auch hier – theoretisch – die API Funktion dafür gibt, die man automatisiert ansprechen kann.
Da nicht jeder Besucher einer Seite zwangsläufig bei Google eingeloggt ist, funktioniert das Ablesen auch mit einem statischen Token, der sich nicht ändert und dadurch vermutlich auch nicht durch heavy-usage gebannt wird, wie es vermutlich bei den personalisierten Token der Fall sein wird. Auch wenn es vermutlich ein Abfragelimit auf IP Basis geben wird, lässt sich das durch Proxys etc. einfach umgehen. Die Möglichkeit des Scrapens selbst gibt es schon seit Anfang Juni, ist allerdings etwas fehleranfällig. Je nach Einbauart des +1 Codes wird Google eine andere URL als Like-Ziel angegeben. Je nach Plugin wird die URL der derzeitigen Seite unterschiedlich codiert, wodurch es unter Umständen zu falschen Zahlen kommt (besonders kritisch, wenn in der URL mehrere Sonderzeichen vorkommen). Ich habe das ganze als PHP Methode aufgebaut, die als Parameter ein Array unterstüzt. Für jeden Arrayeintrag wird die Abfrage gemacht, anschließend wird ein gesammeltes Array mit der jeweiligen URL + Like-Score ausgegeben.
Glücklicherweise ist der API-Aufruf wesentlich schneller als der +1 Button, der via JavaScript geladen werden muss. Natürlich kann auch nur eine einzelne URL übergeben werden. Wer das ganze via GET Abfrage lösen will, kann zB die URLs mit einem Trennzeichen, zB ; trennen (siehe mein Beispielcode).
<?php
strstr($_GET["url"], ";") != FALSE ? $urls = explode(";", $_GET["url"]) : $urls[0] = $_GET["url"];
plusonecount($urls);
function plusonecount($urls) {
$result = array();
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://clients6.google.com/rpc?key=AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
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"}]');
$data = curl_exec($ch);
curl_close($ch);
$json = json_decode($data, true);
$score = $json[0]['result']['metadata']['globalCounts']['count'];
$current = array($url, $score);
array_push($result, $current);
}
/*print_r($result); */
return $result;
}?>
Der Beispielcode besteht aus der Funktion ansich und einem möglichen Funktionsaufruf. Aus Performancegründen würde ich empfehlen, die Möglichkeit des Arrays zu nutzen, sonst muss je nach PHP-Einbindung jedesmal ein neuer PHP und Apache Prozess gestartet werden, was relativ performancehungrig und langsam ist. Ebenfalls würde ich davon abraten, das ganze ohne Proxys oder schlimmstenfalls von eurem eigenen Webhost zu machen. Bitte beachtet außerdem, dass die CURL PHP Extension aktiviert sein muss, da die Daten via POST übertragen werden!
Weitere Posts zum Thema:







Juni 29th, 2011 at 13:52
danke huggy, werde gleich mal meine proxy armee anwerfen und testen!
Juni 29th, 2011 at 13:56
sauber!
Juni 29th, 2011 at 14:43
Für eigene Seiten wird wohl dass Webmaster Tool Daten liefern.
Man schaue sich nur mal die Seiten ab Seite 50 der Introduction bei der Google IO an:
http://static.googleusercontent.com/external_content/untrusted_dlcp/www.google.com/en//events/io/2011/static/presofiles/an_introduction_to_the_+1_button.pdf
Da gibt es auch Daten zum Search Impact und den Usern (Alte usw.)
Juni 29th, 2011 at 14:51
Danke, da wird gleich wider angepasst.
Juni 29th, 2011 at 16:08
[...] the original post: Google +1 Count scrapen Medien zum Thema Medien by [...]
Juni 29th, 2011 at 16:39
Joa da waren andere einen Miniticken schneller aber alle Sources sehen sehr ähnlich aus:
- http://openminds.lucido-media.de/php-google-plus-one-count-api
- https://github.com/macx/SocialDataGrabber
Juni 29th, 2011 at 17:05
Servus Abro,
Und auf sowas kommt man natürlich immer erst, wenn man die Zeit bereits verschwendet hat… Aber dass alle Sources ähnlich sind, kein Wunder – die API ist nur via Post ansprechbar, in PHP steht da Curl an erster Stelle. Die Parameter habt ihr vermutlich wie ich durch HTTP Header Sniffing rausgefunden, so schwierig war das ja nicht. Interessant wäre für mich noch, wie man die anderen Methoden List, Get, Post etc. verwenden kann..die existieren auch in der API
Der SocialDataGrabber ist ja eine praktische Sammlung *Bookmark*
Juni 30th, 2011 at 08:14
@Huggy Gute Arbeit!
@Jan Danke für Info.
Seit heute ist bei mir die +1 Statistik schon im Webmaster Tool verfügbar, zumindest die Funktion.
Juni 30th, 2011 at 08:15
@Bernhard
Die Daten kommen auch schon, und Google Analytics hat die Daten auch schon (in der neuen Version)
Juni 30th, 2011 at 15:12
Interessant dazu find ich, was das Rufzeichen zu bedeuten hat, wenn man mal einen Blick auf das Sprite-Image des +1 Buttons wirft:
http://www.google.at/images/experiments/p1/p1sprite.png
Juli 1st, 2011 at 06:46
[...] mit dem +1-Button geht der WebmarketingBlog.at um und erklärt, wie man “Google +1 Count scrapt“. [...]
Juli 19th, 2011 at 02:28
Hi, weisst du ob man auch mehrere URLs in einer Anfrage abfragen kann? Facebooks REST API kann das ja, aber hier hab ich das noch nicht hinbekommen. So muss man halt für jede URL ne neue Anfrage starten, oder geht das auch mit nur einer Anfrage?