綾小路龍之介の素人思考

メールを何回もやり取りした後からこれらのメールに自動的にラベルをつけるには

一つ前の記事とよく似ている内容なので、これを読む前に一つ前の記事を読むことお勧めします。とりあえず前回の方法ではsleep文で休みを入れました。この方法だと、Gmailサーバやネットワークの空いている時間はsleepを短く、混んでいる時間はsleepを長く取らないと効率的にラベリングできませんでした。今回はこれを改良してWindowIDを取得する処理を追加して、任意秒休んで、あるWindowIDを取得できたら(取得できるまでは次の処理に移らない)次の処理に移る様にします。ここまでくると本当にほって置いても自動的にラベリングをしてくれます。実際この方法で1万通のメールにラベリングをしました。

前回と同様に最初に1回だけラベリング処理を行います。このファイルをエディタで開くと、次のようなファイルになっていると思います。(test1.uws)

ACW(GETID("GMAIL - SEARCH RESULTS FOR: FROM:((@MAG2.COM MAG2 ID)) -LABEL:M_MAG2 IS:UNREAD - LUNASCAPE","LunascapeMainWnd"),-4,4,1032,748,0)
BTN(LEFT,CLICK,192,247,234)
BTN(LEFT,CLICK,703,217,156)
BTN(LEFT,CLICK,727,384,324)
BTN(LEFT,CLICK,697,350,543)

GETID文はGmailのウィンドウのIDを取得する文で、第1引数が含まれるウィンドウのウィンドウIDを返します。Gmailがラベリング処理を行っている最中のタイトルバーに注目すると、GETID文の第1引数が含まれている事がわかります。ただし、第1引数と全く同じというわけではないと思います。多分第1引数のis:unreadの後に1%とか2%とか処理の進み具合を示す文字が挿入されている事と思います。ラベリング処理が終われば、タイトルバーの内容は第1引数と全く同じになるはずです。

そこで、タイトルバーの内容が第1引数と全く同じになるまでは次の処理に進まない様にします。test1.uwsではGETID文は引数を2つ取っていますが、これに第3引数(-1)を追加します。こうすることで、ウィンドウが元の状態に戻るまで、つまりラベリング処理が正常に終了するまで、処理を止めることができます。例えば次のようにするということです。(test2.uws)

ACW(GETID("GMAIL - SEARCH RESULTS FOR: FROM:((@MAG2.COM MAG2 ID)) -LABEL:M_MAG2 IS:UNREAD - LUNASCAPE","LunascapeMainWnd","-1"),-4,-4,1032,748,0)
BTN(LEFT,CLICK,192,247,234)
BTN(LEFT,CLICK,703,217,156)
BTN(LEFT,CLICK,727,384,324)
BTN(LEFT,CLICK,697,350,543)

test2.uwsを実行すると思ったようには動いてくれないと思います。その原因はGETID文が入っているACW文にあります。ACW文は第1引数で与えられたウィンドウのサイズを変化させるための文ですが、これはウィンドウサイズが変化しようがしまいが戻り値は変化しません。そのため、タイトルバーに含まれる文字列を絶対指定した(つまり完全一致するまで待った)としても、処理(マウスボタンをクリックする処理)は次に進み、ラベリング処理を待ったことにはならないからです。

GETID文は戻り値に真と偽を取るので、GETID文をIFB文の条件式に含めて、ラベリング処理をIFB文で囲みます。(test3.uws)

IFB GETID("GMAIL - SEARCH RESULTS FOR: FROM:((@MAG2.COM MAG2 ID)) -LABEL:M_MAG2 IS:UNREAD - LUNASCAPE","LunascapeMainWnd","-1") THEN
  ACW(GETID("GMAIL - SEARCH RESULTS FOR: FROM:((@MAG2.COM MAG2 ID)) -LABEL:M_MAG2 IS:UNREAD - LUNASCAPE","LunascapeMainWnd","-1"),-4,-4,1032,748,0)
  BTN(LEFT,CLICK,192,247,234)
  BTN(LEFT,CLICK,703,217,156)
  BTN(LEFT,CLICK,727,384,324)
  BTN(LEFT,CLICK,697,350,543)
ENDIF

IFB文の条件式が真になるまで、つまりGmailウィンドウのタイトルバーが元に戻りラベリング処理が終わるまで、IFB文中のラベリング処理は行われません。さらにタイトルバーの文字が元に戻るまで無限に待ち続けるので、たとえ処理が100秒かかろうが3秒で終わろうが、終わった瞬間に次の処理に移ることができます。

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2007-08-12T17:57:50+09:00
  2. Modified: 2007-08-12T04:00:08+09:00
  3. Generated: 2017-09-23T23:09:20+09:00