Perlの最近のブログ記事

ブログ@ナチュラムとはアウトドア用品・釣り具のインターネット通販サイト「ナチュラム」による無料のブログホスティングサービスです。

アウトドア・釣りという共通の趣味を持ったユーザー間のヨコの繋がりにより、ブログサービスというよりは一種のコミュニティと化しているのが特徴です。

さて、このブログ@ナチュラムですが、先日発生したナチュラムでの不正アクセスによる大規模な個人情報流出と事後の粗末な対応が一部ユーザの怒りをかっており、引越し需要がちょっぴり増えている雰囲気です(私も住所・氏名・電話番号・メールアドレス・生パスワード(ハッシュとかでは無い)・クレジットカード全て流出されてしまったクチだったりして...)。

そういうわけでブログ@ナチュラムのバックアップについて書いてみます。


(1)テキストのバックアップ

ブログ@ナチュラムにはMT(MovableType)形式での読み出し・書き出し機能が備わっています。管理画面から書き出し機能を利用することによりテキストのバックアップが可能です。
blog-at-naturum-admin.jpg

(2)画像のバックアップ - wget編

書き出し機能では画像がバックアップできませんが、wgetで以下の様に引数を指定して画像のみダウンロードすることが可能です。

$ wget -r -p -A .jpg,.gif,.png -H -Dimg01.naturum.ne.jp,your-sub-domain.naturum.ne.jp http://your-sub-domain.naturum.ne.jp/

カテゴリ、タグ、月ごとのアーカイブのようなページも読み込んだりして少々冗長ですが、一応目的は果たせています。リクエストを集中させるのが気になる場合は-wオプションでwaitを入れるのがいいかと思います。

(2')画像のバックアップ - perl + wget編

実はwgetだけでは無理だと思いこみ、(2)の前にperl+wgetで以下のようにやってました。

natulogimg.pl - 画像のURLを列挙
#!/usr/bin/perl

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

my $blogurl = shift @ARGV
 or die "Usage: perl $0 http://subdomain.naturum.ne.jp/\n";

my $mech = WWW::Mechanize->new;
$mech->get("$blogurl/sitemap.html");

foreach ($mech->find_all_links(url_regex => qr|^e[0-9]+\.html$|)) {
    $mech->get($_->url_abs);
    foreach (
        $mech->find_all_images(
            url_regex => qr|img01\.naturum\.ne\.jp|
        )
    ) {
        print $_->url_abs, "\n";
    }
}
wgetの標準入力に画像URLを与えてダウンロードさせる
(-ncによりダウンロード済みのURLは処理させない)
$ perl natulogimg.pl http://your-sub-domain.naturum.ne.jp/ | wget -nc -i


ということで、やり方はどうあれこの手のホスティングサービスを利用している場合は不測の事態?に備えて定期的にバックアップを取っておきたいものですね。


<関連リンク>

CPANモジュールのようなパッケージ化されたPerlモジュールの作り方を自分なりにまとめてみようと考えたけど、わかりやすい記事があったのでやめました。

Part1 正しいPerl/CGIの書き方:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20071011/284280/
[訂正] Webプログラミング実力アップ Part1 正しいPerl/CGIの書き方:ITpro
http://labs.cybozu.co.jp/blog/takesako/2007/10/pmsetup.html
特集:Happy Testing Perl|gihyo.jp ... 技術評論社
http://gihyo.jp/dev/feature/01/test-perl

Yahooオークションを利用していますが、GW、盆、正月や旅行、出張の際は無用なトラブルを避ける為出品を全て取り消すようにしています。

出品点数が多いと手動で1件ずつ取り消していくのが面倒なのでこんな感じで

#!/usr/bin/perl

use strict;
use warnings;

use WWW::Mechanize;

my $u = 'your ID';
my $p = 'your PW';

my $start = 'http://openuser.auctions.yahoo.co.jp/jp/show/mystatus?select=selling';

my $mech = WWW::Mechanize->new(autocheck => 1);

$mech->get($start);

$mech->submit_form(
  with_fields => {
    login => $u,
    passwd => $p
  }
);

$mech->get($start);

foreach ($mech->find_all_links(url_regex => qr(/amgr\?aID=\w+$) )) {
  $mech->get($_);
  $mech->follow_link(url_regex => qr(/closeauction\?aID=\w+$) );
  $mech->submit_form(button => "confirm");
}
注意点
  • 1ページ分しか処理しません
  • 入札の有無に関わらず早期終了します(と思います)。

これくらいは当たり前の機能として備わっていて欲しいのですが、黎明期からずっと変わらないユーザビリティです...>>ヤフオク

株式投資ネタです。一般信用取引での売建可能銘柄一覧を作りました。

一般信用取引 売建可能銘柄リスト


自身では会社四季報CD-ROM版でグループ登録して使ってます。


証券会社(4社)のWebサイトの情報を元にperlで作成していますが、1社だけpdfが使われておりperlではどう扱うのかわからなかったのでxpdfに付いているpdftotextも併用しました。

更新は週1回、自宅サーバーから行うようにしています。


<関連リンク>

WWW::Mechanizeモジュールの存在がなければperlを覚えようと思わなかったかもしれません。ネット上での定型作業を自動化するのに大変便利なモジュールです。

#!/usr/bin/perl

use strict;
use warnings;

use WWW::Mechanize;

my $file = "/path/to/output.xml";

my $u = 'ユーザ名';
my $p   = 'パスワード';
my $start = 'http://ロリポブログのアドレス/admin/';
my @follow = (
        { url_regex => qr/mode=setting$/        },
        { url_regex => qr/mode=setting_export$/ },
        { url_regex => qr/mode=xml$/            }
);

my $mech = WWW::Mechanize->new(autocheck => 1);

$mech->get($start);

$mech->submit_form(
    with_fields => {
        account_name => $u,
        password     => $p
    }
);

foreach (@follow) {
    $mech->follow_link(%$_);
}

open FILE, ">$file" or die "Cannot open $file";
print FILE $mech->content();
close FILE;

我が家では初代玄箱の中でcronのジョブとして定期的に実行されています。

周回遅れもいいところなのですが、Blog HacksSpidering Hacksにほだされ今さらながらPerlを始めました。

併せてロリポップでレンタルスペースを借りたり、自宅サーバを運用してみたりしながらLinux, Apache, MySQL他諸々の知識を無い頭に詰め込みまくっています。

関連する話題をこのブログに書き綴って行こうと思います。