Typecho 插件开发指南:从零开始实现文章同步功能
1. 插件目录结构
Typecho 插件需要放置在 usr/plugins/
目录下。每个插件是一个独立的文件夹,文件夹名称就是插件的唯一标识。
例如,创建一个名为 SyncToPlatform
的插件:
usr/plugins/SyncToPlatform/
├── Plugin.php // 插件主文件
├── LICENSE // 插件许可证
└── README.md // 插件说明文档
2. 插件主文件 (Plugin.php)
插件的核心逻辑写在 Plugin.php
文件中。以下是一个简单的插件示例,用于在文章发布时触发同步操作。
<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
class SyncToPlatform_Plugin implements Typecho_Plugin_Interface
{
/**
* 激活插件
*/
public static function activate()
{
// 挂载文章发布事件
Typecho_Plugin::factory('Widget_Contents_Post_Edit')->finishPublish = array('SyncToPlatform_Plugin', 'syncPost');
return _t('插件已激活');
}
/**
* 禁用插件
*/
public static function deactivate()
{
return _t('插件已禁用');
}
/**
* 插件配置面板
*/
public static function config(Typecho_Widget_Helper_Form $form)
{
// 添加 Medium API Token 输入框
$apiToken = new Typecho_Widget_Helper_Form_Element_Text('apiToken', NULL, '', _t('Medium API Token'), _t('请输入你的 Medium API Token'));
$form->addInput($apiToken);
// 添加用户 ID 输入框
$userId = new Typecho_Widget_Helper_Form_Element_Text('userId', NULL, '', _t('Medium 用户 ID'), _t('请输入你的 Medium 用户 ID'));
$form->addInput($userId);
}
/**
* 个人用户的配置面板
*/
public static function personalConfig(Typecho_Widget_Helper_Form $form)
{
// 不需要个人配置
}
/**
* 文章发布时同步到 Medium
*/
public static function syncPost($contents, $class)
{
// 获取插件配置
$options = Typecho_Widget::widget('Widget_Options');
$pluginConfig = $options->plugin('SyncToPlatform');
$apiToken = $pluginConfig->apiToken;
$userId = $pluginConfig->userId;
if (empty($apiToken) || empty($userId)) {
return;
}
// 准备文章数据
$title = $contents['title'];
$content = $contents['text'];
$tags = isset($contents['tags']) ? explode(',', $contents['tags']) : [];
// 调用 Medium API 发布文章
$url = "https://api.medium.com/v1/users/{$userId}/posts";
$data = [
'title' => $title,
'contentFormat' => 'markdown',
'content' => $content,
'tags' => $tags,
'publishStatus' => 'public' // 或 'draft'
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Authorization: Bearer ' . $apiToken,
'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$response = curl_exec($ch);
curl_close($ch);
// 记录日志(可选)
file_put_contents(__TYPECHO_ROOT_DIR__ . '/usr/plugins/SyncToPlatform/log.txt', $response . PHP_EOL, FILE_APPEND);
}
}
3. 插件配置
在 Typecho 后台的“插件”页面,找到 SyncToPlatform
插件并激活。
进入插件设置页面,输入你的 Medium API Token 和用户 ID。
4. 测试插件
在 Typecho 中发布一篇文章,插件会自动调用 Medium API 将文章同步到 Medium。
检查 Medium 账号,确认文章是否成功发布。
扩展功能
- 支持更多平台:可以在
syncPost
方法中添加其他平台的 API 调用逻辑(如 CSDN、知乎等)。 - 错误处理:增加对 API 调用失败的处理,例如重试或记录错误日志。
- 自定义发布状态:允许用户选择文章发布状态(公开或草稿)。
注意事项
- API 限制:不同平台的 API 可能有调用频率限制,注意不要频繁调用。
- 安全性:确保 API Token 等敏感信息的安全,不要泄露。
- 格式兼容性:不同平台对内容的格式要求不同,可能需要调整文章内容。
更多技术分享和实用教程,欢迎访问我的博客:6v6 博客,一起探索技术的无限可能!
还可以使用csdn吗,教主
@YSPLL
csdn的我已经研究了个更好的了,不过目前还先不发,这次的可以下载付费的文章,和积分类的
@教主
还能得到教主的回复,真是太激动了=。能有机会提前了解教主您正在研究的内容,对我来说真是一次难得的机会。希望可以体验下,可以付费使用,非常期待教主您的分享。
csdn那个现在怎么用不了,教主