たとえば都道府県分47個のblogがTypePadにあったとして、それらのblog群のカテゴリに相違がある場合、不足しているとしてレポートするPerlスクリプトです。
僕以外の誰に役立つかは知らん。
Filename: check_category.pl
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
binmode STDOUT=>':utf8';
my $bloglist =
{
'愛知県' => 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,
};
my $categories_sum = {};
my $categories_hash = {};
foreach my $blog ( keys %$bloglist) {
my $blog_id = $bloglist->{$blog};
my $categories = category_list($blog_id);
foreach my $item ( @$categories ) {
$categories_sum ->{ $item->{categoryName} }++;
$categories_hash->{ $blog }->{ $item->{categoryName} } = 1;
}
}
foreach my $blog ( sort keys %$bloglist ) {
print "$blog\n";
foreach my $category ( sort keys %$categories_sum ) {
if ( !$categories_hash->{ $blog }->{ $category } ) {
print "$category\n";
}
}
print "\n";
}
exit;
sub category_list {
my $blog_id = shift;
my $xmlrpc = TypePadXMLRPC->new();
$xmlrpc->set();
# カテゴリリスト取得
$xmlrpc->set_blogid( $blog_id );
my $categories_list = $xmlrpc->mt_getCategoryList();
return $categories_list;
}
package TypePadXMLRPC;
use XMLRPC::Lite;
sub new{
return bless{ _DATA => { } }, shift;
}
sub dataref { $_[0]->{ _DATA } }
sub set {
my $self = shift;
$self->dataref->{api} = 'http://www.typepad.jp/t/api';
$self->dataref->{username} = 'hogehoge';
$self->dataref->{password} = 'fugaguga';
return;
}
sub set_blogid {
my $self = shift;
my $blogid = shift;
$self->dataref->{blogid} = $blogid;
}
sub mt_getCategoryList {
my $self = shift;
my $categories_list = XMLRPC::Lite
-> proxy( $self->dataref->{api} )
-> call('mt.getCategoryList',
$self->dataref->{blogid},
$self->dataref->{username},
$self->dataref->{password},
)
-> result;
return $categories_list;
}
1;
実行結果は、もう不足を直しちゃったあとなので提示できません……
MovableTypeのXML-RPCインターフェースと同じAPIを持つblogシステムなら使えるんじゃなかろうか。