dede如何同步发布文章到博客?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 DEDE建站 正文

场景分析

我们需要明确“博客”是什么,通常有两种情况:

dede发布文章到博客
(图片来源网络,侵删)
  1. 独立的博客网站:你有一个主站 www.a.com (使用DedeCMS),还有一个独立的博客 blog.b.com (可能也使用DedeCMS,或者其他CMS如WordPress),目标是把 a.com 发布的文章,自动同步到 blog.b.com
  2. 子目录/子域名的博客:你的主站是 www.a.com,而博客就在 www.a.com/blog/ 目录下,这种情况相对简单,因为它们共享同一个数据库。

下面我将针对这两种情况,提供不同的解决方案。


使用RSS订阅/抓取(最通用、推荐)

这种方法的核心是:让博客系统定时抓取你的DedeCMS站点的RSS源,然后自动生成文章。

优点:

  • 通用性强:无论你的博客是什么系统(WordPress, Typecho, Joomla, 甚至其他DedeCMS站点),只要支持RSS订阅或RSS抓取插件即可。
  • 非侵入性:不需要修改DedeCMS的核心文件,升级DedeCMS时不会受影响。
  • 实现简单:只需在博客端设置即可。

缺点:

dede发布文章到博客
(图片来源网络,侵删)
  • 有轻微延迟:取决于博客抓取RSS的频率(通常是几分钟到几小时)。
  • 图片处理可能不完美:如果图片是绝对路径,抓取后在新站可能无法显示(需要博客端有处理相对路径的功能)。
  • 内容格式可能丢失:复杂的编辑器格式(如表格、特殊样式)可能在抓取后变形。

操作步骤:

第一步:在DedeCMS(源站)开启RSS功能

DedeCMS默认就带有RSS生成功能,我们只需要确保它正常工作。

  1. 登录你的DedeCMS后台。
  2. 进入 “系统” -> “RSS订阅”
  3. 你可以看到默认的RSS订阅地址,通常是 你的域名/rss.xml
  4. 点击“更新缓存”或直接访问这个地址,看看是否能正常生成XML文件,如果能,说明RSS源已经准备好了。

第二步:在博客(目标站)设置RSS抓取

dede发布文章到博客
(图片来源网络,侵删)

WordPress为例,这是最常见的需求。

  1. 在你的WordPress博客后台,安装一个RSS导入插件,推荐使用 WP RSS Aggregator
  2. 安装并激活插件后,进入WordPress后台的 “RSS导入器” 菜单。
  3. 点击 “添加新的Feed”
  4. 在Feed Source URL一栏,填入你的DedeCMS站点的RSS地址(https://www.a.com/rss.xml)。
  5. 设置Feed的名称、更新频率等。
  6. 保存后,插件会根据你设定的频率,自动抓取DedeCMS的最新文章,并将其作为WordPress的“文章草稿”或“已发布”状态导入。
  7. 你可以设置文章的作者、分类、标签等映射规则。

对于其他博客系统:

  • Typecho:可以使用 RSS to Post 插件。
  • 其他DedeCMS站点:可以在目标DedeCMS站点上安装一个“RSS采集”插件,然后采集源站的RSS地址。

使用API接口(最专业、最灵活)

如果你的博客系统也支持API(比如WordPress REST API),那么通过API来同步是最佳选择,可以实现近乎实时的同步,并且能更好地控制数据(如自定义字段、设置文章状态等)。

优点:

  • 实时性高:可以做到发布后立即同步。
  • 控制力强:可以精确传递标题、内容、分类、标签、作者、缩略图等所有信息。
  • 数据格式标准:使用JSON,处理起来比XML更方便。

缺点:

  • 技术门槛较高:需要一定的开发能力,或者找到现成的解决方案。
  • 耦合性稍高:如果目标站的API结构变化,可能需要调整代码。

操作思路:

  1. 开发一个API接口:在你的DedeCMS站点的后台,开发一个接收文章数据的API接口,这个接口需要验证请求的合法性(例如使用Token),然后将接收到的数据存入DedeCMS的数据库中,模拟文章发布过程。
  2. 在DedeCMS发布时触发请求:修改DedeCMS的 article_add.php(发布文章)和 article_edit.php(编辑文章)文件,在文章成功保存到数据库后,使用 file_get_contents()cURL 函数,向你的博客站点的API接口发送文章数据(通常是JSON格式)。
  3. 博客端处理请求:在博客站点(如WordPress)上,开发一个简单的接收脚本,该脚本调用WordPress的REST API来创建文章。

示例(简化版思路):

  • DedeCMS端(article_add.php 末尾添加):

    // 假设文章已经成功保存,获取文章ID等信息
    $article_id = $arcID; // DedeCMS文章ID
    $title = $title;
    $body = $body;
    // 构造要发送的数据
    $post_data = array(
        'title' => $title,
        'content' => $body,
        'status' => 'publish', // 或 'draft'
        'categories' => array(1, 2) // 分类ID
    );
    // 转换为JSON
    $json_data = json_encode($post_data);
    // 目标博客API地址和Token
    $api_url = 'https://blog.b.com/api/receive-post.php';
    $api_token = 'your_secret_token';
    // 使用cURL发送POST请求
    $ch = curl_init($api_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'Authorization: Bearer ' . $api_token
    ));
    $response = curl_exec($ch);
    curl_close($ch);
  • 博客端(receive-post.php): 这个脚本需要验证Token,然后使用WordPress的REST API来创建文章,这需要你对WordPress的API有了解。


直接操作数据库(最简单、但风险高)

如果你的博客是DedeCMS的子目录或子域名,并且它们共享同一个数据库,这是最直接的方法。

优点:

  • 速度最快:没有网络请求,直接在数据库里操作。
  • 实现最简单:只需修改一个文件。

缺点:

  • 风险极高:直接操作数据库非常危险,一旦写错SQL语句,可能导致整个网站数据错乱甚至丢失。
  • 耦合性最强:两个站点必须使用完全相同的DedeCMS版本和表前缀。
  • 不适用于独立站点

操作步骤( 强烈建议先备份数据库!

  1. 确定表名:假设你的主站和博客都使用默认的 dede_ 表前缀。

    • 文章主表:dede_archives
    • 文章附加表:dede_arctiny
    • 表:dede_addonarticle (如果你使用的是默认模型)
  2. 修改DedeCMS发布文件: 找到DedeCMS根目录下的 include/helpers/archives.helper.php 文件,这个文件包含了文章发布、编辑等核心逻辑。

  3. InsertOneArticle 函数末尾添加代码: 在 InsertOneArticle 函数的最后,也就是 return $arcid; 这行代码之前,添加以下代码:

    // ====== 开始:同步到博客表 ======
    // 假设博客也是同一个数据库,表名和主站一样
    // 如果你博客的表前缀不同,请修改 $blog_table_prefix
    $blog_table_prefix = 'dede_'; // 如果博客表前缀是 'blog_',就改成 'blog_'
    // 1. 同步主表数据
    $query = "INSERT INTO `{$blog_table_prefix}archives` (id, typeid, typeid2, sortrank, flag, click, ismake, channel, arcrank, senddate, mid, note, userip, title, color, description, keywords, filename, dutyadmin, ishtml, channeltype, maxlevel, rank, mtype, etc, templet, pubdate, adminid, memberid, tname, issend, arctitle, litpic, typedir, ip, usergroup, money, goodpost, badpost, score, goodpostid, badpostid, goodpostip, badpostip) SELECT id, typeid, typeid2, sortrank, flag, click, ismake, channel, arcrank, senddate, mid, note, userip, title, color, description, keywords, filename, dutyadmin, ishtml, channeltype, maxlevel, rank, mtype, etc, templet, pubdate, adminid, memberid, tname, issend, arctitle, litpic, typedir, ip, usergroup, money, goodpost, badpost, score, goodpostid, badpostid, goodpostip, badpostip FROM `{$table_prefix}archives` WHERE id = {$arcid}";
    $dsql->ExecuteNoneQuery($query);
    // 2. 同步附加表数据 (如果你的文章模型是默认的)
    $query_addon = "INSERT INTO `{$blog_table_prefix}addonarticle` (aid, typeid, body, usergroup, dtime, mid, ip, logtitle, score, goodpost, badpost) SELECT aid, typeid, body, usergroup, dtime, mid, ip, logtitle, score, goodpost, badpost FROM `{$table_prefix}addonarticle` WHERE aid = {$arcid}";
    $dsql->ExecuteNoneQuery($query_addon);
    // 3. 同步缩略图到博客附件表(如果需要)
    // ... (这部分逻辑更复杂,需要处理litpic字段)
    // ====== 结束:同步到博客表 ======
  4. 测试:发布一篇文章,然后检查博客站点的对应数据表里是否多了一条记录。再次强调,操作前务必备份数据库!


总结与建议

方案 优点 缺点 适用场景
RSS订阅/抓取 通用、简单、非侵入 有延迟、格式可能丢失 最推荐,适用于任何博客系统,特别是WordPress。
API接口 实时、灵活、强大 技术门槛高 适合有一定开发能力,对同步实时性和数据完整性要求高的用户。
直接操作数据库 最快、最简单 风险极高、耦合性强 仅适用于共享数据库的子目录/子域名站点,且不推荐新手使用。

给您的最终建议:

  • 如果你的博客是WordPress或其他主流CMS,请优先选择方案一(RSS订阅),这是最稳妥、最省心的方法。
  • 如果你的博客是DedeCMS的子站,并且你对数据库操作非常熟悉,可以尝试方案三(直接操作数据库),但一定要先备份!
  • 如果你对技术有信心,并且需要实时同步精细控制,那么方案二(API接口)是最佳选择,它能打造一个最专业、最可靠的内容分发系统。
-- 展开阅读全文 --
头像
织梦栏目添加了为何不显示?
« 上一篇 今天
dede自适应影视模板如何快速搭建?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]