Nozbeを試してみた

Nozbeという存在を昨日知ったので早速試してみた。
EvernoteDropboxと連携出来るようで、その点はグッド。
エクスポートしたデータをそのまま紙に印刷して、チェックリストとして使える。
今までは、TODOリストを使っていたような人が、GTDでいうコンテキストやプロジェクトを取り入れるには良いかもしれない。

しかし、Toodledoから移行しようと思うと、なんか、うまくいかない。
そもそも、Nozbeってインポート昨日ないんでしょうか?
2年くらい前に書かれた記事を見ると、エクスポートの近くにインポートも存在しているけど、今はその場所には存在しない。

ToodledoでXML形式でエクスポートしたデータを次の形式に変換して、行動(Action)リストを作ることはできる。

 *  タイトル on 期限 %所要時間 @コンテキスト

という感じで並べればいい。
これを、複数の行動追加操作で取り込むことはできる。

課題と感じる点は、

  • Nozbeの複数の行動追加操作で繰り返し情報を取り込んでくれない。
  • Nozbeの複数の行動追加操作でノート情報を取り込んでくれない。(ToodledoのノートにURLの情報など書き込んであるんでないと困る・・・)
  • Toodledoのノートは行動単位。Nozbeのノートはプロジェクト単位。
  • Nozbeからのエクスポートデータにプロジェクトに設定したラベル情報が出力されない。

そんなわけで、有料の申し込みしてはみたものの、Toodledoからの移行は難しそうなんで、解約かなぁ。

Nozbe API使いこなせば、もう少し細かい設定できるのかな?。ここに書いてあるBASIC APIだけでは、やっぱり無理っぽい。

ここから下は、toodledoのXMLをnozbeの行動に変換するために作ったperlスクリプト(多分perl5.8.1以降が必要)

#!/usr/bin/perl

use strict;
use utf8;
use XML::Simple;
use Data::Dumper;
use Encode;

my $data = XMLin("toodledo.xml");
#my $name = encode('UTF-8', $data);
#warn Dumper($data);

my %parents;
while (my ($key, $value) = each (%{$data->{item}})) {
    if ($value->{completed} eq '0000-00-00') {
	if ($value->{parent} ne '0') {
	    if (ref($parents{$value->{parent}}) ne 'ARRAY') {
		$parents{$value->{parent}} = [];
	    }
	    push @{$parents{$value->{parent}}}, $key;
	}
    }
}

print "Index\n\n";

my $note = '';
while (my ($key, $value) = each (%{$data->{item}})) {
    if (ref($value->{context}) eq 'HASH') {
	$value->{context} = '';
    }
    if (ref($value->{length}) eq 'HASH') {
	$value->{length} = '';
    } else {
	$value->{length} =~ s/mins//;
	$value->{length} =~ s/hours/時間/;
    }
    if (ref($value->{duedate}) eq 'HASH') {
	$value->{duedate} = '';
    } else {
	$value->{duedate} =~ s/\-//;
	$value->{duedate} =~ s/\-//;
	$value->{duedate} .= "日";
    }
    if (ref($value->{duetime}) eq 'HASH') {
	$value->{duetime} = '';
    } else {
	my $time = substr($value->{duetime}, 0, -3);
	my ($hour, $min) = split(":", $time);
	if (substr($value->{duetime}, -2) eq "pm") {
	    $hour += 12;
	}
	$value->{duetime} = "$hour:$min";
    }
    $value->{repeat} =~ s/None//;
    $value->{repeat} =~ s/Every weekday/平日/;
    $value->{repeat} =~ s/Every Mon\, Tue\, Wed\, Thu\, Fri/平日/;
    $value->{repeat} =~ s/Daily/毎日/;
    $value->{repeat} =~ s/Weekly/毎週/;
    $value->{repeat} =~ s/Biweekly/1週おき/;
    $value->{repeat} =~ s/Monthly/毎月/;
    $value->{repeat} =~ s/Bimonthly/毎月/;
    $value->{repeat} =~ s/Semiannually/半年/;
    $value->{repeat} =~ s/Yearly/毎年/;
    
    if ($value->{completed} eq '0000-00-00') {
	if ($value->{parent} eq '0') {
	    if (ref($value->{note}) ne 'HASH') {
		$note .= "[" . $value->{title} . " #Inbox\n";
		$note .= $value->{note} . "]\n";
	    }
	    print encode('UTF-8', "* " . $value->{title});
	    print encode('UTF-8', " on " . $value->{duedate}) if $value->{duedate} ne '';
	    print " " . $value->{duetime} if $value->{duetime} ne '';
	    print encode('UTF-8', " ^" . $value->{repeat}) if $value->{repeat} ne '';
	    print encode('UTF-8', " %" . $value->{length}) if $value->{length} ne '';
            print " #Index";
	    print encode('UTF-8', " " . $value->{context}) if $value->{context} ne '';
	    print "\n";
	}
    }
}
#print encode('UTF-8', $note);

$note = "";
foreach my $parentid (keys %parents) {
    my $parent = $data->{item}->{$parentid};
    print "\n". encode('UTF-8', $parent->{title}) . "\n\n";
    foreach my $childid (@{$parents{$parentid}}) {
	my $value = $data->{item}->{$childid};
	if (ref($value->{note}) ne 'HASH') {
	    $note .= "[" . $value->{title} . " #" . $parent->{title} . "\n";
	    $note .= $value->{note} . "]\n";
	}
	if ($value->{completed} eq '0000-00-00') {
	    print encode('UTF-8', "* " . $value->{title});
	    print encode('UTF-8', " on " . $value->{duedate}) if $value->{duedate} ne '';
	    print " " . $value->{duetime} if $value->{duetime} ne '';
	    print encode('UTF-8', " ^" . $value->{repeat}) if $value->{repeat} ne '';
	    print encode('UTF-8', " %" . $value->{length}) if $value->{length} ne '';
            print " #" . encode('UTF-8', $parent->{title});
	    print encode('UTF-8', " " . $value->{context}) if $value->{context} ne '';
	    print "\n";
	}
    }
}
#print encode('UTF-8', $note);