wordpress 实现 webhooks

通过webhooks 实现 wordpress 发文章时,自动推送功能

1. 背景

今天遇到了一个需求,就是我们在wordpress上发布了新的文章,能不能自动在我们的App上推送一个新的Push。

所以就在本机搭建了一个springBoot,然后通过docker 启动了 wordpress 的实例。来实现webhook的功能。

2. 部署 wordpress webhook 插件 WP Webhooks

wordpress 实现 webhooks
wordpress 实现 webhooks

我们下载了 WP Webhooks 插件。并激活就可以了。

3. 配置WP Webhooks 的接收URL

wordpress webhook配置界面
wordpress webhook配置界面

在wordpress上的用户动态,文章动态,都可以进行相应的订阅行为,比如我们就在文章发布后,向我们的服务器发一条更新信息。

但我们的服务器是 在 docker外的,那怎么访问docker外的网址呢?

4. docker内怎么访问主机的网址服务

通过 如下网址 即可访问,127.0.0.1 不可用了,localhost 也不可以用了。

http://host.docker.internal:80/monitor/webhook

5. 我们再看看wordpress webhook 发送的具体参数

接收代码如下:

    @PostMapping("/webhook")
    public @ResponseBody
    List<MonitorInfo> webhook(@RequestBody() Map<String, Object> params) {
        // 参数获取
        logger.info("参数获取");
        logger.info("参数列表如下 {}", params);
        logger.info("基于参数拼装Push数据 并发送");
        return monitorService.findAll();
    }
wordpress webhook测试文章
wordpress webhook测试文章

写一篇测试文章如上,标题,图片,类目都包括了。

6. spring boot 接收实现 webhook请求

2022-06-23 10:08:40.005  INFO 27542 --- [p-nio-80-exec-1] hello.MonitorController                  : 参数获取
2022-06-23 10:08:40.006  INFO 27542 --- [p-nio-80-exec-1] hello.MonitorController                  : 参数列表如下 {post_id=11, post={ID=11, post_author=1, post_date=2022-06:08:32, post_date_gmt=2022-06-23 02:08:32, post_content=<!-- wp:paragraph -->
<p>pcx content </p>
<!-- /wp:paragraph -->

<!-- wp:image {"id":12,"sizeSlug":"large","linkDestination":"none"} -->
<figure class="wp-block-image size-large"><img src="http://127.0.0.1:8080/wp-content/uploads/2022/06/哼唱搜索-1024x508.png" alt="哼唱搜索" class="wp-image-12"/></figure>
<!-- /wp:image -->, post_title=pcx title, post_excerpt=, post_status=publish, comment_status=open, ping_status=open, post_password=, post_name=pcx-title-2, to_ping=, pinged=, post_modified=2022-06-23 10:08:32, post_modified_gmt=2022-06-23 02:08:32, post_content_filtered=, post_parent=0, guid=http://127.0.0.1:8080/?p=11, menu_order=0, post_type=post, post_mime_type=, comment_count=0, filter=raw}, post_meta={_edit_lock=[1655950091:1], wpwhpro_create_post_temp_status_ssevening=[draft], _pingme=[1], _encloseme=[1], _thumbnail_id=[12]}, post_thumbnail=http://127.0.0.1:8080/wp-content/uploads/2022/06/哼唱搜索.png, post_permalink=http://127.0.0.1:8080/?p=11, taxonomies={category={uncatezed={term_id=1, name=未分类, slug=uncategorized, term_group=0, term_taxonomy_id=1, taxonomy=category, description=, parent=0, count=4, filter=raw}}}}
2022-06-23 10:08:40.006  INFO 27542 --- [p-nio-80-exec-1] hello.MonitorController                  : 基于参数拼装Push数据 并发送
<==========---> 80% EXECUTING [19m 4s]
> :bootRun

可以看到,webhook 是通过 把整段 Json完整的Post过来的一种方式。和 我们日常认知的 POST 和 GET 请求有一些不同。这一点大家注意。

最后,wordpress 非常的强大,做SEO的推荐大家用一用

wordpress docker 搭建教程

webhook 的架构图

wordpress webhook push 推送架构图
wordpress webhook push 推送架构图
外网的webhookp实现
外网的webhookp实现

发表评论

您的电子邮箱地址不会被公开。