逐浪CMS远程发布通用data格式改装-基于20220303后版本

返回逐浪CMS技术讨论区
2回复贴,共1页,点击数:820

逐浪CMS原来有两种通道可以进行远程发布
第一种,火车头采集器插件API,详见:https://www.z01.com/Search/SearchList?keyword=%E7%81%AB%E8%BD%A6%E5%A4%B4
第二种,逐浪开放接口:content_add
在这里插入图片描述
在以前无论是火车头还是开放接口都无法写入tabkey,也就是关键词。
这样在进行内容聚合时就会出现tabkey为空,需要人工参于,在2022年3月3日内部测试版中,加入了tabkey的写入,这样就可以在远程写入。对应接口为”第二种,逐浪开放接口:content_add”
但是。。
但是。
这个接口的data分为两段,
如:

data={
content={"ModelID":2,"title":"标题内容","inputer":"admin","nodeId":100,"Status":"99",orderid:1,hits:222},
addon={"content":"文章内容"}
}

或直接写为URL字串符为


url+&action=article_add&content={"ModelID":2,"title":"标题内容","inputer":"admin","nodeId":100,"Status":"99",orderid:1,hits:222}&addon={"content":"文章内容"}

这样的字段如果用自己代码当中没什么影响,但是放到很多远程发布当中,比如火车头当中就不太和谐。所以我就将这个接口改了一下。
这样大家就可以用于很多常见的发布器了
前题写完了,下面进入正文
接口:“content_add”路径:/pages/api/wxapp.cshtml 搜索“content_add”
这里的case “content_add” 就是用来写接口的
首先我们先将这wxapp.cshtml复制,防止我们升级的时候将我们改后的文件覆盖了。
我改为 mywxapp.cshtml
然后我们在mywxapp.cshtml中修改

case "content_add"://添加内容 调用方法:API/WXAPP?action=content_add&content=-|"ModelID":2,"title":"标题内容","inputer":"admin","nodeId":100,"Status":0,orderid:1,hits:222|-&addon=-|"content":"副表内容在这里"|-
                                       //[status=99审核无效,必须web后台审核],或定时任务审核
                        {
                            //正文与附属内容
                            string content = Req("content");
                            string addon = Req("addon");
                            if (string.IsNullOrEmpty(content)) { throw new Exception("未指定内容"); }
                            if (string.IsNullOrEmpty(addon)) { throw new Exception("未指定附表内容"); }

                            M_CommonData conMod = JsonConvert.DeserializeObject<M_CommonData>(content);
                            string tbname = DataConvert.CStr(DBCenter.ExecuteScala("ZL_Model", "TableName", "ModelID=" + conMod.ModelID));
                            //conMod.Status = (int)ZLEnum.ConStatus.Recycle;  //启用此行则内容归入回收站
                            conMod.CreateTime = DateTime.Now;
                            conMod.UpDateTime = DateTime.Now;
                            conMod.TableName = tbname;
                            DataTable dt = JsonConvert.DeserializeObject<DataTable>("[" + addon + "]");
                            DataRow dr = dt.Rows[0];
                            //--------------------------
                            conMod.ItemID = DBCenter.Insert(tbname, BLLCommon.GetFields(dr), BLLCommon.GetParas(dr), BLLCommon.GetParameters(dr));
                            conMod.GeneralID = DBCenter.Insert(conMod);
                            retMod.retcode = M_APIResult.Success;
                            retMod.result = conMod.GeneralID.ToString();
                        }
                        break;
string content = Req("content");
string addon = Req("addon");

这两代码是说,从url中得到content和addon的值
我们就需要对Req(“content”)和Req(“addon”)进行修改

string content = "{'ModelID':2,'title':'标题内容','inputer':'admin','nodeId':13,'Status':99,'orderid':9999999,'hits':222}";
string addon = "{'content':'这里是内容'}";

注意,最外面为双引号,要是外面为单引号,里面为双引号会提示“字符字面量中的字符太多”
然后,我们得到url中的变量并将值写入

string content ="{'ModelID':"+Req("modelid")+",'title':'"+Req("title")+"','tagkey':'"+Req("tagkey")+"','orderid':9999999,'inputer':'admin','nodeId':"+Req("nodeid")+",'Status':99,'hits':222}";
string addon ="{'content':'"+Req("content")+"'}";

orderid为什么为N个9?
因为逐浪CMS后面的内容管理优先以orderid进行排序,然后以内容ID。如果设置orderid=0 , 2这样的小值,新发布的内容就会在尾而出现,所以我设置这个orderid为N个9,我们达到不的内容值,让逐浪CMS自动设置这个值,这样发布的内容在第一页出现,这样便于编辑整理
我将新case改名为article_add,代码如下:

case "article_add"://添加内容 调用方法:API/WXAPP?action=content_add&content=-|"ModelID":2,"title":"标题内容","inputer":"admin","nodeId":100,"Status":0,orderid:1,hits:222|-&addon=-|"content":"副表内容在这里"|-
                                       //[status=99审核无效,必须web后台审核],或定时任务审核
                        {
                            //正文与附属内容

string content ="{'ModelID':"+Req("modelid")+",'title':'"+Req("title")+"','tagkey':'"+Req("tagkey")+"','orderid':9999999'inputer':'admin','nodeId':"+Req("nodeid")+",'Status':99,'hits':222}";
string addon ="{'content':'"+Req("content")+"'}";
                            if (string.IsNullOrEmpty(content)) { throw new Exception("未指定内容"); }
                            if (string.IsNullOrEmpty(addon)) { throw new Exception("未指定附表内容"); }

                            M_CommonData conMod = JsonConvert.DeserializeObject<M_CommonData>(content);
                            string tbname = DataConvert.CStr(DBCenter.ExecuteScala("ZL_Model", "TableName", "ModelID=" + conMod.ModelID));
            //conMod.Status = (int)ZLEnum.ConStatus.Recycle;  //启用此行则内容归入回收站
            conMod.CreateTime = DateTime.Now;
            conMod.UpDateTime = DateTime.Now;
            conMod.TableName = tbname;
            DataTable dt = JsonConvert.DeserializeObject<DataTable>("[" + addon + "]");
            DataRow dr = dt.Rows[0];
            //--------------------------
            conMod.ItemID = DBCenter.Insert(tbname, BLLCommon.GetFields(dr), BLLCommon.GetParas(dr), BLLCommon.GetParameters(dr));
            conMod.GeneralID = DBCenter.Insert(conMod);
            retMod.retcode = M_APIResult.Success;
            retMod.result = conMod.GeneralID.ToString();
            }
            break;

这样我们的接口就变为

URL+&action=article_add&modelid=2&title=aaaaa222&nodeid=13&tagkey=a,b&content=fdasfdasfdasfadsfdsa

data{
modelid=2,
title='aaaaa222',
nodeid=13,
tagkey='a,b',
content='fdasfdasfdasfadsfdsa'
}

这样就变为了大家常见的格式了。
当然逐浪CMS为了安全还对采集设置了密钥

apiId=cd3c2bfffdas0a7f2d551cda6dd
apiKey=4b434af09234sd7d7dbe552e7f4a4e24e731d9

通过浏览器访问

URL+/API/mywxapp?apiId=cd3c2bfffdas0a7f2d551cda6dd&apiKey=4b434af09234sd7d7dbe552e7f4a4e24e731d9+&action=article_add&modelid=2&title=aaaaa222&nodeid=13&tagkey=a,b&content=fdasfdasfdasfadsfdsa

得到返回值为{"retcode":1,"retmsg":"","result":"6151"}
说明发布成功
进后台看效果
在这里插入图片描述
在这里插入图片描述
tagkey写入成功,同样的方法,可以对字段进行扩充

1楼 2022/03/19 14:55

原文格式不对,已修正。

2楼 2022/03/19 14:57 收起回复

前题不明,后题思路精巧

3楼 2022/03/19 15:02 收起回复
您未登录,没有发贴权限[点此登录]