WWW::Mechanizeが便利

WWW::Mechanize - Handy web browsing in a Perl object

WWW::Mechanizeがいろいろできて便利。
リンク切れチェックスクリプトを書いてみた。

#!/usr/bin/perl
# 引数のページにあるリンク切れをチェック

use strict;
use warnings;
use WWW::Mechanize;

my $url = shift;
my $mech = WWW::Mechanize->new();

$mech->get($url);
push (my @links, $mech->find_all_links());

foreach my $link (@links) {
  my $reg = $link->url;
  $mech->follow_link( url_regex => qr/^$reg$/ );
  my $status = $mech->status();
  if ($status =~ /[1-3][0-9][0-9]/) {
    print "$reg   => link is alive. (Status: $status)\n";
  }
  else {
    print "$reg   => link is dead. (Status: $status)\n";
  }
  $mech->back();
}

SSLサイトにアクセスするのに、Crypt::SSLeayが必要。


mixiの最新のあしあとを取得するスクリプトも書いてみた。

#!/usr/bin/perl

use strict;
use warnings;
use WWW::Mechanize;

my $ssl_url = "https://mixi.jp/";
my $url = "http://mixi.jp/";
my $mech = WWW::Mechanize->new();

$mech->get("$ssl_url");

$mech->submit_form(
  fields => {
    email    => '<your email>',
    password => '<your password>',
  }
);
$mech->get("${url}home.pl");

$mech->get("${url}show_log.pl");

push (my @links, $mech->find_all_links(url_regex => qr/show_friend.pl/));
foreach my $link (@links) {
  print $link->text . " ($url" . $link->url . ")\n";
}


あと、mech-dumpコマンドでいろいろな情報を取得できる。
フォーム情報

$ mech-dump http://mixi.jp/
POST http://mixi.jp/login.pl [login_form]
  next_url=/home.pl              (hidden readonly)
  email=                         (text)
  password=                      (password)
  sticky=<UNDEF>                 (checkbox) [*<UNDEF>/off|on/次回から自動的にログイン ※パスワードを忘れた方はこちら]
  <NONAME>=<UNDEF>               (image)

リンク情報

$ mech-dump --links --absolute http://mixi.jp/

イメージ情報

$ mech-dump --images --absolute http://mixi.jp/


WWW::Mechanize

mech-dump