omines / akismet
开源库,用于使用Wordpress Akismet反垃圾邮件服务
Requires
- php: >=8.1
- psr/log: ^3.0
- symfony/http-client-contracts: ^3
Requires (Dev)
- ext-json: *
- ekino/phpstan-banned-code: ^1.0
- friendsofphp/php-cs-fixer: ^3.16.0
- nyholm/psr7: ^1.6
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.10.13
- phpstan/phpstan-phpunit: ^1.3.11
- phpunit/phpunit: ^10.1.1
- psr/http-message: ^1.0 || ^2.0
- symfony/dotenv: ^6.2.8
- symfony/http-client: ^6.2.9
- symfony/http-foundation: ^6.2
Suggests
- symfony/http-client: As asynchronous HTTP Client
This package is auto-updated.
Last update: 2024-09-01 17:11:58 UTC
README
此库提供了对知名在线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_URL
和 AKISMET_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
文件。