URLスキームで起動できる投稿専用のTwitterクライアントを書いた
post-tweetという投稿専用のTwitterクライアントを作って最近使っています。
post-tweetはものすごいシンプルで、文字列の投稿しかできません。 また、作った目的でもあるのですがURLスキームからタイトル、URL、引用文を渡して起動できるようになっています。(逆にそうじゃないケースではまともに使えないです)
目的
post-tweetはブラウザなどで見ているサイトをTwitterに投稿する目的で作成されています。
以前は、PNBTというGreasemonkeyスクリプトを使って投稿していましたが、それを簡略化して単体のElectronアプリにしたものに近いです。
ブラウザ拡張は制限される方向になっているので、ブラウザに依存しないものとして切り出したのが最初です。(このアプリはもともとPostemというクロスポストアプリに内蔵されていましたが、単体に切り出しました)
機能
- URLスキーム(
post-tweet://
)で起動 - コメントを書ける
- Cmd+Shift+EnterでTwitterへ投稿
URL Scheme
post-tweetでは一度起動すると、post-tweet://
というURLスキームがシステムに登録されます。
URLスキームには次のようなクエリを渡すと、それぞれの値が入力欄に反映されます。
url
: URLtitle
: Titlequote
: Quoted text
ブラウザのJavaScriptから起動したい場合は次のように書けば、アプリで開くかどうかのダイアログがでるはずです。
const selectedText = window.getSelection().toString();
location.href = `post-tweet://?url=${encodeURIComponent(window.top.location.href)}&title=${encodeURIComponent(window.top.document.title)}"e=${encodeURIComponent(selectedText)}`
自分はSurfingkeysというブラウザ拡張を使いCmd+Shift+Enterでアプリを起動をしています。 これは、Twitterに今見ているサイトを投稿する用途です。
mapkey('<Meta-Shift-Enter>', 'Open post-tweet', function() {
const selectedText = window.getSelection().toString();
location.href = `post-tweet://?url=${encodeURIComponent(window.top.location.href)}&title=${encodeURIComponent(window.top.document.title)}"e=${encodeURIComponent(selectedText)}`
});
技術的な部分
Electronでもapp.setAsDefaultProtocolClient(protocol[, path, args])
でURLスキームを登録できて、そのハンドリングは癖があることぐらいでたいしたことはやってないです。
またElectronは無のアプリでも起動時間が1秒とかかかるので、post-tweetではアプリを閉じてもバックグラウンドにはいる状態にしています。 これで数百msぐらいで投稿画面がでてくるようになりました。
面倒でバイナリはおいてないので、使いたいヒトは自分でビルドしてみてください。
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。