indieweb / mention-client
发送webmention和pingback通知的客户端库
Requires
- php: >=5.6
- mf2/mf2: >=0.2
Requires (Dev)
- phpunit/phpunit: ^6
README
用于发送webmention和pingback通知的客户端库。
用法
基本用法
给定一个源URL,此函数将找到页面上的链接,发现每个链接的webmention和pingback端点,并发送发现的任何提及。
<?php $client = new IndieWeb\MentionClient(); $sent = $client->sendMentions($sourceURL); echo "Sent $sent mentions\n"; ?>
库将获取源URL,解析它,并寻找第一个h-entry、h-card或h-event。然后它将尝试向对象中找到的所有URL发送webmention(和pingback),这些URL可以是属性,也可以在“内容”HTML中。
库通过向目标URL发送HEAD请求并查看头来尝试找到端点,如果没有找到,则它将发送GET请求并在页面主体中搜索rel值。
找到pingback或webmention端点后,将请求发送到每个端点。
或者,您可以传递HTML作为第二个参数,库将查找HTML中的所有绝对链接,而不是获取您的帖子内容并查找microformats对象。
<?php $client = new IndieWeb\MentionClient(); $sent = $client->sendMentions($sourceURL, $sourceHTML); echo "Sent $sent mentions\n"; ?>
发现Webmention端点
给定一个目标URL,此函数将在找到的情况下返回其webmention端点,否则返回false。
<?php $client = new IndieWeb\MentionClient(); $endpoint = $client->discoverWebmentionEndpoint($targetURL); $endpoint = $client->discoverPingbackEndpoint($targetURL); ?>
发送Webmention
要向目标URL发送webmention,您可以使用下面的函数。这将首先发现目标的webmention端点,如果找到,则将webmention有效负载发送到它。您可以在有效负载中包含其他属性。
<?php $client = new IndieWeb\MentionClient(); $response = $client->sendWebmention($sourceURL, $targetURL); $response = $client->sendWebmention($sourceURL, $targetURL, ['vouch'=>$vouch]); ?>
如果在目标中没有找到webmention端点,则函数将返回false。有关成功的webmention的响应示例,请参见下面的函数。
在尝试发送webmention之前,您还可以检查端点是否声明了webmention端点。
<?php $client = new IndieWeb\MentionClient(); $supportsWebmention = $client->discoverWebmentionEndpoint($targetURL); if($supportsWebmention) { $client->sendWebmention($sourceURL, $targetURL); } ?>
发送Pingback
<?php $client = new IndieWeb\MentionClient(); $response = $client->sendPingback($sourceURL, $targetURL); ?>
在尝试发送pingback之前,您还可以检查端点是否声明了pingback端点。
<?php $client = new IndieWeb\MentionClient(); $supportsPingback = $client->discoverPingbackEndpoint($targetURL); if($supportsPingback) { $client->sendPingback($sourceURL, $targetURL); } ?>
直接发送Webmention或Pingback
要发送实际的webmention或pingback有效负载,您可以使用下面的静态函数。如果需要,您可以在数组中传递额外的属性用于webmention请求。
<?php $response = IndieWeb\MentionClient::sendWebmentionToEndpoint($endpoint, $source, $target); $response = IndieWeb\MentionClient::sendWebmentionToEndpoint($endpoint, $source, $target, ['vouch'=>$vouch]); ?>
响应是一个包含HTTP状态码、HTTP头和响应体的数组
{ "code": 202, "headers": { "Content-Type: text/plain" }, "body": "Webmention is processing" }
您可以通过测试响应代码是否为200、201或202来检查webmention是否被接受。
<?php $success = IndieWeb\MentionClient::sendPingbackToEndpoint($endpoint, $source, $target); ?>
pingback函数根据pingback是否成功发送返回true或false。
在源文档中查找目标URL
如果您有一个渲染的HTML页面(或部分HTML页面),您可以使用此函数返回页面上的出站链接列表。
<?php $client = new IndieWeb\MentionClient(); $urls = $client->findOutgoingLinks($html); ?>
或者,您可以将解析的Microformats对象传递给findOutgoingLinks
函数,它将在任何属性的任何e-content对象的HTML中搜索URL。
$client = new IndieWeb\MentionClient(); $parsed = \Mf2\parse($html, $sourceURL); $urls = $client->findOutgoingLinks($parsed);
找到的所有链接都将返回一个数组,其中包含重复的URL。如果没有找到链接,它将返回一个空数组。
[ "http://example.com/1", "http://example.com/2" ]
自定义用户代理
您可以为该库在发送HTTP请求时使用的用户代理设置。
IndieWeb\MentionClient::setUserAgent('Custom user agent string');
在此之后,该库发出的任何HTTP请求(GET、HEAD、POST)都将包含您设置的用户代理头。
调试
如果您想收集调试信息以便查看库执行的步骤,请在调用任何其他函数之前运行 IndieWeb\MentionClient::enableDebug();
。
关于Webmention
要了解更多关于Webmention的信息,请参阅 webmention.net。
webmention.io 服务还可以充当pingback->webmention代理,这将允许您接收pingback,就像它们是以webmention的形式发送的一样。
关于Pingback
如果您想在您的网站上接收pingback,请查看 webmention.io,它处理接受XMLRPC请求并通过API公开数据。
许可证
版权所有2013-2017年,由Aaron Parecki和贡献者
可在Apache 2.0和MIT许可证下使用。
Apache 2.0
本软件文件受Apache License, Version 2.0(以下简称“许可证”)的许可;除非符合许可证规定,否则不得使用本文件。您可以在以下位置获取许可证副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”提供,不提供任何明示或暗示的保证或条件。有关许可证的具体语言、权限和限制,请参阅许可证。
MIT
特此授予任何获得此软件及其相关文档文件(以下简称“软件”)副本的任何人,免费使用该软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许软件的接收者进行此类操作,但受以下条件约束:
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、特定用途适用性和非侵权性。在任何情况下,作者或版权所有者不应对任何索赔、损害或其他责任负责,无论这些责任是基于合同、侵权或其他法律行为,无论这些责任是否与软件或其使用或其他方式相关。