howm-to-はてな

30分プログラム、その89。

howmの内容をはてなに自動投稿するスクリプト。実際には、はてダラで投稿できる形式に変換するだけ。内容は、はてな記法で書かれていることが前提。

使い方

$ perl howm-hatena.pl # 今日の分のファイルを生成

$ perl howm-hatena.pl 2007 07 24 # 日付を指定して生成

$ perl howm-hatena.pl yesterday  # 昨日の分 :D

yesterdayは許してください。自動投稿の都合上、昨日の分を簡単に生成できるようにしたかったんです。

コード

#! /usr/bin/perl
# -*- mode:perl enconding:utf-8 -*-
#
# howm-hatena.pl - howm to hatena poster
#
# Copyright(C) 2007 by mzp
# Author: MIZUNO Hiroki <hiroki1124@gmail.com> 
# http://mzp.sakura.ne.jp/
#
# Timestamp: 2007/07/24 20:33:03
#
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#

########################################
# Setting
########################################
my $HOWM_DIR = '~/howm';

########################################
use strict;
use warnings;
use Time::Local;

my ($year,$mon,$day);
if(@ARGV == 3){
    ($year,$mon,$day) = @ARGV;
}else{
    my @time = localtime(time);
    $year = sprintf('%04d',1900+$time[5]);
    $mon = sprintf('%02d',1+$time[4]);
    $day = sprintf('%02d',$time[3]);

    $day -- if(@ARGV==1 and $ARGV[0] eq 'yesterday'); # :D
}
my @files = glob "$HOWM_DIR/$year/$mon/$year-$mon-$day-*.howm";

open DIARY,">$year-$mon-$day.txt";
print DIARY,"\n";

while(@files){
    my $file = shift @files;
    my ($hour,$min,$sec);
    if($file =~ /-(\d{2})(\d{2})(\d{2})\.howm\Z/){
	$hour = $1;
	$min  = $2;
	$sec  = $3;
    }
    my $time = timelocal($sec,$min,$hour,$day,$mon-1,$year-1900);

    open HOWM,$file;
    while(<HOWM>){
	s/\A= /*$time*/g;
	print DIARY $_;
    }
    close HOWM;
}
close DIARY;

おまけ

Perlの理由は、はてダラPerlだったから。無駄に必要な言語を増やすのはちょっと・・・。

ちなみに、これで自動投稿するシェルスクリプトはこうなる。

#!/bin/sh
rm -rf howm
svn export svn+ssh://example.com/repos/howm
perl howm-hatena.pl yesterday
perl hw