帝国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." "); 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) |
Recent
Popular
- [工作] 无法建立计算机与VPN服务器之间的
- [Windows] Windows Server 2016
- [运维开发] 桃乐豆 - 中文WOW插件加速源
- [艺术] 至高强者十三阶
- [Windows] Windows Server 2019
- [WindowsPE] Sergei Strelec WinPE
- [学习] NovelAI模型大全分享
- [Windows] Windows 7
- [Windows] Windows 10
- [游戏] Realm Grinder - 放置游戏个人攻略
- [Windows] Windows Server 2008
- [工作] 此平台不支持虚拟化的Intel VT-x/E
- [Windows] Windows Server 2012
- [Windows] Windows 8.1