typecho跨博客双方文章同步(实现一方发文章双方全有)

教主
2月22日发布 /正在检测是否收录...

1. 实现原理

每个博客(A 和 B)提供一个 API 接口,用于接收对方博客发来的文章。

  • 当 A 发布新文章时,调用 B 的 API 接口,将文章发布到 B 博客。
  • 当 B 发布新文章时,调用 A 的 API 接口,将文章发布到 A 博客。
  • 双方通过注册为对方的用户,获得发文权限,但不会共享管理员账号。

2. 实现步骤

步骤 1:在 A 和 B 博客中创建 API 接口

每个博客需要创建一个 API 接口,用于接收对方发来的文章。

A 博客的 API 接口示例代码:


<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;

// 接收文章数据
$input = file_get_contents('php://input');
$data = json_decode($input, true);

// 验证请求(可选)
$token = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
if ($token !== '你的API密钥') {
    header('HTTP/1.1 401 Unauthorized');
    exit;
}

// 插入文章
$db = Typecho_Db::get();
$insert = $db->insert('table.contents')
    ->rows([
        'title' => $data['title'],
        'slug' => $data['slug'],
        'created' => time(),
        'modified' => time(),
        'text' => $data['content'],
        'authorId' => $data['authorId'], // 对方的用户 ID
        'type' => 'post',
        'status' => 'publish',
        'commentsNum' => 0,
        'allowComment' => 1,
        'allowPing' => 1,
        'allowFeed' => 1
    ]);
$db->query($insert);

// 返回成功响应
header('Content-Type: application/json');
echo json_encode(['status' => 'success']);
    

步骤 2:在 A 和 B 博客中注册为对方的用户

在 A 博客中注册 B 博客的管理员账号为一个普通用户,记录其用户 ID。

在 B 博客中注册 A 博客的管理员账号为一个普通用户,记录其用户 ID。

步骤 3:在 A 和 B 博客中开发文章同步功能

当 A 发布新文章时,调用 B 的 API 接口;当 B 发布新文章时,调用 A 的 API 接口。

A 博客的同步代码:


function syncPostToBlogB($post) {
    // B 博客的 API 地址
    $url = 'https://B博客地址/api/sync-post';

    // 文章数据
    $data = [
        'title' => $post['title'],
        'slug' => $post['slug'],
        'content' => $post['text'],
        'authorId' => 'B博客中A的用户ID' // A 在 B 博客中的用户 ID
    ];

    // 发送 HTTP 请求
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json',
        'Authorization: 你的API密钥'
    ]);
    $response = curl_exec($ch);
    curl_close($ch);

    // 记录日志(可选)
    file_put_contents(__TYPECHO_ROOT_DIR__ . '/usr/plugins/SyncToBlogB/log.txt', $response . PHP_EOL, FILE_APPEND);
}
    

B 博客的同步代码:

代码与 A 博客类似,只需修改 API 地址和用户 ID。

步骤 4:挂载文章发布事件

在 A 和 B 博客中,挂载文章发布事件,调用同步函数。

A 博客的挂载代码:


Typecho_Plugin::factory('Widget_Contents_Post_Edit')->finishPublish = array('SyncToBlogB_Plugin', 'syncPostToBlogB');
    

B 博客的挂载代码:


Typecho_Plugin::factory('Widget_Contents_Post_Edit')->finishPublish = array('SyncToBlogA_Plugin', 'syncPostToBlogA');
    

3. 测试同步功能

  • 在 A 博客发布一篇文章,检查是否同步到 B 博客。
  • 在 B 博客发布一篇文章,检查是否同步到 A 博客。
  • 确保双方原有的文章不受影响。

注意事项

  • API 安全性:使用 HTTPS 加密传输数据,并在 API 接口中添加身份验证(如 API 密钥)。
  • 用户权限:确保对方用户只能发布文章,不能修改或删除其他文章。
  • 文章格式:确保文章内容格式兼容(如 Markdown 或 HTML)。
  • 性能优化:如果文章数量较多,可以增加错误重试机制和日志记录。

更多技术分享和实用教程,欢迎访问我的博客:6v6 博客,一起探索技术的无限可能!

喜欢就支持一下吧
点赞 0 分享 赞赏
评论 抢沙发
OωO
取消 登录评论
i
Ctrl+D 收藏本站 再次访问不迷路~