rivervanrain / indieweb
为Elgg提供IndieWeb集成
Requires
- php: ^8.3
- guzzlehttp/guzzle: ^7.0
- indieauth/client: ^1.1
- indieweb/mention-client: ^1.2.1
- lcobucci/jwt: 4.0.*
- masterminds/html5: ^2.0
- p3k/micropub: ^0.0.3
- p3k/xray: ^1.12.0
- pfefferle/openwebicons: ^1.6.3
- rivervanrain/websub: dev-elgg
- symfony/dom-crawler: ^5.4
Conflicts
- elgg/elgg: <6.0
README
为Elgg提供IndieWeb集成
关于
将IndieWeb的哲学理念集成到您的Elgg网站上。基于IndieWeb Drupal插件,由Kristof De Jaeger aka swentel开发。
特性
- Webmention:发送和接收webmention和pingback;通过brid.gy发送webmention和同步内容,喜欢等;存储同步;自动从
in-reply-to
创建评论;在评论中回复并通过Webmention.io和另一个外部或内部端点发送webmention - Microformats:将Microformats2应用于您的标记;内容、图像等的Microformats
- IndieAuth:允许用户使用IndieAuth登录和创建账户;内置IndieAuth授权和认证API;公开端点和使用外部或内部端点
- Micropub:创建、更新和删除内容笔记、文章、事件、RSVP、回复、喜欢、重新发布、书签、签到和问题
- Microsub:内置Microsub服务器或使用外部服务;公开Microsub端点,外部或内部
- Feeds:创建JF2订阅源
- 媒体缓存:将图像存储在本地,以供内部webmention和microsub端点使用
- WebSub:WebSub PuSH 0.4用于发布和订阅,与Microsub支持订阅源集成
- 联系人:存储联系人以供Micropub联系人查询,允许自动完成
Webmention
Webmention.io是一个托管服务,旨在轻松处理任何网页上的webmention
。Elgg中的Webmention公开了一个端点/webmention
,通过此服务接收Webmention。
Webmention.io是开源的,因此您也可以自行托管此服务。
您需要在Webmention.io上创建账户以接收webhook。一旦在该服务中记录了一个Webmention,您就可以将webhook设置为https://your_domain/webmention并输入一个密钥。
要创建账户,您需要通过IndieAuth进行认证,这需要您在指向您的社交账户的链接上添加rel=me
属性。请参阅设置说明以获取完整说明。有关更多信息,请参阅下面的IndieAuth
。
您还可以使用内置端点,这样您就不需要依赖外部服务。
配置位于/admin/indieweb/webmention
。所有接收到的Webmention的概览在/admin/indieweb/webmention/received
。
使用Bridgy发送Webmention和同步内容
在Elgg中,您可以通过在发布到
字段集中发布新的实体来同步和发送Webmention,该字段集中受/admin/indieweb/webmention
上的发送
配置保护。
对于内容分发,实体表单中将提供复选框,用于按目标发送您的内 容(例如,Fediverse等)。还有一个可用于渲染POSSE-Post-Discovery的syndication字段
。
您还可以配置仅在自定义URL
字段中输入,以发送Webmention。
当您切换到分发,并创建实体时,Webmention将发送到Bridgy等。
Bridgy将社交网络上的评论、点赞和转发拉回到您的网站。您还可以用它来在社交网络上发布,或评论、点赞、转发,甚至进行 RSVP - 从您的网站。Bridgy是开源的,因此您也可以自己托管该服务。为了从这些网络接收内容,bridgy将发送webmention,因此您只需启用webmention端点。
您的内 容需要在内容、图像等上具有适当的Microformat
类。
注意:Bridgy更喜欢p-summary
而不是e-content
,但对于原始推文,则首先使用p-name
。请参阅https://brid.gy/about#microformats
您可以在Bridgy上预览您的帖子以验证您的标记是否正确。
所有已发送Webmention的概述在/admin/indieweb/webmention/sent
。
Microformats
Microformats是Elgg中HTML的扩展,用于标记人、组织、事件、位置、博客文章、产品、评论、简历、食谱等。
网站使用Microformats发布标准API,该API被搜索引擎、聚合器和其他工具消费和使用。
示例
<p class="h-card">My name is <a class="u-url p-name" rel="me" href="/">Your name</a>
为发布(或其他功能)添加的类
h-entry
:添加在实体包装器上h-event
:添加在事件实体的包装器上dt-published
、u-url
和p-name
在实体的metadata
中e-content
:添加在默认body
字段上p-summary
:添加在默认summary
字段上u-photo
:添加在图像样式上u-video
:添加在视频样式上
还有几个链接、类别、RSVP、地理缓存、签到和地理的表单字段格式化程序。
对于引用有一个特殊情况:如果您有link
字段和body
,则转发格式化程序将设置一个静态变量,以便将body
字段和link
字段移动到特殊容器内。这只适用于body
字段,因此请确保您在实体子类型的内容上使用该字段。
Micropub
允许发布到您的Elgg应用。
在您发布之前,您需要验证并启用IndieAuth身份验证API。每个请求都将包含一个访问令牌,该令牌将被验证以确保确实是由您发布。
请参阅IndieAuth进行配置。有关Micropub的更多信息。
一个非常好的客户端是quill。完整的列表可在Micropub客户端中找到。Indigenous(适用于iOS和Android)也是micropub阅读器。
即使您没有决定使用Micropub端点,配置屏幕也为您提供了一个很好的概述,说明您可以创建哪些内容类型和字段,这些内容类型可用于发送Webmention或由Microformat解析器读取。
还有一个媒体端点,您可以在其中上传文件(仅限音频、图像和视频)。
您可以在/admin/indieweb/micropub
配置Micropub。
支持的帖子类型
- 文章:博客文章
- 注意:小型帖子,将其视为推文或The Wire帖子
- 回复:对URL进行回复
- 转发:转发URL
- 点赞:点赞URL
- 书签:将URL添加到书签
- 事件:创建事件
- RSVP:创建RSVP
- 问题:在存储库中创建问题
- 签到:在某个位置签到
了解更多关于 帖子 的信息。
您可以在 /admin/indieweb/micropub/posts
配置此功能。
联系人
允许存储联系人,这些联系人可用于Micropub联系人查询。
可以在 /admin/indieweb/micropub
启用Micropub的 contact
端点。
更多信息请访问 昵称
Microsub
Microsub 是一个规范草案的早期版本,为客户端提供了一种标准化的方式来消费和交互由服务器收集的源。
阅读器有Indigenous(iOS和Android)、Monocle和Together等,还有更多即将到来。服务器有Aperture、Ekster等。
更多信息请参阅 Microsub-spec
在Elgg中启用Microsub允许您公开一个Microsub标题链接,这可以是内置的Microsub服务器或设置为外部服务。
内置服务器通道和来源在 /admin/indieweb/microsub/channels
管理。
注意:服务器必须始终有一个具有 uid
notifications
的通道,并且必须始终至少有一个其他通道用于用户。
已实现的Microsub动作
GET action=channels
:检索通道列表GET action=timeline
:检索通道中的项目列表POST action=timeline
:标记条目为已读,从通道中移动或删除条目POST action=channels
:创建、更新、排序和删除通道POST action=follow, unfollow
:订阅、取消订阅源,更新源通道POST/GET action=search, preview
:搜索和预览url
提示:使用HTML格式化以获取最佳上下文。
注意:当您将源配置为 清理源条目
时,默认情况下我们内部计数多5个项目。原因是某些源使用固定条目(例如Mastodon),这些条目可能会出现和消失,并混淆页面上总可视条目的数量。或者简单地因为后来删除了帖子。
Aperture
如果您使用 Aperture 作为Microsub服务器,当此站点收到Webmention时,您可以发送Micropub帖子到一个通道。典型示例是将该通道名称标记为 通知
,这样您就可以在Monocle或Indigenous等阅读器上查看传入的Webmention。以下Webmention被发送: 赞
、转发
、书签
、提及
和 回复
。
请求
默认情况下,所有对Microsub端点的请求都是匿名的。这允许获取通道及其中的帖子。当请求为匿名时,不允许写操作(如管理通道、订阅、搜索、标记(未)阅读等)。
这对于在阅读器中展示端点来说很理想。
注意:您仍然可以进行认证请求,但由于匿名请求,项目始终会被标记为未读。
媒体缓存
当使用内置的Webmention/Microsub端点或联系人时,会存储大量文件url到外部图像。这些文件将被下载并本地缓存。缓存是在处理Webmention或Microsub项目时生成的,因此对请求的影响最小。
IndieAuth
IndieAuth 是一种使用您自己的域名来登录网站的方式。它通过将您的网站链接到一个或多个身份验证提供者(如Twitter或Google)来实现,然后在支持IndieAuth的网站的登录表单中输入您的域名。
Indieauth.com 和 Indielogin.com 是一款托管服务,可以为您完成这项任务,后者还提供了身份验证API。它们都是开源的,因此您也可以自行托管该服务。
简单的方法是在您的首页添加指向您社交媒体账户的 rel="me"
链接,并在每个服务中添加指向您主页的链接。它们甚至可以隐藏。
<a href="https://twitter.com/elgg" target="_blank" title="Twitter" rel="me"></a>
如果您不想使用第三方服务,也可以使用PGP密钥。有关详细信息,请参阅 https://indieauth.com/setup。
此插件不会公开任何这些链接或帮助您设置PGP,您将需要自行管理。
如果您使用像 Quill(网络或本土(iOS、Android)或其他可以发布通过Micropub或通过Microsub读取的客户端),让这些客户端通过您的域名登录的最简单方法也是使用 https://indieauth.com,并交换访问令牌以进行进一步请求。只有当您想使用Micropub或Microsub时才公开这些头链接。
您还可以使用内置的身份验证和令牌端点。然后您可以使用Elgg用户(仅限网站管理员)授权自己。支持PKCE。
公钥和私钥
在内部使用端点时,访问令牌使用私钥加密,并使用公钥解密。您可以通过UI生成它们,或者通过运行以下命令手动创建它们。
openssl genrsa -out private.key 2048
openssl rsa -in private.key -pubout > public.key
理想情况下,这些密钥应该存储在您的webroot之外的一个文件夹中。如果不可能,请确保权限设置为600。然后请在 /admin/indieweb/indieauth
中填写路径。
WebSub
WebSub(以前称为PubSubHubbub或PuSH,以及简短地PubSub)是一种基于通知的协议,用于实时发布和订阅流和旧式feed文件。
Elgg的WebSub允许您将内容发布到中心,并从中心接收Microsub feed的通知,从而无需轮询。
默认的发布中心是 switchboard。
pubsubhubbub 和 superfeedr 也可以用于获取订阅和通知。
当您切换到发布时,会在队列中创建一个条目,您可以通过cron处理它。这将向配置的中心发送请求。已发布内容的概述在 /admin/indieweb/websub/pub
。
更多配置在 /admin/indieweb/websub
。
有关更多信息,请参阅 如何发布和消费WebSub 和 WebSub。
订阅源
在JF2中生成订阅源。
您将需要订阅源的情况:
- 当您使用Bridgy时:服务将查找带有
rel="feed"
的html链接标头,并使用这些页面进行爬取,以便知道需要向哪些内容发送webmention。 - 您想要允许IndieWeb阅读器(Monocle、Together、Indigenous)订阅您的内容。这些是替代类型,它们可以链接到包含microformat条目的页面。建议在该页面上也放置一个
h-card
,因为一些解析器不会访问主页来获取该内容。
例如,使用 yourdomain.com/blog/all?view=jf2feed
来查看订阅源。
有关更多信息,请参阅
通过Bridgy Fed或ActivityPub插件进行Fediverse
Bridgey Fed 允许您从Elgg应用程序与Mastodon和Hubzilla等联邦社交网络进行交互。它将Webmention中的回复、点赞和转发翻译为联邦社交网络协议如ActivityPub和OStatus,反之亦然。Bridgey Fed是开源的,因此您也可以自己托管该服务。请参阅Bridgey Fed
目前支持Mastodon,并将继续增加更多。您不需要在任何社交网络上创建账户。
只需将Fediverse|https://fed.brid.gy/
添加为聚合目标,并在发布新内容时选择它。发布、回复、点赞、转发和关注都能正常工作。
- 请参阅Bridgey Fed设置以获取更多设置信息。
- 如果您使用microsub服务器,您可以通过microformats源订阅fediverse用户。
如果您想使用Elgg本身与Fediverse进行交互,您还可以安装ActivityPub插件。
IndieWebify.me / sturdy-backbone.glitch.me / xray.p3k.io
使用IndieWebify.me进行初步检查,以查看您的站点是否已准备好Indieweb。它可以在您使用此模块(和可选的更多)进行配置后扫描某些标记。
请注意,在Indiewebify中,作者发现对于帖子并不完全工作,请使用https://sturdy-backbone.glitch.me。
另一个好工具是http://xray.p3k.io,它以JSON格式显示结果。
用法
一旦激活,插件将提供以下功能
- 它将监听对象的创建事件,如果对象的描述包含URL,它将尝试向其发送webmention。
- 它在一个http://yoursite.url/webmention/上公开webmention端点(设置适当的头部值)。
OpenWeb图标
我们使用OpenWeb Icons来使一些菜单项看起来更美观。
使用此代码片段将图标添加到菜单中
<i class="openwebicons-indieweb" style="font-size: 16px;"></i> <i class="openwebicons-feed-colored" style="font-size: 20px;"></i>
更多示例在项目页面上
开发者片段
/** Elgg\IndieWeb\Webmention\Client\WebmentionClient **/ $svc = elgg()->webmention; $response = $svc->get($source); /** Elgg\IndieWeb\Microsub\Client\MicrosubClient **/ $microsub_client = elgg()->microsub; $microsub_client->sendNotification($webmention, $parsed); /** \Elgg\IndieWeb\Cache\MediaCacher **/ $image = elgg()->mediacacher->saveImageFromUrl($author_value); // Get the target guid $target_guid = indieweb_get_guid($target); $webmention->setMetadata('target_guid', $target_guid); $target = indieweb_get_path($target); $webmention->setMetadata('target', $target);