post2blogでカテゴリー設定 ----- 2005年11月24日

[Movabletype]

メールからブログ投稿できるツールとして、post2blogを愛用させていただいている。

post2blogもカテゴリー設定機能がサポートされた新版がでたが、設定できるカテゴリーは固定で都合が悪い。 記事に複数のカテゴリーを設定することは、あまり無いと思えるが、カテゴリーを1つは設定したい。
そこで、メールの第1行目に Cat=山登り などと書いて、カテゴリーが設定できるように改造を試みた。

まず、下記の赤字部のように、$category_id の値は"0"にし、@categoriesの行はコメントアウトする。

my $blog_id = 1;
my $username = 'Melody';
my $password = 'Nelson';
my $category_id = 0;
#my @categories = (2, 3, 4);
my $parse_path = '/Users/Shared/post2blog';

次に、メールから設定したいカテゴリーの語句を取り出すため、下記の赤字部を追加、修正する。

my $cont;
my $dummy;
my $setName;
foreach (@texts) {
        open(CONT, $_);
        while (<CONT>) {
                s/\r\n/\n/g;
                s/\r/\n/g;
               if(/^Cat=/){
                   ($dummy,$setName) = split(/=/);
                   $setName =~ s/\n//g;
                   $setName = $j->set($setName)->utf8;
               }else{$cont = $cont.$_;}
        }
        close(CONT);
}

さらに、新しく投稿をPostしてカテゴリーをPostする間に、現在登録されているカテゴリーのリストを求めて、語句が一致するcategoryのidを求め、得られたidを引き継ぐようにする。

my $ret = $rpc->call('metaWeblog.newPost',
        $blog_id,
        $username,
        $password,
        {  
                'title' => $title,
                'description' => $description,
                'mt_text_more' => $text_more
        },
        0,      
);

my $post_id = $ret->result();

   $ret = $rpc->call('mt.getCategoryList',
        $blog_id,
        $username,
        $password,
);

my $ref =$ret->result();

my $catID;
my $catName;
my %tmp;

foreach(@$ref){
   %tmp = %$_;
   $catID = $tmp{"categoryId"};
   $catName = $tmp{"categoryName"};
   $catName = $j->set($catName)->utf8;
   if($catName eq $setName){$category_id = 1;last;}
}

if ($category_id) {
        my $cats;
        $cats = [{ 'categoryId' => $catID, 'isPrimary' => 1, }];
#   foreach my $cat_id (@categories) {
#               push @$cats, { 'categoryId' => $cat_id };
#       }
        $ret = $rpc->call('mt.setPostCategories',
                $post_id,
                $username,
                $password,
                $cats,
        );
}

$ret = $rpc->call('metaWeblog.editPost',
        $post_id,
        $username,
        $password,
        {
                'title' => $title,
                'description' => $description,
                'mt_text_more' => $text_more
        },
        1
);

これで、メールの1行目に Cat=History などと予め登録されている、カテゴリーの語句を書くと、そのカテゴリーが設定された投稿となる。
Cat=の文がなければ、カテゴリーは当然無設定になる。

最後に、私が現在使っているpost2blogの修正版を以下に付けて置く。
カテゴリー機能付きpost2blog

トラックバック

このエントリーのトラックバックURL:
http://uls.fam.cx/mt/tbk001.cgi/94

コメントを投稿