*Developer's API Documentation : Tasks **同期 Syncing 多くのサードパーティ製アプリケーションの主たる目的は、タスクの同期をすることです。この勧めに従えば、きれいで効率的にタスクを同期することができます。最重要事項の一つとしては、「タスク最終更新」("lastedit_task")または「タスク最終削除」("lastdelete_task")のタイムスタンプを用いることです。これはアカウント情報("Account Info")から返されるもので、アプリケーションがサーバーから差分を取得・更新・削除する前に、サーバー上で変更があったかどうかを知ることができます。たいていの場合は、同期してもサーバー上に変更はなく、何もする必要がないので、タイムスタンプを用いることによって処理量・時間を大きく削減することができます。 図(本家サイトより拝借・加工。問題がある場合はご連絡ください) #ref(SyncFlowTasksJp.png) アプリケーションとToodledoとの同期においては、以下の7つのシナリオを扱えなければなりません。 +アプリケーションへのタスク追加 +アプリケーションでのタスク更新 +アプリケーションからのタスク削除 +Toodledoサーバへのタスク追加 +Toodledoサーバでのタスク更新 +Toodledoサーバからのタスク削除 +アプリケーションとサーバ双方でタスクが変更されている シナリオ1, 2, 3では、アプリケーションはタスクを追加・更新・削除するために、それぞれ /tasks/add.php, /tasks/edit.php, /tasks/delete.php のAPIを用いることになります。追加と削除の場合は事前チェックの必要はありませんが、更新をする前には差分を取得し、修正日の比較をすることにより、タスクのより新しい更新を上書きしてしまわないようにしなければなりません。 シナリオ4, 5, 6では、アプリケーションはそれぞれ /tasks/get.php または /tasks/get_deleted.php のAPIを用いることになります。シナリオ7では、アプリケーションは修正日を比較し、双方で更新されているのかどうかを判断した後、ユーザーにどちらの版を残すかを尋ねます。すべてのシナリオは上のフローチャートに従うことで効率よく処理することができます。 **タスクの属性 タスクにはいろいろ設定・取得できる項目があります。それらの属性の詳細を説明します。 |&bold(){id}|このタスクのサーバーID番号です。アカウントごとに一意であることが保証されていますが、アカウントが違えば同じID番号で違った内容のタスクになります。| |&bold(){title}|タスクの名前を表す文字列です。255文字まで。設定する際、& は %26 に、; は %3B にそれぞれエンコードしてください。| |&bold(){tag}|タスクにつけるタグです。コンマ , で区切られた文字列リストです。64文字まで。設定する際、& は %26 に、; は %3B にそれぞれエンコードしてください。| |&bold(){folder}|フォルダのID番号です。フォルダに登録しない場合はこの項目自体を書き漏らしておくか、0を設定してください。| |&bold(){context}|コンテクストのID番号です。フォルダに登録しない場合はこの項目自体を書き漏らしておくか、0を設定してください。| |&bold(){goal}|ゴールのID番号です。フォルダに登録しない場合はこの項目自体を書き漏らしておくか、0を設定してください。| |&bold(){location}|ロケーションのID番号です。フォルダに登録しない場合はこの項目自体を書き漏らしておくか、0を設定してください。| |&bold(){parent}|プロアカウント項目です。サブタスクへのアクセスに用いられます。サブタスクを作成するには、ここに親タスクの番号を設定します。デフォルトは0で、この場合は普通のタスクが作成されます。| |&bold(){children}|プロアカウント項目です。サブタスクへのアクセスに用いられます。このタスクが持っている子タスクの数を示します。サブタスクや、普通のタスクでは0となります。| |&bold(){order}|プロアカウント項目です。サブタスクへのアクセスに用いられます。これはintegerで、親タスク内での当該サブタスクの順番を示します。現在、これは読み取り専用としています。| |&bold(){duedate}|タスクの期限日についての、GMT unixのタイムスタンプです。このタイムスタンプのうち、時間の部分は関係ありません。サーバーから取得した際には、つねに正午に設定されます。| |&bold(){duedatemod}|[[due date modifier]]がどれなのか示すintegerです。| | |0:この日までに(Due by)| | |1:この日に(Due On:=)| | |2:この日以降に(Due After)| | |3:オプション的(?)| |&bold(){startdate}|タスクの開始日についての、GMT unixのタイムスタンプです。このタイムスタンプのうち、時間の部分はつねに正午に設定されます。| |&bold(){duetime}|タスクの期限時間についての、GMT unixのタイムスタンプです。期限時間が設定されていなければ、0となります。期限日が設定されていないのに期限時間が設定されている場合、&u(){このタイムスタンプの日付}は1970年1月1日に設定されます。時間はfloating timesで記録されます。言い換えれば、10amとして設定されたものはそのタイムゾーンにおける10amです。このタイムスタンプをGMTの文字列に変換し、タイムゾーンに関わらず表示することもできます。| |&bold(){starttime}|タスクの開始時間についての、GMT unixのタイムスタンプです。開始時間が設定されていなければ、0となります。開始日が設定されていないのに開始時間が設定されている場合、&u(){このタイムスタンプの日付}は1970年1月1日に設定されます。時間はfloating timesで記録されます。言い換えれば、10amとして設定されたものはそのタイムゾーンにおける10amです。このタイムスタンプをGMTの文字列に変換し、タイムゾーンに関わらず表示することもできます。| |&bold(){remind}|| |&bold(){repeat}|| |&bold(){repeatfrom}|| |&bold(){status}|| |&bold(){length}|| |&bold(){priority}|| |&bold(){star}|| |&bold(){modified}|| |&bold(){completed}|| |&bold(){added}|| |&bold(){timer}|| |&bold(){timeron}|| |&bold(){note}|| |&bold(){meta}|| **タスクの取得