omines/akismet

开源库,用于使用Wordpress Akismet反垃圾邮件服务

1.0.0 2023-05-04 08:55 UTC

README

Latest Stable Version Total Downloads Latest Unstable Version License

此库提供了对知名在线Akismet垃圾邮件检测服务的简单直观的面向对象和可插拔实现。实现了所有已知功能和调用。

文档

使用Composer安装库

composer require omines/akismet

创建服务

您必须提供自己的基于 Symfony Contracts 的HTTP客户端实现。最简单的方法是安装 Symfony HTTP客户端组件

composer require symfony/http-client

当使用Symfony框架时,这将提供一个可配置的服务,您可以在需要的地方注入,否则您可以使用以下方式实例化一个标准客户端:

$httpClient = HttpClient::create();

现在实例化服务类,同时提供您的 Akismet API密钥 和您的网站/博客的根URL

$akismet = new Akismet($httpClient, 'Akismet API key', 'https://www.example.org/');

作为Symfony服务使用

将以下内容添加到 config/services.yaml 中,假设启用了自动注入,这是Symfony中应有的设置

    Omines\Akismet\Akismet:
        arguments:
            # Your 'blog', this should be the root URL of your deployment
            $instance: '%env(ROOT_URL)%'

            # Your Akismet API key
            $apiKey: '%env(AKISMET_KEY)%'

然后确保您的相关 .env 文件或实际环境变量包含正确的 ROOT_URLAKISMET_KEY 值。现在您可以在需要的地方注入 Omines\Akismet\Akismet

创建消息

在检查或提交任何内容之前,您必须构建和填充一个 AkismetMessage

$message = (new AkismetMessage())
    ->setUserIP('1.2.3.4')
    ->setType(MessageType::COMMENT)
    ->setContent('Some spammy message')
    ->setAuthorEmail('medicine_seller_1983@gmail.com')
;

根据您的框架,您可能已经有一些有用的数据在Symfony HTTP Foundation Request 实例或PSR-7 ServerRequestInterface 衍生中。从这些数据启动消息以复制用户IP、用户代理和HTTP引用字段是很容易的

$message = AkismetMessage::fromRequest($symfonyRequest);
// or
$message = AkismetMessage::fromPSR7Request($psr7Request);

您可以将 AkismetMessage 类安全地序列化,例如在实现审核队列时。审核后,您可以反序列化消息以将之前检查的精确消息提交为Ham或Spam。

检查消息

执行垃圾邮件检查很简单

$response = $akismet->check($message);
if ($response->isSpam()) {
    if ($response->shouldDiscard()) {
      // Akismet believes this to be the most pervasive and worst spam, not even worthy of moderation 
    } else {
      // The message is considered spam, so it should either be refused or manually reviewed
    }
}

阅读 他们的博客文章 中的“应丢弃”功能。

异步调用

当使用 symfony/http-client 作为HTTP客户端实现时,所有调用都是默认异步的。因此,在上面的示例中,对 Akismet::check 的调用 不会 阻止进一步的执行。这允许您通过并行执行其他任务(如准备通知电子邮件)来提高您的网站性能。

当您调用响应上的任何信息方法时,执行将阻塞,在这种情况下,是调用 isSpam 方法。

提交已确认的Ham和Spam

如前所述,在实现审核时,您可以安全地序列化提交以供检查的 AkismetMessage 实例。在人工审核后,您可以提交消息作为Ham或Spam以帮助改进Akismet的服务

$response = $this->akismet->submitHam($message);
$response = $this->akismet->submitSpam($message);

这些调用返回的 MessageResponse 对象,如果需要,可以用 $response->isSuccessful() 检查其成功,在异步方法中,这技术上不是必需的 - 方法是“一次性”的。

使用限制和活动

您可以检查您的使用限制和密钥/网站活动

$response = $this->akismet->usageLimit();
if ($response->getPercentage() > 50) {
    @trigger_error('Used up more than half the usage limit', E_USER_WARNING);
}
$response = $this->akismet->activity(limit: 100);
foreach ($response->getMonths() as $month => $activities) {
   // Do stuff
}

有关活动调用的参数和响应格式,请参阅Akismet 文档

贡献

贡献是欢迎的,并且将被认可。

我们通过Github上的Pull Requests接受贡献。遵循良好标准,保持PHPStan级别最高,并保持测试覆盖率在100%。

在提交之前,运行bin/prepare-commit来自动遵循编码标准,运行PHPStan和运行所有测试。要运行实时测试,创建一个定义AKISMET_KEY.env.local文件。由于它们在测试模式下运行,它们不会干扰您的配额或导致您被禁用。

法律

此软件是在荷兰埃因霍温的Omines Full Service Internetbureau内部开发的。它是在MIT许可证下与公众共享的,没有任何特定用途的适用性保证。有关更多详细信息,请参阅包含的LICENSE文件。