迅睿PHP-CMS火车头内容采集范例

文档创建者:admin
浏览次数:41
最后更新:2026-04-12
Help Center
Help Center: 帮助中心
采集工具:火车采集器(可以百度搜索一下这个工具的下载)
采集模块:新闻 News

第一步、编写采集入库脚本接口
新建:/api/caiji.php (应用于URL地址请求,大小写随意)
如果根目录没有api文件夹,就创建到 /public/api/caiji.php (应用于URL地址请求,大小写随意)
  1. <?php

  2. /**
  3. * 数据采集
  4. */

  5. define('IS_API', basename(__FILE__, '.php')); // 项目标识
  6. define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME)); // 该文件的名称
  7. require('../index.php'); // 引入主文件
复制代码

新建:./dayrui/My/Api/Caiji.php(首字母必须大写,最终php文件命名与上面的名称保持相同)

  1. <?php


  2. $this->_module_init('news'); // news 是模块目录

  3. if ($_GET['action'] == 'category') {
  4.     $this->module['category'] = \Phpcmf\Service::L('category', 'module')->get_category($this->module['share'] ? 'share' : $this->module['dirname']);
  5.     if (!$this->module['category']) {
  6.         echo '模块【'.$this->module['dirname'].'】没有创建栏目';
  7.     }
  8.     foreach ($this->module['category'] as $t) {
  9.         if ($t['child'] == 0 && $t['tid'] == 1) {
  10.             echo '<h1>'.$t['name'].'<=>'.$t['id'].'</h1>'.PHP_EOL;
  11.         }
  12.     }

  13. } else {
  14.     // 入库数据

  15.     $data = $_REQUEST;

  16.     // 发布者id 1
  17.     $data['uid'] = 1;

  18.     // 发布者笔名 admin
  19.     $data['author'] = 'admin';

  20.     // 主表字段
  21.     $fields[1] = $this->get_cache('table-'.SITE_ID, $this->content_model->dbprefix(SITE_ID.'_'.MOD_DIR));
  22.     $cache = $this->get_cache('table-'.SITE_ID, $this->content_model->dbprefix(SITE_ID.'_'.MOD_DIR.'_category_data'));
  23.     $cache && $fields[1] = array_merge($fields[1], $cache);

  24.     // 附表字段
  25.     $fields[0] = $this->get_cache('table-'.SITE_ID, $this->content_model->dbprefix(SITE_ID.'_'.MOD_DIR.'_data_0'));

  26.     // 去重复
  27.     $fields[0] = array_unique($fields[0]);
  28.     $fields[1] = array_unique($fields[1]);
  29.    
  30.     // 格式化入库字段
  31.    
  32.     // 一般是格式化非文本类的字段(例如多文件上传、复选框、联动字段等等)
  33.     // 这里需要按采集资料的格式入库格式化字段,
  34.    
  35.    
  36.     // 开始归类存储

  37.     $save = [];

  38.     // 主表附表归类
  39.     foreach ($fields as $ismain => $field) {
  40.         foreach ($field as $name) {
  41.             isset($data[$name]) && $save[$ismain][$name] = $data[$name];
  42.         }
  43.     }
  44.     if (!$data['catid']) {
  45.        exit('栏目为空');
  46.     }

  47.     $save[1]['uid'] = $save[0]['uid'] = $data['uid'];
  48.     $save[1]['catid'] = $save[0]['catid'] = $data['catid'];

  49.     $save[1]['url'] = ''; // 地址留空,系统会自动生成
  50.     $save[1]['status'] = 9; //9表示正常发布,1表示审核里面
  51.     $save[1]['hits'] = 0; // 阅读数
  52.     $save[1]['displayorder'] = 0; // 排序权重值,默认填写0
  53.     $save[1]['link_id'] = 0; // 填写0不管他
  54.     $save[1]['inputtime'] = SYS_TIME; // 发布时间设置成为当前时间
  55.     $save[1]['updatetime'] = SYS_TIME; // 更新时间也设置成为当前时间,关于时间采集如果是这种格式2022-12-12xx,那么需要使用strtotime函数转换成时间戳入库
  56.     $save[1]['inputip'] = '127.0.0.1'; // 发布者ip地址
  57.    
  58.     //$save[1]['keywords'] = dr_get_keywords( $save[1]['title']); // 按插件提取关键词
  59.    
  60.     //$save[1]['description'] = dr_get_description( $save[0]['content'], 100); // 在内容里面提取100个子作为描述

  61.     // 验证标题重复
  62.     if ($this->content_model->table(SITE_ID.'_'.MOD_DIR)->where('title', $save[1]['title'])->counts()) {
  63.         echo '重复';exit;
  64.     }

  65.     $rt = $this->content_model->save_content(0, $save);

  66.     if ($rt['code']) {
  67.         /*
  68.         // 用于发布成功后生成静态文件代码
  69.         //dr_html_auth($_SERVER['SERVER_ADDR']);
  70.         //dr_catcher_data(SITE_URL.'index.php?s='.MOD_DIR.'&c=html&m=showfile&id='.$rt['id']);
  71.         $atcode = 'chtml_'.SITE_ID.'_'.MOD_DIR.'_'.$rt['code'];
  72.         \Phpcmf\Service::L('cache')->set_auth_data($atcode, $rt['code'], SITE_ID);
  73.         dr_catcher_data(SITE_URL.'index.php?s='.MOD_DIR.'&c=html&m=showfile&id='.$rt['code'].'&atcode='.$atcode);
  74. $save[1]['id'] = $save[0]['id'] = $rt['code'];
  75. \Phpcmf\Service::L('router')->show_url(\Phpcmf\Service::C()->module, $save[1]);
  76.         */
  77.         exit('成功');
  78.     } else {
  79.         exit('失败');
  80.     }

  81. }

  82. exit;
复制代码

脚本文件中可以定义发布者等一些预定义字段默认值,如果你不会php的话可以保持默认
注意:本脚本的程序代码只对内容等字段入库有效,由于采集目标网站的数据规范性无法做到统一;
如果开发者对其他字段(例如多文件上传、复选框、联动字段等等)需要开发者自己根据采集的实际情况来编写入库程序来组装入库的POST数据,需要PHP开发技术基础,下面来举一些基础例子。
1、多文件上传字段
  1. $data['字段名称'] = dr_array2string([
  2.     ['file'=>'文件路径', 'title'=>'标题'],   
  3. ]);
复制代码


2、复选框字段
  1. $data['字段名称'] = dr_array2string([
  2.     '值1', '值2'  
  3. ]);
复制代码
测试规则地址:
  1. http://你的网站/api/caiji.php?action=category
复制代码

如果能显示出来栏目信息,说明ok了
如果显示api file is error,表示你./dayrui/My/Api/Caiji.php没有创建正确。

第二步、火车采集器编写web发布规则

1477052845209383.png

第三步、新建一个在线发布模块

1477052879616135.png

第四步、填写获取栏目列表的参数

c69e1d17e7abcd4.png
  1. /api/caiji.php?action=category

  2. <h1>[分类名称]<=>[分类ID]</h1>
复制代码

按照上面的格式写就ok了

第五步、内容发布规则参数
9cc69e1d17e7abc.png
  1. 发布地址:/api/caiji.php?action=post
  2. 表单参数:这里是你采集的字段
  3. c错误码:失败 回车符 重复
  4. 成功标志码:成功
复制代码

第六步、保存模块

1477053054773854.png

第七步、然后返回web发布配置里面

1477053085272321.png
按照图中的参数配置,点“获取栏目”,如果可以获取到就表示成功了一大半了

第八步、测试入库发布

1477053169916647.png

第九步、后台查看采集内容

1477053197381856.png












您需要登录后才可以回帖 登录 | 立即注册

本版积分规则