帝国cms 脚本批量发文章

http post直接发文章

脚本分两部分:web服务器和线下控制端
线上部分抄别人的:
在/e/admin中新建jiekou.php


<?php

/********密码验证***********/
$password='aaabbb';    //这个密码是登陆验证用的.您需要在模块里设置和这里一样的密码....注意一定需要修改.
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']=='2')//这个是分类所在的系统模型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;
}
?>



线下部分我用的python:

实现功能就是post文章信息到上面的接口文件地址.
文章信息是一个字典,一共有40多项,大部分是str,少部分数值类型例如栏目id,文章id,你发int或者str都可以.
只要post几项重要的信息就能成功发布,其他信息系统会自动生成默认值.
发布结果会有返回,可以通过截取response.text中的关键字来判断结果
 
import json
import random
import time
import openpyxl
import requests
from bs4 import BeautifulSoup
from config import *

data_form = {
    "enews": "AddNews",  # 动作1
    "classid": '',  # 栏目id,字典value
    "username": '',  # 发帖人,真实存在的管理员账号
    "title": '',  # 标题
    "keyboard": '',  # 关键字
    "checked": 1,  # 审核
    "filesize": '',  # 大小
    "softsay": '',  # 简介
    "newstext": '',  # 正文
    "downname[0]": '',  # 下载1
    "downpath[0]": '',  # 下载1地址
    "titlepic": '',
    "addnews": "提 交",  # 动作2
}
print(f'发布中--{s_name}')
try:
    # jk_url 在 congfig 中 格式:  jk_url = "https://www.sandoge.com/e/admin/jiekou.php?pw=aaabbb"
    response = requests.post(jk_url, data=data_form)
    time.sleep(random.randint(0, 1))
except Exception as e:
    print("出现错误: \n", e)
    print("出现错误,3秒后重试一次")
    time.sleep(3)
    try:
        response = requests.post(jk_url, data=data_form)
        time.sleep(random.randint(0, 1))
    except Exception as e:
        print("出现错误: \n", e)
        print("终止")
try:
    if response.text.find('增加信息成功') != -1:
        print(f'发布成功--{s_name}')
except Exception as e:
    print("出现错误: \n", e)
    while True:
        print(response.text)
        time.sleep(10)