Kommentarprüfung

Dies ist der Aufruf, den du am häufigsten verwenden wirst. Er nimmt eine Reihe von Argumenten und Eigenschaften des übermittelten Inhalts entgegen und gibt dann grünes Licht oder lehnt den Inhalt ab. Die Erkennungsgenauigkeit kann deutlich sinken, wenn du Angaben weglässt. Je mehr Daten du Akismet zu jedem Kommentar sendest, desto genauer ist das Ergebnis. Wir empfehlen, im Zweifelsfall lieber zu viele Daten mitzusenden.

Diese Methode wird über die folgende URL aufgerufen:

https://rest.akismet.com/1.1/comment-check

Wichtig: Alle Parameter sollten per POST-Methode gesendet werden.

Parameter

api_key (erforderlich)
Dein Akismet-API-Key. Du findest ihn in deinem Konto-Dashboard unter https://akismet.com/de/konto/

blog (erforderlich)
Die Startseite oder Basis-URL der Website, von der die Anfrage gesendet wird. Bei einem Blog oder Wiki ist das die Startseite. Hinweis: Muss eine vollständige URI sein, einschließlich http://.

user_ip (erforderlich)
IP-Adresse der Person, die den Kommentar übermittelt hat.

user_agent
User-Agent-Zeichenfolge des Browsers, der den Kommentar übermittelt – in der Regel die CGI-Variable HTTP_USER_AGENT. Nicht zu verwechseln mit dem User Agent deiner Akismet-Bibliothek.

referrer (beachte die Schreibweise)
Der Inhalt des HTTP_REFERER-Headers sollte hier gesendet werden.

permalink
Die vollständige URL des Beitrags, zu dem der Kommentar abgegeben wurde.

comment_type
Eine Zeichenfolge, die den Typ des gesendeten Inhalts beschreibt.

Beispiele:

  • comment: Ein Blog-Kommentar.
  • forum-post: Ein Forenbeitrag auf oberster Ebene.
  • reply: Eine Antwort auf einen Forenbeitrag auf oberster Ebene.
  • blog-post: Ein Blogbeitrag.
  • contact-form: Eine Übermittlung über ein Kontaktformular oder Feedback-Formular.
  • signup: Ein neues Benutzerkonto.
  • message: Eine Nachricht, die nur an wenige Benutzer gesendet wird.

Du kannst auch einen Wert senden, der oben nicht aufgeführt ist, wenn keiner der genannten deinen Inhalt zutreffend beschreibt. Weitere Erläuterungen dazu findest du hier.

comment_author
Der mit dem Kommentar übermittelte Name.

comment_author_email
Die mit dem Kommentar übermittelte E-Mail-Adresse.

comment_author_url
Die zusammen mit dem Kommentar übermittelte URL. Sende nur eine URL, die manuell vom Benutzer eingegeben wurde, nicht eine automatisch generierte URL wie die Profil-URL des Benutzers auf deiner Website.

comment_content
Der übermittelte Inhalt.

comment_date_gmt
Der UTC-Zeitstempel der Erstellung des Kommentars im ISO-8601-Format. Kann bei comment-check-Anfragen weggelassen werden, wenn der Kommentar zum Zeitpunkt seiner Erstellung an die API gesendet wird.

comment_post_modified_gmt
Der UTC-Zeitstempel des Veröffentlichungszeitpunkts des Beitrags, der Seite oder des Threads, zu dem der Kommentar gepostet wurde.

blog_lang
Gibt die auf dem Blog oder der Website verwendeten Sprachen im ISO-639-1-Format an, kommagetrennt. Eine Website mit Artikeln auf Englisch und Französisch könnte „en, fr_ca“ verwenden.

blog_charset
Die Zeichenkodierung für die Formularwerte in den comment_* -Parametern, z. B. „UTF-8“ oder „ISO-8859-1“.

user_role
Die Rolle des Benutzers, der den Kommentar übermittelt hat. Dies ist ein optionaler Parameter. Wenn du ihn auf „administrator“ setzt, gibt Akismet immer false zurück.

is_test
Dies ist ein optionaler Parameter. Du kannst ihn verwenden, wenn du Testanfragen an Akismet sendest.

recheck_reason
Wenn du Inhalte zur erneuten Prüfung an Akismet sendest – z. B. einen bearbeiteten Beitrag oder alte ausstehende Kommentare, die du erneut prüfen lassen möchtest –, füge den Parameter recheck_reason mit einer Zeichenfolge hinzu, die beschreibt, warum der Inhalt erneut geprüft wird. Zum Beispiel: recheck_reason=edit.

honeypot_field_name
Wenn du in deiner Implementierung ein Honeypot-Feld verwendest, sende den Namen des Feldes zusammen mit dem Wert dieses Feldes in deiner Anfrage mit. Wenn du beispielsweise ein Honeypot-Feld hast, das so aussieht: <input type=“text“ name=“hidden_honeypot_field“ style=“display: none;“ />, dann solltest du zwei zusätzliche Parameter in deiner Anfrage mitsenden: honeypot_field_name=hidden_honeypot_field und hidden_honeypot_field=[der Wert des Eingabefeldes].

comment_context
Der Parameter comment_context liefert Kontextinformationen zur Umgebung, in der der Kommentar gepostet wurde: eine Liste von Schlagwörtern oder Kategorien, die dem übergeordneten Blogbeitrag oder der Website zugewiesen sind, auf der der Kommentar gepostet wurde.

Gib comment_context in der PHP-üblichen Array-Parameter-Notation an: comment_context[]=cooking&comment_context[]=recipes&comment_context[]=bbq Beachte, dass Schlagwörter oder Kategorien vom übergeordneten Beitrag oder der Umgebung stammen sollten; sie sollten nicht von den Kommentierenden selbst angegeben werden.

Weitere Umgebungsvariablen des Servers
In PHP gibt es ein Array von Umgebungsvariablen namens $_SERVER, das Informationen über den Webserver selbst sowie ein Schlüssel-Wert-Paar für jeden mit der Anfrage gesendeten HTTP-Header enthält. Diese Daten sind für Akismet äußerst nützlich. Wie der übermittelte Inhalt mit dem Server interagiert, kann sehr aufschlussreich sein – sende daher bitte so viele dieser Daten wie möglich mit.

PHP-Beispiel

$data = array(
    'blog' => 'http://yourgroovydomain.com',
    'user_ip' => '127.0.0.1',
    'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6',
    'referrer' => 'http://www.google.com',
    'permalink' => 'http://yourgroovydomain.com/blog/post=1',
    'comment_type' => 'comment',
    'comment_author' => 'admin',
    'comment_author_email' => 'test@example.com',
    'comment_author_url' => 'http://www.example.com',
    'comment_content' => 'It means a lot that you would take the time to review our software.  Thanks again.'
);

akismet_comment_check( '123YourAPIKey', $data );

// Passes back true (it's spam) or false (it's ham).
function akismet_comment_check( $api_key, $data ) {
    $request = 'api_key=' . urlencode( $api_key ) .
        '&blog=' . urlencode( $data['blog'] ) .
        '&user_ip=' . urlencode( $data['user_ip'] ) .
        '&user_agent=' . urlencode( $data['user_agent'] ) .
        '&referrer=' . urlencode( $data['referrer'] ) .
        '&permalink=' . urlencode( $data['permalink'] ) .
        '&comment_type=' . urlencode( $data['comment_type'] ) .
        '&comment_author=' . urlencode( $data['comment_author'] ) .
        '&comment_author_email=' . urlencode( $data['comment_author_email'] ) .
        '&comment_author_url=' . urlencode( $data['comment_author_url'] ) .
        '&comment_content=' . urlencode( $data['comment_content'] );
 
    $host = $http_host = 'rest.akismet.com';
    $path = '/1.1/comment-check';
    $port = 443;
    $akismet_ua = "WordPress/4.4.1 | Akismet/3.1.7";
    $content_length = strlen( $request );
    $http_request  = "POST $path HTTP/1.0rn";
    $http_request .= "Host: $hostrn";
    $http_request .= "Content-Type: application/x-www-form-urlencodedrn";
    $http_request .= "Content-Length: {$content_length}rn";
    $http_request .= "User-Agent: {$akismet_ua}rn";
    $http_request .= "rn";
    $http_request .= $request;
 
    $response = '';
    
    if( false != ( $fs = @fsockopen( 'ssl://' . $http_host, $port, $errno, $errstr, 10 ) ) ) {

    	fwrite( $fs, $http_request );

    	while ( !feof( $fs ) ) {
    		$response .= fgets( $fs, 1160 ); // One TCP-IP packet
        }

    	fclose( $fs );

    	$response = explode( "rnrn", $response, 2 );
    }

    if ( 'true' == $response[1] ) {
        return true;
    } else {
    	return false;
    }
}

Dieser Aufruf gibt entweder „true“ zurück (wenn es sich um Spam handelt) oder „false“, wenn nicht.

Beispiel einer Spam-Antwort

Der Aufruf gibt „true“ zurück, wenn der Kommentar Spam ist. Falls es dir nicht gelingt, eine Spam-Antwort auszulösen, kannst du „akismet-guaranteed-spam“ als Autor oder „akismet-guaranteed-spam@example.com“ als Autor-E-Mail senden. Beide Werte lösen immer eine „true“-Antwort aus.

Array (
    [0] => HTTP/1.1 200 OK
           Server: nginx
           Date: Mon, 24 Feb 2014 20:17:08 GMT
           Content-Type: text/plain; charset=utf-8
           Connection: close
           Content-length: 4
    [1] => true
)

Eine Spam-Antwort kann auch den X-akismet-pro-tip Header enthalten, zum Beispiel:

Array (
    [0] => HTTP/1.1 200 OK
           Server: nginx
           Date: Mon, 24 Feb 2014 20:17:08 GMT
           Content-Type: text/plain; charset=utf-8
           Connection: close
           X-akismet-pro-tip: discard
           Content-length: 4
    [1] => true
)

Wenn der X-akismet-pro-tip Header auf discard gesetzt ist, hat Akismet den Kommentar als offensichtlichen Spam eingestuft, und du kannst ihn bedenkenlos verwerfen, ohne ihn in einer Spam-Warteschlange zu speichern. Mehr zu dieser Funktion erfährst du in diesem Akismet-Blogbeitrag.

Beispiel einer Ham-Antwort

Der Aufruf gibt „false“ zurück, wenn der Kommentar Kein Spam ist. Falls es dir nicht gelingt, eine Ham-Antwort auszulösen, kannst du „user_role“ auf „administrator“ und den Parameter „is_test“ auf „true“ setzen – das löst immer eine „false“-Antwort aus.

Array (
    [0] => HTTP/1.1 200 OK
           Server: nginx
           Date: Mon, 24 Feb 2014 20:17:08 GMT
           Content-Type: text/plain; charset=utf-8
           Connection: close
           Content-length: 5
    [1] => false
)

Eine Ham-Antwort kann auch den Header X-akismet-recheck-after enthalten, zum Beispiel:

Array (
    [0] => HTTP/1.1 200 OK
           Server: nginx
           Date: Mon, 24 Feb 2014 20:17:08 GMT
           Content-Type: text/plain; charset=utf-8
           Connection: close
           X-akismet-recheck-after: 900
           Content-length: 5
    [1] => false
)

Wenn der Header X-akismet-recheck-after vorhanden ist, solltest du den Kommentar nach der angegebenen Anzahl von Sekunden über den comment-check-Endpunkt erneut prüfen. In diesem Beispiel würde der Client idealerweise dieselbe comment-check-Anfrage nach 900 Sekunden, also 15 Minuten, erneut senden, ergänzt um den zusätzlichen Parameter recheck_reason=recheck.

Beispiel einer Fehler-Antwort

Wenn der Aufruf weder true noch false zurückgibt, liefert der Header X-akismet-debug-help Kontextinformationen zum aufgetretenen Fehler. Beachte, dass der Header X-akismet-debug-help nicht immer gesendet wird, wenn eine Antwort weder false noch true zurückgibt.

Array (
    [0] => HTTP/1.1 200 OK
           Server: nginx
           Date: Mon, 24 Feb 2014 16:34:54 GMT
           Content-Type: text/plain; charset=utf-8
           Connection: close
           X-akismet-debug-help: We were unable to parse your blog URI
           Content-length: 7
    [1] => invalid
)

Testen mit echten Daten

Es ist wichtig, Akismet mit einer nennenswerten Menge an echten, aktuellen Daten zu testen, um aussagekräftige Rückschlüsse auf die Genauigkeit ziehen zu können. Akismet funktioniert, indem es Inhalte mit tatsächlicher Spam-Aktivität vergleicht, die gerade jetzt stattfindet (und dabei fließt weit mehr ein als nur der Inhalt selbst). Daher ist das künstliche Erzeugen von Spam-Kommentaren kein geeigneter Ansatz.

Wir helfen dir gerne

Falls du einmal nicht weiterkommst oder Hilfe bei der Problembehandlung benötigst, zögere nicht, uns zu kontaktieren.