自己动手做个yzmcms发布接口

Posted by he; tagged with yzmcms

发布接口的原理

发布接口,其实很简单,接收采集软件提交过来的信息,处理并写到数据库,即可。

所以,通常情况引用数据库类,将post过来的字段,处理一下,写入数据库,就做好了。

处理过程包含哪些呢?

比如将文章信息中的图片,保存到服务器上,文章内容中的关键词,自动加上超链接等。

所有处理过程,就比较复杂。

另一种方法:将系统自带的发布文章的功能,改写一下成为发布接口即可。

很明显,方法2只要略改改就好了,比方法1省事的多。

而yzmcms有2种发布功能:

1、管理员后台可以发布文章

2、用户前台投稿一样可以发布文章

2处任意改哪处,都可以改成采集器的发布接口。下面动手实战将前台投稿功能,改成发布接口:

一:将用户投稿功能改成发布接口的流程:

1、进入投稿页面,如:/member/member_content/init.html?catid=3,填写好内容
0.webp

2、打开浏览器的控制台,然后点提交,接着接着Esc键,不让页面跳转。

捕捉到投稿时,提交的数据如下:
0 (1).webp
这个数据,就是采集器发布接口的字段。这几个参数的意思如下:

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过来对应的参数。

好了,是不是很简单。

- 本文完 -