您现在的位置是:首页 > 折腾心得折腾心得

帝国cms7.5免登陆通过http请求发布文章

高晓波2020-11-02【折腾心得】人已围观

简介最近在研究帝国CMS,确实非常灵活、好用,分分钟建出自己想要的网站。网站建好了,如果要采集,如何操作?

最近在研究帝国CMS,确实非常灵活、好用,分分钟建出自己想要的网站。网站建好了,如果要采集,如何操作?

帝国cms自带了采集系统,然鹅我并没有去研究,作为一名程序员还是喜欢自己写爬虫采集。

自己写爬虫如何将文章发布到帝国cms,我们想到的无非两种方式:1、直接对数据库进行操作;2、采用http请求发布文章。

直接对数据库的话,如果采集机器和网站数据库服务器不是一台机器还需要外网连接数据库,存在一定的安全隐患,另外异地数据库操作网络延迟较高,对数据的处理稍有不慎可能会插入不完整的数据。故本篇文章主要记录第二种方式,通过http请求,调用帝国cms自己的发布函数,测试环境为帝国cms 7.5。

废话不多说,开始吧。

 


一、将免登陆发布接口放到帝国目录e/admin目录下


免登陆发布接口(复制里面的代码,保存为xxx.php文件),主要需要修改两处,第一处$password=xxxxx这里设置自己的密码,第二处if($kv['modid']=='1'),改为自己的模型id,可以查询phome_enewsmod表查看modid
 
<?php

/********密码验证***********/
$password='www.gaoxiaobo.com';	//这个密码是登陆验证用的.您需要在模块里设置和这里一样的密码....注意一定需要修改.
if($password!=$_GET['pw']) exit('验证密码错误');   //安全检测,密码不符则退出

/****以下代码非专业人员不建议修改***************/
define('EmpireCMSAdmin','1');
require("../class/connect.php");
require("../class/db_sql.php");
require("../class/functions.php");
require LoadLang("pub/fun.php");
require("../class/delpath.php");
require("../class/copypath.php");
require("../class/t_functions.php");
require("../data/dbcache/class.php");
require("../data/dbcache/MemberLevel.php");

//获取分类列表
foreach($class_r as $kv)
{
	if($kv['modid']=='1')//这个是分类所在的系统模型id,记得修改
	{
		$cates[]=array('cname'=>$kv['classname'],'cid'=>$kv['classid'],'pid'=>$kv['bclassid']);
	}
}

if(empty($_POST))
{
	//这里刷新列表
	echo "<select name='list'>";
	echo maketree($cates,0,'');
	echo '</select>';
	exit();
}
$link=db_connect();
$empire=new mysqlquery();

//验证用户
$loginin=$_POST['username'];
$lur=$empire->fetch1("select * from {$dbtbpre}enewsuser where `username`='$loginin'");
if(!$lur) exit('不存在的用户名'.$loginin);

$logininid=$lur['userid'];
$loginrnd=$lur['rnd'];
$loginlevel=$lur['groupid'];
$loginadminstyleid=$lur['adminstyleid'];

$incftp=0;
if($public_r['phpmode'])
{
	include("../class/ftp.php");
	$incftp=1;
}
require("../class/hinfofun.php");
$navtheid=(int)$_POST['filepass'];
AddNews($_POST,$logininid,$loginin);
db_close();
$empire=null;

/***生成目录的一个遍历算法***/
function maketree($ar,$id,$pre)
{
	$ids='';
	foreach($ar as $k=>$v){
		$pid=$v['pid'];
		$cname=$v['cname'];
		$cid=$v['cid'];
		if($pid==$id)
		{
			$ids.="<option value='$cid'>{$pre}{$cname}</option>";
			foreach($ar as $kk=>$vv)
			{
				$pp=$vv['pid'];
				if($pp==$cid)
				{ 
					$ids.=maketree($ar,$cid,$pre."&nbsp;&nbsp;");
					break;
				}
			}
		}
	}
	return $ids;
}
?>
 

二、采集内容,通过http请求发布文章


发布地址:xxxx/e/admin/xxx.php?pw=xxxxx
请求方式:post
content-type:application/x-www-form-urlencoded

发布参数如下:
{
    "addnews2":"提交",
    "enews":"AddNews",
    "classid":4, #栏目id
    "bclassid":0, #父栏目id
    "id":0,
    "filepass":1604280104, #时间戳
    "befrom":"",
    "username":"admin", 
    "oldchecked":1,
    "ecmsnfrom":1,
    "ecmscheck": 0,
    "havetmpic": 0,
    "title":"标题",
    "ftitle":"副标题",
    "checked":1,
    "isgood": 0,
    "firsttitle": 0,
    "keyboard":"关键字",
    "newstime":"2020-11-01 09:21:44", #发布时间
    "titlepic": "标题图片地址",
    "smalltext":"简介",
    "writer":"作者",
    "newstext":"文章内容",
    "dokey": 1,
    "istop":0, 
    "newstempid":0,
    "autosize":5000,
    "groupid":0,
    "userfen":0,
    "onclick":0,
    "totaldown":0,
    "titleurl":"",
    "oldfilename":""
}
			



三、使用postman测试

如果返回结果为栏目列表,原因是后台没有收到文章信息,检查content-type是否正确。

如果返回结果为信息提示页面,并且提示信息为“增加信息成功”,则发布文章成功。


 

Tags:帝国cms

很赞哦! ()

文章评论