ぺんちゃん日記

食と歴史と IT と。 Web の旅人ぺんじろうが好奇心赴くままに彷徨います 。

Twitter送信スクリプトがメンテナンス不能になってトホホホホ………

これまでの経緯。

音声入力したテキストを CAS( Google apps Script)で摘出してtweetするスクリプトを運用していました。

eltestの Twitter ボタンをクリックすると、gasの API からテキストを受け取って、句読点やハッシュタグなどを処理しながらtweetしています。
ワンクリックで送信できるので便利。
ところが先日、動作しなくなって原因を調べたところ、 GAS の仕様変更ポイです。
まあそうじゃなくても仕組みが複雑すぎてメンテナンスが難しい。
ここで修正しても、いずれは 諦めなければならない時期が来そうです。

どうしよう?

このスクリプトのメリットは、tweet本文を入力した音声入力ウィンドウをアクティブにすることなくtweetすることができます。
つまり送信ボタンをクリックしたときに、 ウィンドウがパカパカ切り替わらないところです。
Twitter 送信の度にウィンドウが裏に回ってしまうとクリックが一回増えるんじゃないか?
ウインドウ切替して良いなら、クリップボードに転送すれば簡単にテキストを取得できます。

クリップボード経由での転送は取扱注意。
クリップボードには送信しちゃいけない内容がコピーされていることが度々あります。
住所とか ID とかパスワードなんてものも。
何かの拍子でそういうのをtweetしてしまったらやばいです。
送信後に自分のタイムラインを確認するわけでもないので、最悪の場合は気づかずにさらけ出し続ける可能性も………。
まあとにかくクリップボードから転送するのは危険。

取り込みと送信2段階に分けてみるか。

これまでeltestアプリでは Twitter ボタン一発で、テキストを取り込みつつ送信していましたが、2段階に分けて、取り込みボタンで取り込んでから Twitter ボタンで送信する形で仕様変更してみようかと思います。
ボタン一発の簡単さを失ってしまいますが、これまでも意図しない内容のまま送信してしまう事故もあったので、安全のためにも不便さは受け入れるべきかと考えました。

テキストをカットしてクリップボードに転送する処理は AutoHotkey で行います。
この場合、eltest側からはテキストのカットされた瞬間を察知できないので、完了の合図を待ちます。
ahkスクリプトクリップボードにテキストを確保できたら、eltestアプリ上でショートカットキー Ctrl + C を送信して、クリップボードの内容を受け取ってもらいます。
eltestアプリはテキストを受け取ったら、適度に変換してテキストエリアに 表示します。
Twitter ボタンは単純にテキストエリアの内容を Twitter に送信するだけ。

実装。

eltestはスパゲッティすぎて自分でも訳分かりません。
アプリケーションとメインプロセスで通信しながら動作するので、もうメッセージが足の踏み場もないほど散らばってます。

使用するボタンは3個。
まずは入り口、クリップボードボタンでテキストをカットする ahk スクリプトを起動します。
二つ目のボタン、 Translate ボタンでカットしたテキストを受け取って変換処理します。
このボタンは ahk スクリプトから Ctrl + C ショートカットでクリックできます。
そして三つ目のボタン、 Simple Tweet では textarea の変換したテキストを140文字単位に分けてtweetします。


混乱のもとになっているのがtweetクラス。
覚えているうちにメモっておきます。
本来はテキスト処理しつつ送信していたのですが、テキスト処理と送信を分けたので、全く送信の必要がないのにアクセスキーなどを渡して初期化しています。

Ctrl + C の動作ですが、ショートカットキーで発生するイベントの中でクリップボードを操作できないので一旦メインプロセスに送信、クリップボードを受け取ったら今度はメインプロセスからは入力フォームを操作できないのでアプリケーション側に Update-Message します。
クリップボードの内容を受け取るだけで3段階のメッセージ送信が必要なんだから足の踏み場もないのも当然ですね。

最後のハマりポイント。

eltestアプリが音声入力テキストを必要とするのは Twitter 送信だけかと思っていたら、ポーズキー長押しによる文字転送でも使っていました。

関係性を把握するのが大変でしたが、カット処理は pause 長押し処理の中に書いてしまって、 eltestに Ctrl + C で変換処理だけお願いすることにしました。
変換後の結果の受け取りはクリップボードで。
変換と同時に最終結果をクリップボードにセットするようにしています。

こちらの場合は貼り付け結果を必ず目視で確認するので、クリップボード経由でも大丈夫。

最終調整。

クリックしたときに何の反応もないと不安なのでtweetに成功したらテキストをクリアします。
これで二重送信が防げます。

テキスト取り込みについても同様に二重送信を防ぎます。
カットした内容が空っぽなら、 textarea を更新しません。

変更後。

アクティブウィンドウパカパカについてはほとんど気になりませんでした。
tweetする時は音声入力直後なので、音声入力ウインドウ最前面であることがほとんどです。
今のところは割と順調です。