帝国cms 脚本批量修改文章

网上没搜到能用的,原创一下

办法总共有三种
1.连接数据库直接select xxx
或者用phpmyadmin  navcat 这种数据库工具直接去数据库里面改
只要小心一些,只改用户可以自定义的部分,基本没什么大问题
部分字段的值虽然是字符串,但是里有 \r\n 这种转移符号,必须原封不动加回去
比较推荐这种办法,熟悉一下很快就能掌握


2.使用帝国cms自带函数
这个办法要首先获取文章所有字段的值,修改需要修改的部分,把不需要修改的部分原封不动传回去.

3.自定义函数,因为帝国cms给了一个"简改"函数范例,只传输需要修改的部分到数据库,我还没有详细学习,之后再说.

只说第二种,调用帝国cms自带EditNews函数的方法,修改数据库就是通用的select xxx就行

代码还是分两部分 
服务器部分两个功能
1.返回原文章所有的值
2.获取原文章新值
控制端两个功能
1.查询原文章所有的值
2.发送原文章新的值
我php不太行,好在代码能跑

服务器部分:
/e/admin/jiekou_1.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($_POST[pygetinfo] == '1')   // 查询原始值
{
   
    $link=db_connect();
    $empire=new mysqlquery();
    $sql=$empire->query("SELECT * FROM zzc_ecms_download WHERE title = '{$_POST[title]}' and classid = {$_POST[classid]}");
    while($r = $empire->fetch($sql)) {
        foreach ($r as $key => $value) {
            echo "Key: $key, Value: $value\n";
        }
        echo "----------\n"; // 使用分隔符区分不同记录
    }
   
   
    db_close(); //关闭MYSQL链接
    $empire=null; //注消操作类变量
    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);
$navtheid=(int)$_POST['id'];
EditNews($_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

查询文章所有值
知道栏目id和文章标记即可
没有考虑多个文章相同标题的情况,如果这样的话php代码还要改成能够返回多篇文章
import json
import time

import openpyxl
import requests
from bs4 import BeautifulSoup
from config import *


data_form = {
    "pygetinfo": '1',
    "classid": 3,  # 栏目id
    "title": '文章title',  # 文章id
}
jk_url = dd_jk

#  dd_jk_2 = "https://own.sandoge.com/e/admin/jiekou_1.php?pw=aaabbb"
response = requests.post(dd_jk_2, data=data_form)

# 获取文章所有参数,自己处理一下数据转化为字典即可
print(response.text)




更新现有文章,和发布文章差不多
注意此处要确认文章栏目id和文章id才能正确修改,上面都收集到了
所有非默认值都要在此处加入字典
希望更新为默认值的参数不需要在此处列出,例如 日期  
 
data_form = {
    # "enews": "EditNews",  # 动作1
    "classid": 3,  # 栏目id
    "username": "pcnoob",  # 发帖人
    "id": 33735,  # 文章id
    "title": '1234567',  # 标题
    "newstempid": "0",  # 模板
    "filename": 33735,
    # "newstime": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),  #
    "keyboard": "",  # 关键字
    "checked": 1,  # 审核
    # # "softsay": soft_say,  # 简介
    # # "newstext": soft_info + soft_say,  # 正文
    "downname[0]": "Download-11",  # 下载1
    "downpath[0]": f'<a href="123">Download-1</a>',  # 下载1地址
    # # "titlepic": logo,
    # "editNews": "提 交",  # 动作2
}

# 发布文章
# # dd_jk_2 = "https://own.sandoge.com/e/admin/jiekou_1.php?pw=aaabbb"


print(f'发布中--{s_name}')
try:
    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(dd_jk_2, 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)