Android自動化アプリ「Tasker」を使いこなす。次の予定読み上げタスクを作り込んでみた。 | 「藍染 迅(超時空伝説研究所改め)」の部屋

「藍染 迅(超時空伝説研究所改め)」の部屋

小説家ワナビーの「藍染 迅(あいぞめ じん)」です。

書籍化・商業化を目指し、各種コンテストに挑戦しながら、カクヨム、小説家になろう、エブリスタ、アルファポリスなどに作品を投稿しています。

代表作は異世界ファンタジー「「飯屋のせがれ、魔術師になる。」。

そもそも本件の元ネタは、Pocketablesというサイトで紹介されているものである。


ところが、DL可能なファイルそのものでは、きちんと動作しないケースがある。

①前日に終日スケジュールが設定されている時は、それが次の予定として読みだされてしまう。

②当日に終日スケジュールが設定されている時は、それが次の予定として読みだされ、他に予定されているスケジュールは無視されてしまう。

③日時が変更されたスケジュールがあると、変更前のデータを読み込んでしまうことがある。

④(当然のことながら)マナーモードが設定されていると、音声読み上げがなされず、終了してしまう。

⑤全体にわたってグローバル変数が使用されており、メモリーを圧迫する恐れがある。

そこで使いこみながら手を加え、前述の問題点を回避するように改造を施した。
ほしい人がいるかどうかわからないが、参考までに公開します。



次の予定読み上げ

 A1: HTTP Get [ Server:Port:https://www.google.com Path:calendar/feeds/XXXX%40gmail.com/private-YYYY/full?singleevents=true&futureevents=true&orderby=starttime&sortorder=ascending&max-results=4 Attributes: Cookies: Timeout:30 Mime Type: Output File:Calendar.txt ] 

※「XXXX」と「YYYY」の部分は、Googlelでのユーザーネーム(「XXXX@gmail.com」の前半部分)と、Googleカレンダーへのプライベート・アクセスキーを入れる必要があります。
(プライベート・アクセスキーを入手するには、Googleカレンダーサイトを開き、「設定」を開きます。次に「カレンダー」タブをクリックし、参照したいカレンダーを選びます。開いた画面の下方で、「カレンダーのアドレス」からオレンジ色の「XML」ボタンをクリックします。)

A2: Read File [ File:Calendar.txt To Var:%calendar ] 
<変更前データをカット>
A3: Variable Search Replace [ Variable:%calendar Search:<gd:originalEvent.*?gd:originalEvent> Ignore Case:OffMulti-Line:On One Match Only:Off Store Matches In: Replace Matches:On Replace With:  ] 
 
※ここで、修正があった場合に残されている変更前のデータをカットする作業をしています。「Replace With」の後にはスペースをひとつ設定しています。NULL文字が設定できないのでスペースにしていますが、後の処理に影響しない文字なら何でも構いません。

※A3のコードにバグがあったので修正しました。[2013-11-20]
※見やすいようにラベルを設定しました。[2014-01-21]

A4: Variable Split [ Name:%calendar Splitter:<title type='text'> Delete Base:Off ] 
A5: Variable Set [ Name:%index To:1 Do Maths:Off Append:Off ] 
A6: Variable Set [ Name:%ceventdate To:%calendar Do Maths:Off Append:Off ] 
A7: Variable Split [ Name:%ceventdate Splitter:startTime=' Delete Base:Off ] 
<開始時刻取得>
A8: Variable Set [ Name:%index To:%index+1 Do Maths:On Append:Off ] 
A9: Variable Clear [ Name:%etime Pattern Matching:Off ] 
A10: Variable Set [ Name:%eventdate To:%ceventdate(%index) Do Maths:Off Append:Off ] 
A11: Variable Split [ Name:%eventdate Splitter:- Delete Base:Off ] 
A12: Variable Split [ Name:%eventdate3 Splitter:T Delete Base:Off ] 
A13: Variable Section [ Name:%eventdate3 From:1 Length:2 Adapt To Fit:Off Store Result In:%eday ]A14: Variable Set [ Name:%samedayevent To:no Do Maths:Off Append:Off ]

※A14の処理を追加。当日これからの予定が残っていない場合に対応。[2014-01-21]

A15: Goto [ Type:Action Label Number:1 Label:予定がない場合 ] If [ %eday > %DAYM ]

※データの日付が翌日以降なら、処理終了。[2014-01-21追加]

A14: Return [ Value:1 Stop:Off ] If [ %eday > %DAYM ]

※削除。[2014-01-21]

<終日スケジュールの場合>
A16: If [ %eventdate31 !~ %eday ]
<昨日の日付>
A17: If [ %DAYM > %eday ]

※ラベルを追加。[2014-01-21]

A18: Goto [ Type:Action Label Number:3 Label:開始時刻取得 ] 
A19: End If 
A20: Variable Set [ Name:%eventdate31 To:%eday Do Maths:Off Append:Off ] 
A21: Variable Set [ Name:%etime To:終日 Do Maths:Off Append:Off ] 
A22: End If 
A23: Variable Set [ Name:%eventdate31 To:%eventdate31/1 Do Maths:On Append:Off ] 
A24: Variable Set [ Name:%eventdate2 To:%eventdate2/1 Do Maths:On Append:Off ] 
A24: Variable Set [ Name:%samedayevent To:no Do Maths:Off Append:Off ] 

※A15に移動。[2014-01-21]

A25: Variable Set [ Name:%samedayevent To:yes Do Maths:Off Append:Off ] If [ %DATE ~ %eventdate2-%eventdate31-%eventdate1 ]
A26: Variable Set [ Name:%indexc To:%index+1 Do Maths:On Append:Off ] 
A27: Variable Set [ Name:%calcut To:%calendar(%indexc) Do Maths:Off Append:Off ] 
A28: Variable Split [ Name:%calcut Splitter:</title> Delete Base:Off ] 
A29: Variable Split [ Name:%calcut2 Splitter:where valueString=' Delete Base:Off ] If [ %calcut2 Is Set ]
<場所のセット>
A30: Variable Split [ Name:%calcut22 Splitter:'/ Delete Base:Off ] If [ %calcut22 Is Set ]
<開始時刻のセット>
A31: Variable Section [ Name:%eventdate32 From:1 Length:5 Adapt To Fit:Off Store Result In: ] If [ %etime !~ 終日 ]

※「if」文を追加しました。[2014-01-21]

<終日スケジュールの場合>
A32: Variable Set [ Name:%eventdate32 To:%etime Do Maths:Off Append:Off ] If [ %etime ~ 終日 ]
<文章セット前半>
A33: Variable Set [ Name:%nextevent To:今日予定されている次のスケジュールは、 %calcut1 です。時刻は %eventdate32 です。 Do Maths:Off Append:Off ] If [ %samedayevent ~ yes ]
<文章セット後半>
A34: Variable Set [ Name:%nextevent To:%nextevent 場所は %calcut221 です。 Do Maths:Off Append:Off ] If [ %calcut221 !~ \%calcut221 ]
<予定がない場合>
A35: Variable Set [ Name:%nextevent To:本日これからの予定はありません Do Maths:Off Append:Off ] If [ %samedayevent ~ no ]
A36: If [ %SILENT !~ off ]
A37: Popup [ Title:次の予定 Text:%nextevent Background Image: Layout:Popup Timeout (Seconds):5 Show Over Keyguard:On ] 
A38: Wait [ MS:0 Seconds:3 Minutes:0 Hours:0 Days:0 ] 
A39: Else 
A40: Say [ Text:%nextevent Engine:Voice:jp.kddilabs.n2tts:jpn-JPN-F01 Stream:3 Pitch:5 Speed:5 Continue Task Immediately:Off ] 
A41: End If 
A42: If [ %eventdate32 ~ 終日 ]
A43: Goto [ Type:Action Label Number:1 Label:開始時刻取得 ] 
A44: End If 
A45: Return [ Value:1 Stop:Off ] 

※当然のことながら日本語用TTS(テキスト読み出しエンジン)を設定しておく必要があります。本例では「N2」が設定されている前提で設定を行っています。
他の設定に代えたい場合は、A40の部分を適宜改変してください。

最後にお決まりですが、当研究所は上記タスクの正常動作を一切保証いたしません。ご利用になる方は、個人の責任においてご利用願います。

これはすべて個人の暴走である。

[https://www.blogmura.com/ にほんブログ村 ] ←クリックしていただければありがたく