
昨夜、iOS版Tweetbotがアップデートされ、Twitter 1.1 APIに対応しました。このAPIには様々な要件があり、ツイートのタイムスタンプ(送信日時)をtwitter.com上の固有のURLにリンクさせる必要があることが含まれています。Tweetbotでは、ツイートの詳細画面を開いてタイムスタンプをタップすると、デフォルトのブラウザでTwitterのウェブサイトが自動的に開くようになりました。操作性という点では、この変更は気に入っています。Google Chromeでワンタップでツイートを開けるようになったからです。
昨夜のアップデートについて考えていたところ、次のことに気づきました。
- 私と私のチームは日常のコミュニケーションに iMessage を使用しています。
- 私たちが共有する URL の大部分は Twitter の URL です。
- 私たちは皆、iOS と OS X で Tweetbot を使用しています。
- ブラウザへのアクセスが容易になると、ブックマークレットのトリガーも容易になります。
- 下書きは iMessage にアクセスできます。
そして私は次のように結論しました。
- パズルのピースを一つ一つつなげていくことができました。
- 他の誰かがこれを有用だと感じ、ワークフローを他の同様のシナリオに適応させてくれることを願っています。
そこで、ブラウザのブックマークレット、Python スクリプト、Drafts アクションを作成して、プロセス全体を自動化し、Twitter の URL をtweetbot://
URL に変換して Pythonista から Drafts にテキストを送信する方法を示しました。
いつものように、以下のワークフローを概念実証として公開します。これはニーズに合わせて変更・調整できます。例えば、Draftsで実行されるアクション、トリガーされるx-successパラメータ、TwitterリンクをTweetbot固有のURLに変換する方法などを変更することができます。
最初のステップは、現在の URL (この場合、Tweetbot から開かれた Twitter リンクである可能性が高い) を取得して Pythonista に送信するブラウザ ブックマーケットです。
コードは次のとおりです。
javascript:window.location='pythonista://TweetbotDrafts?action=run&argv='+encodeURIComponent(document.title)+'&argv='+encodeURIComponent(document.location.href);
ご覧の通り、「TweetbotDrafts」というPythonistaスクリプトを起動し、アプリにウェブページのタイトルとURLという2つの引数を渡して実行するように指示しています。タイトルは必須ではありません(現在スクリプトでは無効になっています)。しかし、必要に応じてワークフローに組み込めるように、ここに追加しました(例えば、ウェブページのタイトルとURLの両方をメッセージで送信する場合など)。1
2 番目のステップは、Python スクリプトそのものです。
import re import sys import urllib import webbrowser import clipboard numArgs = len(sys.argv) if numArgs < 2: url = clipboard.get() else: text = sys.argv[1] url = sys.argv[2] link = re.sub("(?Phttps://.*twitter\\.com/)(?P.+)/(?P(status|statuses))/(?P.+)", "tweetbot://\g/status/\g", url) encoded = urllib.quote(link, safe='') drafts = 'drafts://x-callback-url/create?text=' + encoded + '&action=iMessageIt' webbrowser.open(drafts)
7 行目では、送信された引数の数を確認します。引数が 2 つの場合は、14 行目と 15 行目で認識されます。引数が 1 つの場合は、スクリプトは、それがシステム クリップボードにコピーされたものであると想定します。
Twitterのリンクを「通常のURL」に変換しtweetbot://
、「通常のURL」はそのまま残すことで、Twitterのウェブサイトだけでなく、あらゆるウェブページでこのスクリプトを使用できるようにします。Don Southardが作成した正規表現を使えば、文字列(twitter.comのURL)の特定の部分を、TweetbotのURLスキームの任意の部分に置き換えることができます。基本的には、以下のようになります。
https://twitter.com/viticci/status/304079202880212996
これは次のようになります:
tweetbot://viticci/status/304079202880212996
…完全に自動です。リンクを受け取った人は、それをクリックしてMac版またはiOS版Tweetbotでそのツイートの詳細画面を開くことができます。リンクを変換する必要がなかった場合は、ブックマークレット(およびスクリプト)をTwitter以外のWebページから起動したことを意味します。そのため、置換は必要ありません。
20行目ではリンクをURLエンコードしてDraftsで使えるように準備します。22行目ではDraftsのURLを構築し、「iMessageIt」アクションを呼び出します。最後に、24行目ではDraftsを起動し、先ほど処理したURLを渡します。
Drafts は最後のステップであり、最もパーソナライズできる部分です。iMessage でリンクを送信していますが、別の Drafts URL アクションを作成して、リンクを Dropbox や Evernote にアップロードしたり、他のアプリや Drafts がサポートする他のサービスに送信したりすることもできます。
このカスタムアクションは、Draftsの組み込みメッセージアクションをトリガーし、メッセージが送信された後にTweetbotを再度開くようにアプリに指示するだけです。上記のスクリプトで動作させるには、このアクションの名前を「iMessageIt」にしてください。
drafts://x-callback-url/create?text=[[draft]]&action=Message&x-success={{tweetbot://}}
このアクションの準備が整うと、Drafts は Pythonista からリンクを受信し、リンクが既に入力されたメッセージパネルを表示します。残念ながら、現時点では「宛先」フィールドに特定の連絡先を入力することはできません。つまり、アドレスを手動で入力する必要があります。Greg Pierce 氏には、ユーザーが何らかの方法でメッセージアクションのデフォルトの受信者を指定できるオプションを検討していただければ幸いです。
まとめると、このスクリプトの目的は以下のとおりです。Tweetbot で単一ツイートを簡単に開けるという私の評価を活かし、ブックマークレットを使ってウェブページのタイトル/URL を取得し、Pythonista に送信します。送信されたリンクが twitter.com へのリンクだった場合、Pythonista はそれを処理して Tweetbot の URL に変換します。これは私が Tweetbot を気に入っているからです。変換後、Pythonista はリンクを Drafts に送信します。Drafts はリンクを受信すると、メッセージパネルを開いて誰かに送信します。送信が完了すると、何も起こらなかったかのように、Tweetbot に戻ります。
最後にもう一つヒントを。Tweetbot に最近、Google Chrome で作成したタブを閉じてタイムラインに戻るオプションが追加されました。今のところ、私のワークフローでは Tweetbot に戻りますが、Chrome で作成したタブは閉じられません。Chrome にタブを残したくない場合は、下書きアクションの最後の URL を に置き換えるだけでgooglechrome://
、そこから(タブを閉じながら)Tweetbot に戻ることができます。
- Pythonista の詳細については、私のオリジナルのレビューをご覧ください。↩︎
追加コンテンツと特典にアクセスする
Club MacStories は 2015 年に設立され、ほぼ 10 年間にわたって毎週独占コンテンツを提供してきました。
毎週、毎月の電子メール ニュースレターから始まったものが、すべての MacStories ファン向けに設計されたメンバーシップ ファミリーに成長しました。
詳細については、こちらおよびクラブの FAQ をご覧ください。
Club MacStories : アプリ、ヒント、自動化ワークフロー、長文執筆、MacStories Unwind ポッドキャストへの早期アクセス、定期的な景品など、盛りだくさんの情報を満載した、電子メールと Web 経由の週刊および月刊ニュースレター。
Club MacStories+ : Club MacStories が提供するすべての機能に加え、アクティブな Discord コミュニティ、クラブの過去のカタログ全体を閲覧するための高度な検索機能とカスタム RSS 機能、ボーナス コラム、多数のアプリ割引などが含まれます。
Club Premier : 上記のすべてに加え、早期に、広告なしで、高ビットレートのオーディオで配信される当社の主力ポッドキャストの拡張バージョンである AppStories+ が含まれます。