火车头采集发布dede接口如何配置使用?

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

火车头作为“客户端”负责采集和整理数据,Dedecms 作为“服务器端”提供一个接口来接收数据并写入数据库。

火车头采集发布dede接口
(图片来源网络,侵删)

整个过程主要分为两个部分:

  1. 在 Dedecms 网站上创建一个接收数据的接口(API)。
  2. 在火车头采集器上配置发布模块,调用这个接口。

第一部分:在 Dedecms 网站上创建接口

我们需要创建一个 PHP 文件,这个文件将充当火车头和 Dedecms 之间的桥梁,它会接收火车头发来的数据,并调用 Dedecms 的核心函数来保存文章。

步骤 1:创建接收文件

在你的 Dedecms 网站根目录下,创建一个新的 PHP 文件,post_api.php

步骤 2:编写接口代码

将以下代码复制到 post_api.php 文件中。请务必仔细阅读注释,并根据你的网站实际情况进行修改。

火车头采集发布dede接口
(图片来源网络,侵删)
<?php
// +----------------------------------------------------------------------
// | 火车头发布接口 for Dedecms V5.x
// +----------------------------------------------------------------------
// 引入 Dedecms 的核心文件,用于调用系统函数
// 注意:如果您的网站目录结构不同,请修改路径
require_once (dirname(__FILE__) . "/include/common.inc.php");
require_once (DEDEINC . "/arc.partview.class.php");
// 设置响应头为 JSON,方便火车头判断结果
header('Content-Type:application/json; charset=utf-8');
// --- 安全验证(非常重要!) ---
// 1. 检查请求方式是否为 POST
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
    echo json_encode(['code' => -1, 'message' => '请求方式错误,请使用 POST']);
    exit();
}
// 2. 检查密钥是否正确(防止恶意调用)
// 请在火车头和这里设置一个复杂的、一致的密钥
$api_key = 'YOUR_SECRET_API_KEY'; // <--- 修改这里,设置一个你自己的密钥
if (empty($_POST['key']) || $_POST['key'] !== $api_key) {
    echo json_encode(['code' => -2, 'message' => 'API密钥错误']);
    exit();
}
// --- 安全验证结束 ---
// --- 获取并处理火车头发来的数据 ---
// 火车头发布时,会以 POST 方式发送数据,字段名可以自定义
// 这里假设火车头发送的字段是:title, body, typeid, author, source, pic
$title = isset($_POST['title']) ? trim($_POST['title']) : '';
$body = isset($_POST['body']) ? trim($_POST['body']) : '';
$typeid = isset($_POST['typeid']) ? intval($_POST['typeid']) : 0; // 栏目ID必须是整数
$author = isset($_POST['author']) ? trim($_POST['author']) : 'admin'; // 默认管理员
$source = isset($_POST['source']) ? trim($_POST['source']) : '转载';
$pic = isset($_POST['pic']) ? trim($_POST['pic']) : ''; // 文章缩略图
// 数据校验
if (empty($title) || empty($body) || empty($typeid)) {
    echo json_encode(['code' => -3, 'message' => '标题、内容和栏目ID不能为空']);
    exit();
}
// --- 调用Dedecms核心函数发布文章 ---
// 使用 arc.partview.class.php 中的方法来发布,这是比较标准的方式
$pv = new PartView();
// 准备文章数据数组
$addfields = array();
$addfields['title'] = $title;
$addfields['body'] = $body; // 文章内容
$addfields['description'] = cn_substr(html2text($body), 200); // 自动从内容中提取摘要
$addfields['typeid'] = $typeid;
$addfields['arctypeid'] = $typeid; // 栏目ID
$addfields['pubdate'] = time(); // 发布时间
$addfields['senddate'] = time(); // 提交时间
$addfields['mid'] = 1; // 管理员ID,默认为1
$addfields['dutyadmin'] = $author; // 责任编辑
$addfields['source'] = $source;
$addfields['ishtml'] = 1; // 生成静态页面
$addfields['ismake'] = 1; // 是否立即生成
$addfields['arcrank'] = 0; // 默认为审核通过状态,-1为待审核
// 如果有缩略图,则设置
if (!empty($pic)) {
    $addfields['litpic'] = $pic;
}
// 调用保存内容的方法
// $typeid, $senddate, $arcfields, $tags, $title, $ismake, $arcrank
$rs = $pv->SaveArticle($typeid, time(), $addfields, '', $title, 1, 0);
// --- 处理发布结果 ---
if ($rs == 'OK') {
    // 发布成功
    echo json_encode(['code' => 1, 'message' => '发布成功']);
} else {
    // 发布失败,$rs 会返回具体的错误信息
    echo json_encode(['code' => -4, 'message' => '发布失败: ' . $rs]);
}
?>

步骤 3:修改和注意事项

  1. require_once 路径:代码中的 require_once (dirname(__FILE__) . "/include/common.inc.php"); 路径是针对标准 Dedecms 安装的,如果你的网站安装在其他目录(如子目录 cms),请相应修改为 require_once (dirname(__FILE__) . "/cms/include/common.inc.php");
  2. $api_key 密钥这是最重要的安全设置! 请务必将 YOUR_SECRET_API_KEY 修改成一个复杂且唯一的字符串,并记住它,因为后面在火车头配置时需要用到。
  3. 栏目 ID (typeid):你需要提前在 Dedecms 后台创建好文章栏目,并记下你要发布到的目标栏目的 ID,火车头发布时必须提供正确的 typeid
  4. 字段对应:确保火车头采集的字段名(如 title, body)与 PHP 文件中 $_POST 接收的字段名一致,你可以根据需要自定义。

第二部分:在火车头采集器上配置发布模块

现在我们回到火车头软件,配置发布任务,让它把采集到的数据发送到你刚创建的 post_api.php

步骤 1:新建发布模块

在火车头采集器中,打开你的任务,进入“发布模块”选项卡。

  1. 点击“新建发布模块”。
  2. 模块名称:起一个你容易识别的名字,如 "Dedecms_API"。
  3. 发布类型:选择 自定义发布
  4. 请求方式:选择 POST
  5. 请求地址:填入你网站接口的完整 URL,http://www.yourdomain.com/post_api.php
  6. 请求头:一般可以不填,保持默认。
  7. 提交方式:选择 表单提交

步骤 2:配置请求参数

这是最关键的一步,它决定了火车头如何把数据打包发送给 Dedecms。

  1. 在参数列表中,点击“添加”。
  2. 名称:填写你在 post_api.php 中接收的字段名。
    • key
    • title
    • body
    • typeid
    • author
    • source
    • pic
  3. :填写对应的火车条目字段。
    • 对于 key,值就是你在 post_api.php 中设置的密钥,YOUR_SECRET_API_KEY注意:这里不是填变量,而是直接填字符串。
    • 对于 title,值就是火车头采集到的标题字段,{title}
    • 对于 body,值就是火车头采集到的内容字段,{body}
    • 对于 typeid,值是你 Dedecms 中目标栏目的 ID,5注意:这里是数字,不是变量。
    • 对于 author,值可以是 {author} 字段,或者一个固定值。
    • 对于 pic,值是火车头采集到的图片地址字段,{pic}

参数配置表示例:

火车头采集发布dede接口
(图片来源网络,侵删)
名称
key YOUR_SECRET_API_KEY (你设置的密钥)
body {body}
typeid 5 (你的栏目ID)
author {author}
source {source}
pic {pic}

步骤 3:配置返回结果

这步是为了让火车头知道发布是否成功。

  1. 成功返回:选择 JSON
  2. 成功判断:在后面的输入框中,填写判断成功的条件,根据我们的 PHP 代码,当 code 字段的值为 1 时表示成功。
    • 填写:code==1
  3. 成功信息:填写成功信息,发布成功,这个信息会在火车头日志中显示。
  4. 失败信息:填写失败信息,发布失败

步骤 4:保存并测试

  1. 点击“保存”按钮,保存发布模块的配置。
  2. 回到“发布测试”选项卡,选择刚才配置好的发布模块。
  3. 选择一条已经采集好的数据,点击“发布测试”。
  4. 查看返回结果,如果显示“发布成功”,并且你的 Dedecms 网站对应栏目下出现了新文章,那么恭喜你,接口对接成功!
  5. 如果失败了,根据火车头返回的错误信息,以及检查你的 Dedecms 网站服务器是否开启了错误日志,来定位问题,常见问题有:API密钥错误、栏目ID不存在、文件路径错误、服务器权限问题等。

总结与注意事项

  • 安全性API 密钥是生命线! 一定不要泄露,并且定期更换。
  • 权限:确保 post_api.php 文件所在的目录以及 Dedecms 的数据目录有写入权限。
  • 内容过滤:火车头采集到的内容可能包含恶意代码或不安全标签,在 $body 赋值前,可以加入一些过滤逻辑,例如使用 htmlspecialchars 或 Dedecms 自带的过滤函数,来防止 XSS 攻击。
  • 性能:如果发布量很大,频繁调用接口可能会对服务器造成压力,可以考虑在服务器端增加缓存或队列机制。
  • Dedecms 版本:以上代码基于 Dedecms V5.x 系列编写,如果你使用的是更新的版本(如 DedeBIZ),核心类的路径和方法可能略有不同,需要做相应调整。
  • 图片处理:接口中的 $pic 字段是直接使用远程图片地址,Dedecms 设置为本地图片,你需要确保远程图片能够被正确下载并设置为本站图集,这通常需要更复杂的处理逻辑,例如使用 Dedecms 的 DownloadUpFile 函数。

通过以上步骤,你就可以成功地将火车头采集器与 Dedecms 网站对接,实现内容的自动化发布了。

-- 展开阅读全文 --
头像
Linux C网络编程如何实现高效通信?
« 上一篇 02-07
Linux C串口通信,如何实现数据收发?
下一篇 » 02-08

相关文章

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

目录[+]