월드 오브 워크래프트(이하 와우) 애드온 모음집을 편집하다보니 애드온의 새 업데이트를 빠르게 확인 할 필요가 있습니다. 외국 애드온들이 주로 모여있는 Curse Addons는 업데이트 프로그램을 제공하기 때문에 어렵지 않게 확인이 가능합니다.

하지만 국내 애드온들이 많이 모여있는 와우 인벤은 별도의 업데이트 프로그램을 제공하지 않기 때문에 매번 생각날 때마다 직접 들려서 업데이트를 확인해야 했습니다.

이 점이 너무 불편해서 애드온 업데이트를 살펴보다가 변화가 있으면 알려주는 간단한 스크립트를 만들었습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#! /usr/bin/perl

use strict;
use warnings;

use WWW::Mechanize;
use Digest::MD5 qw(md5);
use POSIX;
use SDBM_File;
use Net::SMTP;

sub wowaddon_md5 {
    my $addonid = shift or return undef;

    my $mech = WWW::Mechanize->new;

    my $url = "http://wow.inven.co.kr/dataninfo/addonpds/filelist.iframe.php?mode=view&ridx=$addonid&count=1";

    $mech->get($url);

    my @link = $mech->links;

    my $md5 = Digest::MD5->new;

    foreach ( @link ) {
        $md5->add($_->text);
    }

    return $md5->hexdigest;
}

sub send_mail {
    my $host = shift or return;
    my $from = shift or return;
    my $to = shift or return;
    my $subject = shift or return;
    my $body = shift or return;

    my $smtp = Net::SMTP->new($host);

    $smtp->mail($from);
    $smtp->to($to);

    $smtp->data();
    $smtp->datasend("Subject: $subject\n");
    $smtp->datasend("\n");
    $smtp->datasend("$body\n");
    $smtp->dataend();

    $smtp->quit;
}

my @wowaddon = qw( 5094 5090 1907 );
my %dbm;
my $db_file = 'wowaddon.dbm';
tie %dbm, 'SDBM_File', $db_file, O_CREAT|O_RDWR, 0644;

tied %dbm or die "Can't open %db_file\n";

my @newaddon;

foreach ( @wowaddon ) {
    my $curmd5 = wowaddon_md5($_);
    if ( !exists $dbm{$_} ) {
        $dbm{$_} = $curmd5;
        next;
    }
    else {
        my $md5 = $dbm{$_};
        if ( $md5 ne $curmd5 ) {
            push @newaddon, $_;
        }
    }
}

untie %dbm;

if ( $#newaddon >= 0 ) {
    send_mail('localhost', 'sender@yourdomain.com',
            'youremail@yourdomain.com', 'New Wow Addons', "@newaddon");
}

exit 0;

사용 방법은 간단합니다. 53번 라인에 업데이트 여부를 알고 싶은 애드온의 고유 번호를 넣습니다. 고유 번호는 와우 인벤 애드온 자료실에서 해당 애드온의 URL에서 idx 값입니다. 괄호 안에 공백으로 여러개의 애드온 번호를 넣으시는 것도 가능합니다.

그리고 79, 80번 행에서 발신자, 수신자의 이메일 주소를 적당한 값으로 변경하시면 됩니다. 발신자의 이메일 주소가 이상 할 경우 메일이 제대로 발신되지 않거나 스팸으로 판정받을 수도 있으니 주의하시면 되겠습니다.

파일 수정이 끝났으면 cron을 이용해서 원하시는 간격으로 이 스크립트를 실행시켜 주시면 됩니다. 그러면 애드온에 어떤 변경 사항이 생기면 메일로 해당 애드온의 번호를 알려줍니다. 조금 손을 보시면 더 예쁜 메일을 보내실 수도 있을 듯 합니다.

끝으로 이 스크립트는 CPAN의 WWW::Mechanize 모듈을 사용합니다. 해당 모듈이 설치되어 있어야 동작하니 실행 전에 꼭 cpan으로 WWW::Mechanize을 설치 해주세요.