indieweb/mention-client

发送webmention和pingback通知的客户端库

1.2.1 2021-02-02 13:13 UTC

This package is auto-updated.

Last update: 2024-09-16 23:14:19 UTC


README

用于发送webmentionpingback通知的客户端库。

Build Status Packagist

用法

基本用法

给定一个源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

特此授予任何获得此软件及其相关文档文件(以下简称“软件”)副本的任何人,免费使用该软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许软件的接收者进行此类操作,但受以下条件约束:

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的还是暗示的,包括但不限于适销性、特定用途适用性和非侵权性。在任何情况下,作者或版权所有者不应对任何索赔、损害或其他责任负责,无论这些责任是基于合同、侵权或其他法律行为,无论这些责任是否与软件或其使用或其他方式相关。