孤独的猫

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

谢谢大家的鼓励,我现在给大家另外一个我做的程序

谢谢大家的鼓励,我现在给大家另外一个我做的程序
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
posted on 2011-12-28 20:14  孤独的猫  阅读(248)  评论(0编辑  收藏  举报