火车采集器/DedeCMS文章模块
首先安装好DedeCms 5.1 本例测试的DedeCMS网站地址:http://127.0.0.1/dede51
这个模块使用内置浏览器登陆,所以不用写“登陆设置”那块,现在直接写文章发布那块,这个分两步,先来获得栏目ID,栏目ID是文章系统里的栏目对应的一个值,可以是数字也可以是其它。这个分类ID也可以不用获得,如果知道栏目ID是多少的话可以直接在发布配置那里填写对应值或是将[分类ID]用自己的标签代替,以后注意在做规则里对应写一下栏目ID的值就可以了。
- 获得栏目ID值
要做的是找到一个包含栏目ID的页面,里边可以提取到栏目ID和栏目名子,一般最好找select的,用option的下拉菜单来做栏目的页面,DeDeCms现在用了很多js来调用栏目,可以找一个,现在以/dede/catalog_tree.php?f=form1&opall=1&v=typeid&bt=selbt1&c=0为例,看具体页面情况。
这里有所有的栏目,代码也较简单,可以看一下,关于栏目的代码如下
<table width='98%' border='0' align='center' cellpadding='0' cellspacing='0'> <tr> <td height='24' background='img/mtbg1.gif' style='border-left: 1px solid #2FA1DB; border-right: 1px solid #2FA1DB;'> <strong>√请在要选择的栏目打勾</strong> <input type='checkbox' name='nsel' id='selid0' class='np' onClick="ReSel(0,'请选择...')">不限栏目 </td> </tr> <tr bgcolor='#EEFAFE'> <td align='center' bgcolor="#eefef0" id='items1'> <dl class='topcc'> <dd class='dlf'><img style='cursor:hand' onClick="LoadSuns('suns1',1,0);" src='img/tree_explode.gif' width='11' height='11'></dd> <dd class='dlr'>test1 <input type='checkbox' name='selid' id='selid1' class='np' onClick="ReSel(1,'test1')"> </dd> </dl> <div id='suns1' class='sunct'> <table class='sunlist'> <tr> <td><img src='img/tree_list.gif'> test12 <input type='checkbox' name='selid' id='selid4' class='np' onClick="ReSel(4,'test12')"></td> </tr> </table> </div> <dl class='topcc'> <dd class='dlf'><img style='cursor:hand' onClick="LoadSuns('suns2',2,0);" src='img/tree_explode.gif' width='11' height='11'></dd> <dd class='dlr'>test2 <input type='checkbox' name='selid' id='selid2' class='np' onClick="ReSel(2,'test2')"> </dd> </dl> <div id='suns2' class='sunct'></div> <dl class='topcc'> <dd class='dlf'><img style='cursor:hand' onClick="LoadSuns('suns3',3,0);" src='img/tree_explode.gif' width='11' height='11'></dd> <dd class='dlr'>test3 <input type='checkbox' name='selid' id='selid3' class='np' onClick="ReSel(3,'test3')"> </dd> </dl> <div id='suns3' class='sunct'></div> </td> </tr> </table>
栏目ID和栏目名称的代码形式为 onClick="ReSel(2,'test2')这个样子,其中,2是栏目值,test2是栏目名称。可以这样获得它,具体的可以先看图2,取开头结尾,程序将然后将中间提取到的内容里找到形如 onClick="ReSel([分类ID],'[分类名称]')"> 的内容,再将里边的值提取出来,就会得到分类ID的名称及具体值。
图2为刷新列表设置,来说明一下每个名词的意思:
刷新列表页面也就是用来获得表面的页面,来源页面一般不用写,只有一些特殊的系统,需要检查来路的需要写。页面区域是选定一个区域,里边的内容里包含有分类信息,这里也可以不用写,默认整个页面。分类列表名称及ID格式是最重要的,注意规则要符合所有列表格式,当然,也可以只用来获得想要的分类或栏目。
使用上述设置就可以获得分类ID及分类名称.具体情况可以看图3效果图.注意,在网站/cms根地址那块填写的地址(设为地址A)和图2里边刷新列表页面的地址(设为地址B)相加(即A+B),是页面的实际地址http://127.0.0.1/dede51/dede/catalog_tree.php?f=form1&opall=1&v=typeid&bt=selbt1&c=0。其它的地方也一样,都是A加上模块里的地址或后辍。
现在来发布一个文章来做“文章发表参数”这块。直接到发布文章页面。
查看网页属性,得到发布页面的地址/dede/catalog_do.php?channelid=1&cid=1&dopost=addArchives
查看这页的源代码,注意打开不要关闭,这在以后的使用中用得着。先发布一个文章,注意写好标题或是内容,建议全部写成英文字母形式,因为有的系统会对发布出去的文字进行不同的编码,而英文一般不会变的。具体的可以参照图4.
有的部分,不想写或要为空,可以像图4里的来源一样,在写文章时不添,再在发布时抓取数据包。各个项目写好后,然后打开Winsock Expert.看图5,选中发布文章的程序的页面,可能使用不同的浏览器选法也不一样,只要选中程序就可以监控浏览器数据的发送情况了。
上边一切做好后,就可以点击确定,注意,点确定后迅速在Winsock Expert 中暂停抓包,看一下取到的数据, 因为有的系统数据发送很快,而Winsock Expert里的数据里就找不到post的数据了。看一下抓取到的数据,具体请看图6.
看一下选中的那一行,有个post字样的一行,就是要的信息,其中,看最下边的内容,是浏览器发送的数据,有的发送的数据和post那一行在一起,有的不在,看一下具体的意思
POST /dede51/dede/action/article_add_action.php
这是发表地址
Referer: http://127.0.0.1/dede51/dede/catalog_do.php?channelid=1&cid=1&dopost=addArchives
这个是来源页面。去掉最前边的网址部分就是来源地址。
将上边的网址分别写入发表地址后缀和来源页面后缀,来看一下下边获得的浏览器发送的数据,下面是获取的数据内容:
这里是获取到的post数据,省略了部分内容。
-----------------------------7d8271202203c0 Content-Disposition: form-data; name="channelid" 1 -----------------------------7d8271202203c0 Content-Disposition: form-data; name="title" caijitt -----------------------------7d8271202203c0 Content-Disposition: form-data; name="redirecturl" -----------------------------7d8271202203c0 Content-Disposition: form-data; name="tag" Caijitag ………………………………中间这部分略去,因为数据很多……………………… -----------------------------7d8271202203c0 Content-Disposition: form-data; name="arcrank" 0 -----------------------------7d8271202203c0 Content-Disposition: form-data; name="ishtml" 1 -----------------------------7d8271202203c0 Content-Disposition: form-data; name="description" -----------------------------7d8271202203c0 Content-Disposition: form-data; name="keywords" -----------------------------7d8271202203c0 Content-Disposition: form-data; name="likeid" -----------------------------7d8271202203c0 Content-Disposition: form-data; name="imageField" 确定 -----------------------------7d8271202203c0— 这些内容是什么意思呢?我们以下边的内容为例: -----------------------------7d8271202203c0 Content-Disposition: form-data; name="ishtml" 1
这是一个表单项,名字为ishtml,值为1,现在可以去源代码里看到
<td width="90">发布选项:</td> <td> <input name="ishtml" type="radio" value="1" checked> 生成HTML <input type="radio" name="ishtml" value="0"> 仅动态浏览</td>
可以知道,这里的1是生成静态,在做最后的post内容时,是这样的格式:
表单项名=值&表单项名=值
这样的,当将ishtml=2时,意思就是动态发布。更多的所代表的意义可以从源码里看到它的意思。
将上边的数据提取合并,并将标题替换成[标签:标题],内容替换成[标签:内容],其它的类似。就会得到
channelid=1&title=[标签:标题]&redirecturl=&tag=[标签:TAG]&source=&writer=&litpic=&picname=&typeid=1 &dede_addonfields=&remote=1&spsize=5&body=[标签:内容]&shorttitle=&arcatt=0&typeid2=0&templet= &pubdate=2008-07-18 03:46:53&money=0&sortup=0&color=&arcrank=0&ishtml=1&description=&keywords= &likeid=&imageField=确定
还要注意的是,pubdate=2008-07-18 03:46:53 这个是发布时间,因为每次手工发布时它是不同的,可以设置一个标签,使它的值为时间,比如pubdate=[标签:时间],也可以直接从发布页的源码里获得,在开始发布时存有发布来源页源码。这时,可以用到登陆随机值这个标签,它其实是从一个页面获得一些参数而已。使pubdate=[登录随机值1],并在随机值获取及UBB那里定义并获得“登录随机值1”,可以先看一下图7
源码里是
<td width="90"> 发布时间:</td> <td width="241"> <input name="pubdate" value="2008-07-18 03:45:53" type="text" id="pubdate" style="width:200px">
可以取两边的<input name="pubdate" value="及"来获得中间的那个值,也就是图中的设置。
对于其它一些参数,也可以指定固定的值,比如writer,这个可以固定成 writer=小明,也可以使用标签,writer=[标签:作者],其它标签的使用也可以根据需求来设定。
所有的标签,都会替换或处理后再发布出去。
在添加WEB发布配置里边测试模块正确性那里测试发布,可以正常发布,并在发布后返回“成功发布文章:”的字样,这样,可以将这几个字做为发布成功标识码,具体可以看图8.当然,也可以故意制造些错误以得到“发布错误标识码”,这样,在发布错误时就可以知道为什么并修改相关设置。下边是基本完成的模块:
最后是说明保护那块,说明是添加一些注意事项,使用说明等,保护的话就是可以添加密码,这对于帮别人写模块有保护作用。最下边系统模块名称那里可以写所适用的系统,版本号也请写上。如图9