谢谢大家的鼓励,我现在给大家另外一个我做的程序
谢谢大家的鼓励,我现在给大家另外一个我做的程序 Perl轻松制作个人论坛顶贴宝宝,供perl爱好者学习 Perl轻松制作个人论坛顶贴宝宝 --河南 潘伟 一、前言 随着网络的盛行很多电脑爱好者都喜欢在网络上自己建立一个论坛,在上面放些大家喜欢的东西供网友欣赏,但是他们中大部分论坛访问量都很小,别人去他们的网站发现很冷清很多就走了,我写了一个关于个人网站顶贴宝宝的程序文章,他可以用不同的用户模拟人的常规语言顶贴,营造一个热闹的、良好的论坛氛围。我以BBSXP为例子给大家介绍,如果读者是其它类型的论坛可以根据情况修改代码。 二、开发步骤 1、首先在自己的论坛上注册几个专门用于顶贴的用户,并且把用户名、密码记录起来,按照下面格式保存在文件D:\bin\posttools\dingtie\data\user.txt中 feier,***** 直挂云帆, ***** 惜爱者, ***** …… …… 2、建立D:\bin\posttools\dingtie\data\posttxt.txt文件,在网上搜集些不代表个人观点的中性词编辑到里面,如“顶”这样的帖子没有产生对搂主帖子的任何关点,每一行为一句话。 例: 顶!! 顶顶顶!· 我顶 我就不顶。 你顶我也顶 顶死你 今天,。。。。。顶 …… …… 顶贴用户和中性词越多越好,这样顶贴的用户和帖子内容重复的机会就会比较少,我写了200个中性词,注册了20个顶贴用户,在2个月的使用中感觉基本能够达到预期的效果。 3、在D:\bin\posttools\dingtie\data\目录下为每个顶贴用户建立一个自己名字的目录,用来存放自己的cookie信息。如在D:\bin\posttools\dingtie\data\下建立feier目录和直挂云帆、惜爱者目录。 4、在D:\bin\posttools\dingtie\bin目录建立readcokie.pl文件,编辑内容如下: use HTTP::Cookies; use HTTP::Request::Common qw(POST); use LWP::UserAgent; $ua = LWP::UserAgent->new; open(FILE,'D:\bin\posttools\dingtie\data\user.txt'); @file=<FILE>; for ($i=0;$i<=$#file;$i++){ chomp($file[$i]); ($user,$pass)=split(/,/,$file[$i]); $ua->cookie_jar(HTTP::Cookies->new(file => "D:\\bin\\posttools\\dingtie\\data\\$user\\cookie.txt", autosave => 1)); $req =POST 'http://www.5hxy.com/bbs/login.asp', [UserName => $user, Userpass => $pass, IsSave => '1', Eremite => '1', ]; $res=$ua->request($req); $ua->cookie_jar->save; } 上面代码的功能是读取D:\bin\posttools\dingtie\data\user.txt文件的用户名和密码,然后登陆论坛,并且将登录成功后论坛返回的cookie记录在D:\bin\posttools\dingtie\data\每个用户自己的目录里。由于我选择的是登陆cookie永不失效所以这个程序一般只需要执行一次当cookie获取成功后就不用再执行。 $req =POST 'http://www.5hxy.com/bbs/login.asp', [UserName => $user, Userpass => $pass, IsSave => '1', Eremite => '1', ]; 这部分是根据论坛登陆页面<from>标签里的必要参数来填写的,你如果不是BBSXP的论坛可以根据<from>里的数据修改上面的代码。 5、在D:\bin\posttools\dingtie\bin目录建立dingtie.pl文件,编辑内容如下: use HTTP::Cookies; use LWP; $ua = LWP::UserAgent->new; while (1) { # $ua->agent("$0/0.1 " . $ua->agent); $ua->agent("Mozilla/8.0"); # pretend we are very capable browser #获取版块数据 $url='http://www.5hxy.com/bbs/ShowForum.asp?ForumID=4'; $url2='http://www.5hxy.com/bbs/ShowForum.asp?ForumID=12'; $url3='http://www.5hxy.com/bbs/ShowForum.asp?ForumID=3'; $res = $ua->get($url); $htms=$res->content; $res = $ua->get($url2); $htms.=$res->content; $res = $ua->get($url3); $htms.=$res->content; print "获取版块数据 \n"; #获取后挑出有用的数据 if ($res->is_success) { @html=(); @html=split(/\n/,$htms); @link=(); for(@html){ if (m{<a href="ShowPost\.asp\?ThreadID=(\d+)">}){ push(@link,$1); } #$1 and #}while m{<a href="ShowPost\.asp\?ThreadID=(\d+)">}; } } print "挑出有用的数据 $#link 个 \n"; #历史记录 open (FILE,'D:\bin\posttools\dingtie\data\history.log'); @history=(); @history=<FILE>; close FILE; #用户记录 open(FILE,'D:\bin\posttools\dingtie\data\user.txt'); @usertxt=(); @usertxt=<FILE>; close FILE; #提交记录 open(FILE,'D:\bin\posttools\dingtie\data\posttxt.txt'); @posttxt=(); @posttxt=<FILE>; close FILE; print "用户记录 \n"; #检查帖子是否在历史,不在就回帖 $chazhao=0;#是否找到0没找到 for ($x=0;$x<=$#link;$x++){ for ($a=0;$a<=$#history;$a++){ if ($history[$a]==$link[$x]){ $a=$#history+1; $chazhao=1; } } print "帖子 $link[$x] 找到标志为 $chazhao\n"; if ($chazhao==0){ #如果历史没有就回帖 $tiezi=int(rand($#usertxt));#随即数决定发几个帖子 print "决定发 $tiezi 个帖子\n"; for ($y=0;$y<=$tiezi;$y++){ $userc=int(rand($#usertxt));#选择哪个用户 print "决定用户$userc发帖子\n"; $neirong=int(rand($#posttxt));#选择哪个帖子 print "决定发哪个帖子 $neirong \n"; chomp($usertxt[$userc]); ($user,$pass)=split(/,/,$usertxt[$userc]); $ua->cookie_jar(HTTP::Cookies->new(file => "D:\\bin\\posttools\\dingtie\\data\\$user\\cookie.txt", autosave => 1)); #以用户身份看一下帖子 $url="http://www.5hxy.com/bbs/ShowPost.asp?ThreadID= $link[$x]"; $res = $ua->get($url); $url='http://www.5hxy.com/bbs/ReTopic.asp'; #开始发帖子 $response = $ua->post( $url, [ThreadID => $link[$x], ***ject => 'Re:回复', content => $posttxt[$neirong], Di***leYBBCode => '0', Edit***mit =>' 回复 '], referer=>'http://www.5hxy.com/bbs/', ); print "帖子回复完毕,内容 $posttxt[$neirong] \n"; sleep 5; } print "帖子 $link[$x] 记录历史完毕 \n"; open (FILE,'>>D:\bin\posttools\dingtie\data\history.log'); #回过帖子的记录起来 print FILE "$link[$x]\n"; close FILE; } $chazhao=0; } print "休眠600秒 \n"; sleep 600; } 6、执行readcokie.pl后,执行dingtie.pl程序观察执行效果,如下: 获取版块数据 挑出有用的数据 179 个 用户记录 帖子 23151 找到标志为 1 帖子 11248 找到标志为 1 帖子 20728 找到标志为 1 帖子 819 找到标志为 1 帖子 22687 找到标志为 1 帖子 549 找到标志为 1 帖子 8946 找到标志为 1 帖子 126 找到标志为 1 帖子 446 找到标志为 1 帖子 49 找到标志为 0 决定发 6 个帖子 决定用户18 发帖子 决定发哪个帖子 180 帖子回复完毕,内容 !!!!!! 决定用户2 发帖子 决定发哪个帖子 3 帖子回复完毕,内容 我就不顶。 决定用户10发帖子 决定发哪个帖子 197 帖子回复完毕,内容 YA~ 我喜欢这贴子.哈哈 。。。。。。 。。。。。。 帖子 1082 找到标志为 1 帖子 1083 找到标志为 1 帖子 1084 找到标志为 1 帖子 1087 找到标志为 1 帖子 1089 找到标志为 1 帖子 1092 找到标志为 1 帖子 1090 找到标志为 1 休眠600秒 三、结束语 这个程序我之所以采用perl语言作为编写顶贴宝宝的原因主要还是因为perl强大的表达式和文字、网页、跨平台处理能力,简单的几行就已经完成了一个复杂的功能。本文不讲怎么搭建perl环境,如果读者不会搭建perl环境,或在修改程序的时候有什么问题可以到我的论坛http://www.5hxy.com/bbs大家一起交流,另外也可以到论坛下载整个程序的源代码。 作者:潘伟 地址:河南省紫金山路55号阳光铭座A座2203 邮编:450000 邮箱:zi_luo_bu@sina.com |