Bot作成講座2 - Perlでさくっとスパムブログを作ってみる


前記事
ウェブ自動巡回ボット-bot-の作り方 for Perl 初級編 - 後ろを見ろ、後ろを!

 初級編はActivePerlと基本的なLWP:Simpleの使い方だけなので、そんなん知っとるわヴォケ-って人は飛ばしてもらって結構。引き続き一般的なWindowXP環境を想定して書きます。

スパムブログとは?


 アフィリエイト目的で自分のサイトにアクセスを誘導するための、内容が全く無いブログのこと。ニュースのヘッドラインを箇条書きしただけのうっとおしいサイトが検索にひっかかる事があると思うが、それは「引用スパム」と呼ばれる種類のブログで、日本のスパムブログの大半を占めているようだ。


 日本のブログのなんと約40%がスパムブログであることが判明 - GIGAZINE

http:/gigazine.net/index.php?/news/comments/20080326_spam_blog/

○自動生成系
・引用スパム
他ブログやニュース記事、検索されやすいワードの検索結果スニペットなどの引用を自動的に取得して、記事を生成している。
アフィリエイトスパム
商品写真とそのアフィリエイトリンクを大量に自動で掲載しているブログ。内容がほとんどない。
ワードサラダ
文章をフレーズ単位で機械的に組み合わせて生成しているブログ。一見、人間が書いているように見えて、良く見ると文章の意味が通じていない。
・自動マルチポスト
同一記事を複数のブログに機械的に大量に投稿する。


ワードサラダ」とRSS取得による自動生成ページ&トラバなスパムたち:arbagenews.com
 http://www.gamenews.ne.jp/archives/2007/07/rss.html

具体例ページのソースコードを確認すると、楽天市場のクッキーを強制的に食わせている。楽天市場のクッキーは一度ブラウザに記録されると使用されるまで30日間は生きる仕様である。そこでこのページを何も知らずに見た読者が他のページに移り、楽天市場で買いものをすると、このサイトの運営者にマージンが入るという仕組みだ。つまり、これらのページは「強制クッキー食わせページ」のための「まきえさ」なのである。


 たぶんどっかの情報商材屋が撒いてるソフトを使って自動生成してるんだろう。こういう奴ら見てるとバカだなーと思う。情報商材のシステムがまるで分かっていない。情報商材で儲かるのはねずみ講と同じで頂点に居るやつだけなのに。


チュートリアルRSSから取得した情報を元に引用スパムを自動生成する


 俗に「引用スパム」と言われているスパムブログの生成ロジックはいたってシンプル。


 1.ニュースサイトからRSSを取得する
 2.RSSを解析してタイトル、URL、概要を取り出す
 3.ブログにログインする
 4.RSSから得た情報をブログに書き込む


 これを自動化すればいいわけです。当チュートリアルでは、1日1回Yahoo!ニュースのRSSを取得して、その記事をはてなダイアリーに自動書き込みするプログラムを作成します。

XML:FeedPPでRSSを取得

 RSSの取得と解析にはXML:FeedPPモジュールを使います。XML:FeedPPモジュールの使い方については下記エントリ参照。
ウェブ上で閲覧できるRSSリーダをDIYしてみた。 - 後ろを見ろ、後ろを!

use strict;

use Encode;
use XML:FeedPP;
use WWW:Mechanize;


#RSSのURLを指定
my $url = ("http:/dailynews.yahoo.co.jp/fc/rss.xml");

#newする
my $feed = XML:FeedPP->new($url);

#記事タイトルと記事リンクの抽出
my $content; my $f = 0; my $title;
foreach my $item ($feed->get_item()){
    if($f == 0){
        $title = $item->title();
        $f = 1;
    }
    $content .= $item->title()."\n";
    $content .= "<a href =\"".$item->link()."\">".$item->link()."</a>\n\n";
}
$content = "*".$title."\n\n".$content;

#エンコード。しなくてもいいけど。
Encode:from_to($content,"utf-8","shift-jis");


 これで$contentに1日分の記事が格納されます。

WWW:Mechanize


 次に、自動的にブログにログインし、エントリを書き込む必要がありますが、今回はWWW:MechanizeというCPANモジュールを使います。「メカちゃん」と呼んであげてください。これはLWP:Simpleと同様の機能を持ちますが、メカちゃんのすごいところは「ページの遷移とフォームの記入ができる」ことです。つまり、ログインページを取得→アカウント名とパスワードを送信→会員制のページを取得、といった作業が自動化できます。

WWW:Mechanizeのインストール

1.ActivePerl付属のPerl Package Managerを開く。
2.検索窓でWWW:Mechanizeを検索する。
3.WWW:Mechanize(記事作成時点でversion1.2)を選択し左クリック、「Install WWW:Mechanize」を選択して実行。
4.箱のアイコンが灰色→肌色になればインストール完了。

WWW:Mechanizeではてなダイアリーに自動ログイン


 前述のソース(RSSの取得)の後に次のコードを追記します。

#newする
my $mech = WWW:Mechanize->new();

#ログインページを取得
$mech->get('http://www.hatena.ne.jp/login');

#アカウント名とパスワードを書き込んで送信
$mech->submit_form(
    form_number => 1,n    fields => {
        name => 'test@example.com',n        password => 'hogehoge',n    });


 SSLは使用していないので、それなりの危険性があるということを了承した上で使用してください。(Crypt-SSLeayモジュールとOpenSSLを使用すればSSLでのアクセスも可能ですが、ここでは説明しません。)


WWW:Mechanizeではてなダイアリーに自動書き込み


 さらに次のコードを追記します。

#ダイアリーの編集ページを取得
$mech->get('http://d.hatena.ne.jp/iewzgi_lieh/edit');

#記事を書き込み、「登録する」ボタンをクリックして送信
$mech->submit_form(
    form_number => 1,n    fields => {
        body => $content,n    },n    button => 'edit'
)


 編集画面のフォームには、「確認する」「登録する」の2つのsubmitボタンがあるので、「登録する」ボタンのname属性(edit)をbuttonで指定します。


 これで自動記事生成システムの完成です。サブアカウントのダイアリーでテストしたものを貼っておきます。
 http://d.hatena.ne.jp/iewzgi_lieh/


CRONwで定期的にスクリプトを起動


 最後に、完成したスクリプトを毎日定時に実行する仕掛けを作ります。Windowsのタスク管理、atコマンドでも構いませんが、ここではCRONwというソフトを使います。これはActivePerlで動かせるWindows版のCRONで、sourceforgeから入手できます。


 CRONw - CRON for Windows download | SourceForge.net


 1.リンク先からCRONw 2.0をダウンロードして解凍し、CRONwフォルダをCドライブ直下に放り込む
 2.Perl Package Managerを使って、moduleフォルダ内のモジュール(ppd形式)を全てインストールする
 3.コマンドを打ってCRONwフォルダをカレントディレクトリにし、perl installer.plと打ってインストーラを起動する
  →"(モジュール名) is not installed."というメッセージが一つでも出るようであれば、該当するモジュールをインストールし直す
 4.perl cronHelper.pl --install と打ち、CRONをサービスに登録する
 5.net start CRON と打ち、サービスを開始する

 これでCRONwフォルダにcrontab.txtなどが生成され、CRONをつかう準備が整ったことになります。CRONwのインストール方法についてはMOONGIFTの記事で詳しく紹介されています。


 http://www.moongift.jp/2005/12/906/


 CRONの時間設定のためにcrontab.txtを編集します。crontab.txtはスペース区切りで分、時、日、月、曜日、実行コマンドの順に操作を記入します。

0 6 * * * c:perl\bin\perl.exe c:spam.pl

 これで毎日朝6時にspam.plを実行するように設定されます。もちろん、パソコンの電源を切ったり、cronサービスが停止している場合には実行されません。

で?


 まあ、スパムブログ垂れ流して本当にQOLが上がると思ってるバカがいたら、作ってみるといいよ。



参考書籍

Spidering hacks―ウェブ情報ラクラク取得テクニック101選

Spidering hacks―ウェブ情報ラクラク取得テクニック101選