ぺんちゃん日記

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

【AutoHotkey】閲覧中のページをはてブしてコメントに音声入力用文書の内容を設定する

はじまりはいつも不満から

集中力が切れた時に何をしましょうか?
私は肢体障がい者ですから簡単には PC の前から離席できません。
そこでTwitter を眺めながら気になった記事をはてブでコメントしています。

油断するとずっと息抜きモードに入ってしまうので娯楽関係のページは Firefox で作業関係のページはGoogle Chrome で開くことにしています。
この際メモリがどうのこうのというのは気にしません。

コメントをキーボードで入力するのは面倒なので Google documentを使って音声入力です。
音声入力documentは常に開いているので画面右側はブックマークしたいページ、左側はコメント入力ページとなっています。

f:id:yasushiito:20190321153813p:plain

音声入力したテキストをマウスで選択してカット&ペーストでコメントします。
コピペ部分はすでに自分専用のアプリを用意してあって、ボタンをクリックすると句点を追加するなどしながらクリップボードに送ってくれます。
Firefoxはてブを簡単にするために、はてブツールバーをインストールしてありますから、後は Firefox に切り替えてはてブツールバーのポップアップを開いて貼り付けて送信します。

f:id:yasushiito:20190321153339p:plain


たったこれだけのことですが私にはとてもしんどい!
おまけに Firefoxはてブツールバーは調子が悪いことが時々あってコメントのポップアップウィンドウが開かないことがありました。
不安定な上に操作が煩雑なので何とかしたい。
そこで自動化を検討します。

調査してみる

懸念すべき要素としてははてブの手段とキーボードショートカットです。
コメントのコピペについては以前作った音声入力を開始するスクリプトを流用すれば行けるはずです。
Firefoxはてブは再び動かない恐れがあるのでブックマークは Chrome で行うことにします。

yasushiito.hatenablog.com

はてブする手段は複数あります。

  1. 普段から使っているブックマークツールバーでポップアップを開いて投稿する ただしボタンをマイクでクリックしているのでキーボードから操作できない恐れあり。
  2. はてな公式がサードパーティアプリ向けに提供しているブックマーク専用ページを開いて投稿する ただしキーボードショートカットで入力フォームを操れない恐れあり。
  3. コメント API をダイレクトに叩いて投稿する ただしスクリプトで URL エンコードをする必要がある。

b.hatena.ne.jp
f:id:yasushiito:20190321150238p:plain

Firefox のキーボードショートカット一覧はこちら。
support.mozilla.org

Chrome のキーボードショートカット一覧はこちら。
support.google.com

URL をコピーするためのショートカット確認できました。
Firefox ではロケーションバーというようです。
Chrome で新しいタブを開くショートカットも大丈夫。
その際は URL バーにフォーカスが当たっているので URL を直接ペーストできます。
文書のコピーは簡単簡単、すべて選択して切り取りでいいですね。
はてなサードパーティー向けブックマークページは URL 入力フォームにフォーカスがあたっているのでオッケー。
そこで URL をペーストしてエンターキーでコメント入力ページに移ります。
ところが……。
コメント入力ページのコメント入力フォームにフォーカスがない!!
どうやらページ左上の[B!]アイコンにあるようです。

f:id:yasushiito:20190321151237p:plain

ここから tab キーで送っていくことは可能ですが、ページデザインが変更されるだけで動かなくなってしまいます。
コメント欄にフォーカスを移すショートカットがあれば助かるのですが…。
ページデザインする人は是非とも配慮してほしいものです。

はてながウェブ上で提供しているページは使えないことが判明したので他の方法を検討します。
Google Chromeはてブツールバー拡張があります。
Firefox でも使ってたやつですね。

b.hatena.ne.jp

これをインストールすると Ctrl + B ショートカットでブックマークポップアップを開けます。
しかもこいつは最初からコメント入力欄にフォーカスがあたっています。
ここまで行けば道筋は見つかりましたね。

作ってみる

自動化そのものは難しくないと思います。
手順としてはこんな感じです。

  • Firefox をアクティブにする。
  • キーボードショートカットでロケーションバーを選択して URL をクリップボードにコピーする。
  • Chrome をアクティブにする。
  • キーボードショートカットで新しいタブを開きクリップボードの URL をペーストしてページを開く。
  • はてブ Google Chrome 拡張のポップアップを開く。
  • 音声入力documentからコメントを切り取る。
  • ポップアップに貼り付けて送信する。

スクリプトに組む際の留意点としては。

  • 多少間隔をあけないとキーボード操作のメッセージを取りこぼす。
  • URL やコメントなどはクリップボード経由で変数に取り込む。
  • ウィンドウが見つからない時は処理は中断する。

くらいでしょうか。

組みあがったスクリプトはこんな感じです。

Process,Exist,firefox.exe
If (ErrorLevel <> 0 ) {
  WinActivate,ahk_pid %ErrorLevel%
  Sleep 500
  Send,^l
  Sleep 500
  Send,^c
  bm := clipboard
  Sleep 500
  Process,Exist,chrome.exe
  If (ErrorLevel <> 0 ) {
    WinActivate,ahk_pid %ErrorLevel%
    IfWinExist,音声入力用
    {
    }
    Else
    {
        WinGetActiveTitle, current
        Loop
        {
            Send,^{Tab}
            Sleep 500
            IfWinExist,音声入力用
            {
                break
            }
            WinGetActiveTitle, active
            if current = %active%
            {
              ExitApp
            }
        }

    }
    Sleep 500
    Send,^a
    Sleep 500
    Send,^x
    Sleep 200
    msg := clipboard
    Send,^t
    Sleep 500
    clipboard = %bm%
    Send,^v
    Sleep 500
    Send,{Enter}
    Sleep 2000
    Send,^b
    clipboard = %msg%
    Sleep 500
    Send,^v
    Sleep 500
    Send,{Enter}
  }
}
Else
{
    ExitApp
}

スクリプトによる操作は構想とは少し手順が入れ替わりました。
待ち時間は様子を見ながら少しずつ狭めて行くかもしれません 。
最後の方のエンターキー送信処理を削除すればコメントが正しく入力されているか確認してから送信することができます。
スクリプト動作中にコピペ処理にミスがあると大切な情報を流出させてしまう恐れもあります。
何しろブラウザのどこかのウィンドウを全部選択してコピペしますからね。
自動化処理は便利ですが人間の目で確認する工程がどこかにないとリスクもあります。
利用は計画的に 。