最近开发社区 需要采集一些数据,使得模板输出有图文效果。就写了个简单的采集脚本,爬取目标站的内容,(用php 下载图片 处理起来比较麻烦)。

有了数据就要插入到dz的数据库 ,随便命名一个 test.php 放在discuz 的web根目录下。

操作一下花了点功夫,中间有不少头疼的时候。特记录。

两个注意点,

一 ,Discuz的帖子 存储在帖子表 pre_forum_post ,message字段,这里的图片 和换行 之类都是 bbcode, 插入之前需要先转换

二,Discuz 本身处理发帖的代码位于sourceclassmodelmodel_forum_thread.php,要使用里面的 方法 先要在test.php引入discuz的核心类

require_once'./source/class/class_core.php';

C::app()->init(); // 一定要初始化一下,否则model_forum_thread.php 里的方法 无法使用

Discuz 作为一个老牌社区有近300个表,实现帖子数据插入比较复杂。

刚开始,百度了一下,找到一篇文章记录,感觉比较靠谱。

引用一下:

discuz发表主题涉及的几个表:(这里列出了主要的几个相关的表)

1、主题表pre_forum_thread:这个表一个主要数据就是 tid 主题ID

2、post 分表协调表pre_forum_post_tableid:这里需要获取一个自增的 pid

3、帖子表 pre_forum_post:记录主题pid、fid、tid、title、content等主要信息

4、版块表pre_forum_forum:这里主要更新版块的主题、帖子数量

5、帖子主题审核数据表pre_forum_thread_moderate:这个可以根据自己状况决定,并不是必须的

6、用户统计表pre_common_member_count:主要是更新用户的主题数量

感谢不知名的作者菌,刚搞的时候可以参考,毕竟300 个表里找几个具体的也费功夫呢。

另有 http://discuzt.cr180.com/discuzcode-db.html cr180 discuz 二开大牛提供的 数据库字典 对数据表 有详细索引。

直接上代码段 ,这个在我的本地环境是可以成功插入帖子数据的。

require_once'./source/class/class_core.php';

C::app()->init();

$param=array(

'fid'=>2,//分类id

'uid'=>1, // 发布者的 id

'subject' =>'文章标题333',

'author' =>'大哥哥',

'message'=>'内容位置,实现插入',

'publishdate' =>TIMESTAMP,

'views'=>168,

'tstatus' =>32,

'tags'=>array('good','cool'),

'useip'=> getglobal('clientip'),

'port' =>getglobal('remoteport')

);

//print_r($newImgSrc);

functiondzThread($param){

$newthread = array(

'fid' => $param['fid'],//文章分类板块

'author' => $param['author'],

'authorid'=>$param['uid'],

'subject' => $param['subject'],

'dateline' =>$param['publishdate'],

'lastpost' =>$param['publishdate'],

'lastposter' => $param['author'],

'attachment'=> 0,

'views' =>$param['views'],

'status' =>$param['tstatus'],

'closed' => $param['closed'] ? 1 : 0

);

$tid= C::t('forum_thread')->insert($newthread,true);

C::t('forum_newthread')->insert(array(

'tid' =>$tid,

'fid' => $param['fid'],

'dateline' =>$param['publishdate'],

));

//处理 tags

$param['tagstr'] =addTag($param['tags'], $tid, 'tid');

$pid =insertpost(array(

'fid' => $param['fid'],

'tid' => $tid,

'first'=> '1',

'author' => $param['author'],

'authorid' =>$param['uid'],

'subject' => $param['subject'],

'dateline' =>$param['publishdate'],

'message' => $param['message'],

'useip' =>$param['clientip'],

'port' => $param['remoteport'],

'usesig' =>1,

'attachment' => '0',

'tags' => $param['tagstr'],

'replycredit'=> 0,

'status' => 0

));

}

functioninsertpost($data) {

if(isset($data['tid'])) {

$thread =C::t('forum_thread')->fetch($data['tid']);

$tableid =$thread['posttableid'];

} else {

$tableid = $data['tid'] = 0;

}

echo$data['tid'];

$pid = C::t('forum_post_tableid')->insert(array('pid' =>null), true);

echo '116';

$data = array_merge($data, array('pid' =>$pid));

C::t('forum_post')->insert($tableid, $data);

if($pid % 1024== 0){

C::t('forum_post_tableid')->delete_by_lesspid($pid);

}

savecache('max_post_id',$pid);

return $pid;

}

// discuz 的tag 处理比较麻烦

functionaddTag($tagarray, $itemid, $idtype = 'tid'){

$tagcount =0;

$return='';

foreach($tagarray as $tagname) {

$tagname =trim($tagname);

if(preg_match('/^([x7f-xff_-]|w|s){3,20}$/', $tagname)){

$status = $idtype != 'uid' ? 0 : 3;

$result =C::t('common_tag')->get_bytagname($tagname, $idtype);

if($result['tagid']){

if($result['status'] == $status) {

$tagid = $result['tagid'];

}

}else {

$tagid =C::t('common_tag')->insert($tagname,$status);

}

if($tagid){

if($itemid){

C::t('common_tagitem')->replace($tagid,$itemid,$idtype);

}

$tagcount++;

$return.= $tagid.','.$tagname."t";

}

if($tagcount > 4){

unset($tagarray);

break;

}

}

}

return$return;

}

呵呵哒,结合采集代码 给$param数组 传数据 就可以了。

discuz导入mysql,discuz二次开发:分析和实现向dz数据库插入自己的帖子相关推荐

  1. CAD二次开发:用C#在AutoCAD中插入栅格图像

    CAD二次开发:用C#在AutoCAD中插入栅格图像 using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationService ...

  2. NX二次开发 截图、向excel表格中插入图片 UF_DISP_create_framed_image

    简介: NX二次开发 截图.向excel表格中插入图片 UF_DISP_create_framed_image 截图: UF_DISP_create_framed_image 插入图片 int id ...

  3. Revit二次开发之外部应用IExternalApplications和数据库级别的外部应用【比目鱼原创】

    public interface IExternalApplication { Autodesk.Revit.UI.Result OnShutdown(UIControlledApplication ...

  4. Proe Creo 二次开发之模型装配--在指定位置插入模型

    //!<激活插入的上一个子件的插入模式 status = ProFeatureInsertModeActivate(&newasmcomp); 将一个子件装配到到指定的零件或组件后面 而 ...

  5. 关于 Discuz! 的二次开发

    作者: Fenng | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://www.dbanotes.net/web/discuz.html 可能是因为 Di ...

  6. Python 二次开发 SAP2000 定义

    目 录 Blog Links 一.前言 二.定义材料 2.1 创建新材料 2.2 设置密度与重度 2.3 设置弹性模量.泊松比与线膨胀系数 2.4 设置钢材力学行为 2.5 设置阻尼参数 三.截面属性 ...

  7. Python 二次开发 SAP2000 绘制

    目 录 Blog Links 一.前言 二.创建点 2.1 笛卡尔坐标系下创建点 2.2 柱坐标系下创建点 2.3 球坐标系下创建点 三.创建线 3.1 创建直线框架 3.1.1 由节点坐标创建直线框 ...

  8. Python实现Excel数据导入MySQL

    前言 近年来,数据分析正在改变我们的工作方式,数据分析的相关工作也越来越受到人们的青睐.很多编程语言都可以做数据分析,比如Python.B.Matlab等,Python凭借着自身无可比拟的优势,被广泛 ...

  9. Python 语言 SAP2000 二次开发 实例

    目 录 Blog Links Remarks Example Blog Links DalNur | 博客总目录 Python语言 SAP2000 二次开发 -- 概述 Python语言 SAP200 ...

最新文章

  1. oracle erp 财务入门,Oracle ERP EBS 顾问财务模块基本业务操作专题
  2. IDC:以太网交换机市场增长2%
  3. 其他软件烘培的光影贴图在unity中如何使用
  4. python 遍历目录或文件
  5. webflux切面拦截权限,webflux整合aop,webflux获取request
  6. u-boot移植第三弹——移植2013.10u-boot到RealARM210 cortex-A8开发板(支持moviNAND_Fusing_Tool_v2.0)
  7. android 字体 动画,android 对绘制的文本添加动画
  8. 众人帮蚂蚁帮任务平台修复版源码
  9. NetBeans 时事通讯(刊号 # 51 - Apr 07, 2009)
  10. RazorPage介绍(一)
  11. 使用 PyQT5 来做一个简易版库存管理系统(二)
  12. 你想要的短视频音效都在这里!最火爆最热门音效!
  13. Java实现人脸识别登录、注册等功能
  14. HTTP协议和web服务技术---Apche配置
  15. 如果有一天不写代码了,还能干点啥?
  16. android 感应器
  17. 素数筛线性筛详细详解(个人总结思路超长版)
  18. javaweb JAVA JSP专利管理系统(专利申请管理系统) 专利系统
  19. vue 快速入门、常用指令(1)
  20. 混合灰狼和布谷鸟搜索优化算法(Matlab完整代码实现)

热门文章

  1. 数据结构,计算机网络,数据库,计算机组成原理,操作系统有哪些好的网课值得推荐?
  2. Python 乱码问题解决办法
  3. element-plus输入框显示图标
  4. 软件测试及专业,常用软件及专业软件测试
  5. 如何设置企业微信中的微盘中的分享链接的有效期限
  6. 债券摊销怎么用计算机算,债券溢价摊销额怎么算?
  7. 3D模型体素化(Voxelization)过程实现与分析(二)
  8. 虚拟机VMware显示“内部错误”怎么办?
  9. 【无标题】无法登录 MySQL 服务器
  10. Prototype属性说明