自己动手做个yzmcms发布接口
Posted by he; tagged with yzmcms
发布接口的原理
发布接口,其实很简单,接收采集软件提交过来的信息,处理并写到数据库,即可。
所以,通常情况引用数据库类,将post过来的字段,处理一下,写入数据库,就做好了。
处理过程包含哪些呢?
比如将文章信息中的图片,保存到服务器上,文章内容中的关键词,自动加上超链接等。
所有处理过程,就比较复杂。
另一种方法:将系统自带的发布文章的功能,改写一下成为发布接口即可。
很明显,方法2只要略改改就好了,比方法1省事的多。
而yzmcms有2种发布功能:
1、管理员后台可以发布文章
2、用户前台投稿一样可以发布文章
2处任意改哪处,都可以改成采集器的发布接口。下面动手实战将前台投稿功能,改成发布接口:
一:将用户投稿功能改成发布接口的流程:
1、进入投稿页面,如:/member/member_content/init.html?catid=3,填写好内容
2、打开浏览器的控制台,然后点提交,接着接着Esc键,不让页面跳转。
捕捉到投稿时,提交的数据如下:
这个数据,就是采集器发布接口的字段。这几个参数的意思如下:
catid: 3 //栏目ID
title: 我是标题 //文章标题
copyfrom: 我是来源 //文章来源
thumb: 缩略图 //文章缩略图
description: 我是摘要 //文章简介
dosubmit: 提交 //表示是提交文章,不用管
content:
文章正文
//文章正文
同时,浏览器的控制台可以看到接收投稿的网址是 /member/member_content/publish.html
接着根据接收网址,定位到接收网址的文件路径:/application/member/controller/member_content.class.php
二:根据投稿文件,复制建立副本作为发布接口文件
找到投稿接口后,复制一份复本,并命名为 caiji.class.php
同时将13行的class member_content extends common 改成 class caiji
接下来,将采集接口中的判断是否登陆的语句删掉。
即将下面语句都删掉:
yzm_base::load_controller('common', 'member', 0); yzm_base::load_sys_class('page','',0);
同时,将construct初始化语句也删掉,那么就不会判断是否登陆。模板提交发布信息时,提示用户组没权限投搞。
就是说没登陆的游客,没有权限投稿。
那么我们接着给判断会员组的函授_check_group_auth,手动加上会员组是5,即金牌会员,这样即可享受高级会员的投稿权限。
$groupid=5;
到这儿,再测试发布一切正常,一个发布接口就顺利做好了。
接口的地址是:/member/caiji/publish.html
采集软件只要往这个接口中提交信息,就能以投稿方式发布文章,并自动通过审核。
有一个问题,别人只要猜到这个地址就能往你的网站后台发信息,所以接下来,手动给接口加个密码,只有密码正确,才能允许提交。
完整的接口部分代码如下:
public function publish(){ $pass='建站网'; if($_POST['pswd']<>$pass){ echo '采集密钥错'; exit; } $userid=0; $username='采集投稿'; $nickname='网络采集'; $groupinfo = $this->_check_group_auth($groupid); //会员中心可发布的字段 $fields = array('title','copyfrom','catid','thumb','description','content'); if(isset($_POST['dosubmit'])) { $catid = intval($_POST['catid']); //判断栏目是否禁止投稿 $data = D('category')->field('member_publish')->where(array('catid'=>$catid))->find(); if(!$data['member_publish']) showmsg(L('illegal_operation'), 'stop'); //支持不同栏目自动实例化不同的model $modelid = get_category($catid, 'modelid'); yzm_base::load_sys_class('form','',0); $field_check = $this->_get_model_str($modelid, true); foreach($field_check as $k => $v){ if($v['isrequired']){ if(empty($_POST[$k])) showmsg($v['errortips']); } } $fields = array_merge($fields, array_keys($field_check)); $notfilter_field = $this->_get_notfilter_field($modelid); foreach($_POST as $_k=>$_v) { if(!in_array($_k, $fields)){ unset($_POST[$_k]); continue; } if(in_array($_k, $notfilter_field)) { $_POST[$_k] = remove_xss(strip_tags($_v, '')); }else{ $_POST[$_k] = !is_array($_POST[$_k]) ? new_html_special_chars(trim_script($_v)) : $this->_content_dispose($_v); } } //会员权限-投稿免审核 $is_adopt = strpos($groupinfo['authority'], '4') === false ? 0 : 1; $_POST['seo_title'] = $_POST['title'].'_'.get_config('site_name'); $_POST['system'] = '0'; $_POST['status'] = $is_adopt; $_POST['listorder'] = '10';//为内容置顶做准备 $_POST['description'] = empty($_POST['description']) ? str_cut(strip_tags($_POST['content']),200) : $_POST['description']; $_POST['inputtime'] = SYS_TIME; $_POST['updatetime'] = SYS_TIME; $_POST['catid'] = $catid; $_POST['userid'] = $userid; $_POST['username'] = $username; $_POST['nickname'] = $nickname; $content_tabname = D(get_model($modelid)); $id = $content_tabname->insert($_POST); //发布到用户内容列表中 $_POST['checkid'] = $modelid.'_'.$id; if(!$is_adopt){ showmsg('发布成功,等待管理员审核!', U('not_pass')); }else{ $this->_adopt($content_tabname, $catid, $id); showmsg('发布成功,内容已通过审核!', U('pass')); } } }
去掉76行的注释。
代码中,加入了几个参数,即将通过此接口发过来的文章,发布人都叫投稿,发布昵称叫网络采集,你可以自行改掉,或者通过采集器post过来对应的参数。
好了,是不是很简单。