Slackの検索をChrome上から手軽に行いたくて拡張用処理を試してみた
現在のタスクを遂行する際に、過去完了分のタスクを参考にすべしと検索することはよくありますが、タスクのやり取りで複数サービスを利用していると検索に時間を取られがちです。
BackLogについては以前執筆した記事にて大体ましになりましたが、問題はSlack。
検索時のURL構成をみると、キーワードを直接クエリとして投げているわけではないと分かります。故にChromeのサイト内検索設定が使えません。
何とかしたくURL構成について調べて、意外と何とかなり、簡単な拡張機能用処理を書いてみました。
Slack検索のURL構成について
これらは情報の形式から察しがついた結果を元に行われており、今後変更される可能性は十分にあります。
何らかの法則を元に可逆変換が入っているのではないだろうかと推測はしていました。というのも、検索キーワードを少し変えてみるとURLのランダム文字列が全て変わるわけでもなく、かつ変更後に戻すと元の文字列になるためです。
検索してみると似たような事をやっていた事例はあり、説明もありました。
必要な手順は以下の通り。
- URLエスケープする
- JSON形式でdumpする
- Base64でエンコードする
JavaScriptにて処理してみる
先ほどの記事にも処理例はありましたが、あくまでもPythonです。これをJavaScriptで行う必要があります。
function _clickHandler() { if (document.getElementById('keyword').value.length > 1) { return false; } else { var _channel = ""; var _keyword = document.getElementById('keyword').value; var _slack_query = encodeURIComponent(_keyword); var _query = JSON.stringify({"d": _slack_query, "r": _slack_query}); var _encoded = btoa(_query); var _url = "https://app.slack.com/client/" + _channel + "/search/search-" + _encoded; chrome.tabs.create({url: _url}); } } document.addEventListener("DOMContentLoaded", function () { document.getElementById("submit").addEventListener("click", _clickHandler); });
実際の処理からマスキングする意図でいくつか変えているため、この処理のままでは動きません。JavaScriptの標準関数で十分いけるのには驚きでした。
あとがき
実際に社内向けに書いた処理では、Slack以外にも同じキーワードでBacklogに対して検索を行うようにしています。両サービスを個別に開いてキーワードを投げるのは地味に手間だったため、随分楽になりました。
個人的に、履歴を辿ったり等もう少し利便性をあげたいこともあり、引き続き試してみようと思います。