设为首页 收藏本站
查看: 1042|回复: 0

[经验分享] Perl轻松制作个人论坛顶贴宝宝

[复制链接]

尚未签到

发表于 2015-12-27 16:36:20 | 显示全部楼层 |阅读模式
谢谢大家的鼓励,我现在给大家另外一个我做的程序

谢谢大家的鼓励,我现在给大家另外一个我做的程序
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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-157097-1-1.html 上篇帖子: Perl调用其他程序方法 下篇帖子: 在Win32上安装ActiveState Perl
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表