Prevent comment spam using Akismet service, in PHP. https://dev.belin.io/akismet.php
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Cédric Belin 7453fae24a Updated the PHP badge 1 week ago
.vscode Added VSCode editor settings 1 month ago
doc Updated the bug tracker link 3 weeks ago
example Updated the documentation 1 month ago
lib Renamed the `Client::setIsTest()` method 1 month ago
test Updated the documentation 1 month ago
var Initial commit 2 years ago
.editorconfig Updated a link 3 months ago
.gitattributes Added a ".semver" file 3 months ago
.gitignore Code formatting 1 month ago
.semver Fixed the version number 3 months ago
.travis.yml Updated the build system 3 months ago
AUTHORS.txt Added the legal files 2 years ago
CHANGELOG.md Added an example code 1 month ago
LICENSE.md Updated the license 10 months ago
README.md Updated the PHP badge 1 week ago
RoboFile.php Updated the dependencies 3 weeks ago
composer.json Updated the bug tracker link 3 weeks ago
mkdocs.yml Fixed the edit URL 3 weeks ago
phpdoc.xml Updated the documentation 7 months ago
phpstan.neon Added support for PHPStan 3 months ago
phpunit.xml Disabled the PHPUnit cache 4 months ago

README.md

Akismet for PHP

Runtime Release License Downloads Coverage Build

Prevent comment spam using Akismet service, in PHP.

Documentation

Development

Features

  • Key verification: checks an Akismet API key and gets a value indicating whether it is valid.
  • Comment check: checks a comment and gets a value indicating whether it is spam.
  • Submit spam: submits a comment that was not marked as spam but should have been.
  • Submit ham: submits a comment that was incorrectly marked as spam but should not have been.

Requirements

You need the latest PHP and Composer versions to use the Akismet library.

If you plan to play with the sources, you will also need the latest Robo and Material for MkDocs versions.

Installing with Composer package manager

From a command prompt, run:

composer require cedx/akismet

Usage

Key verification

<?php
use Akismet\{Blog, Client, ClientException};
use GuzzleHttp\Psr7\{Uri};

try {
  $client = new Client('123YourAPIKey', new Blog(new Uri('https://www.yourblog.com')));
  $isValid = $client->verifyKey();
  echo $isValid ? 'The API key is valid' : 'The API key is invalid';
}

catch (ClientException $e) {
  echo 'An error occurred: ', $e->getMessage();
}

Comment check

<?php
use Akismet\{Author, Comment, CommentType};

try {
  $comment = new Comment(
    new Author('127.0.0.1', 'Mozilla/5.0'),
    'A user comment',
    CommentType::CONTACT_FORM
  );

  $isSpam = $client->checkComment($comment);
  echo $isSpam ? 'The comment is spam' : 'The comment is ham';
}

catch (ClientException $e) {
  echo 'An error occurred: ', $e->getMessage();
}

Submit spam / ham

<?php
try {
  $client->submitSpam($comment);
  echo 'Spam submitted';

  $client->submitHam($comment);
  echo 'Ham submitted';
}

catch (ClientException $e) {
  echo 'An error occurred: ', $e->getMessage();
}

Events

The Akismet\Client class is an EventEmitter that triggers some events during its life cycle:

  • request : emitted every time a request is made to the remote service.
  • response : emitted every time a response is received from the remote service.

You can subscribe to them using the on() method:

<?php
use Psr\Http\Message\{RequestInterface, ResponseInterface};

$client->on(Client::EVENT_REQUEST, function(RequestInterface $request) {
  echo 'Client request: ', $request->getUri();
});

$client->on(Client::EVENT_RESPONSE, function($request, ResponseInterface $response) {
  echo 'Server response: ', $response->getStatusCode();
});

Unit tests

In order to run the tests, you must set the AKISMET_API_KEY environment variable to the value of your Akismet API key:

export AKISMET_API_KEY="<123YourAPIKey>"

Then, you can run the test script from the command prompt:

composer test

License

Akismet for PHP is distributed under the MIT License.