
Editorial から iCloud タブに直接アクセスしたいとずっと思っていたのですが、残念ながら iCloud タブ API がないため、現状ではそれができません。しかし先週、Kevin Marchand 氏の iCloudTabs for Alfred プロジェクトにリンクして、そのワークフローが Python コードで書かれていることを知り、彼のスクリプトを修正すれば、Editorial が常に更新される iCloud タブをテキストファイルから読み込めるようになるかもしれないと気づきました。
以下は、サーバーサイドスクリプトと編集ワークフローを組み合わせて、アプリ内でiCloudタブを読み取って開く方法です。このシステムは正常に動作し、ここ1週間毎日使用していますが、良好な結果が得られています。
いくつかの要件があります:
- Pythonスクリプトをバックグラウンドで実行できるMac。私はHazelを搭載したMac miniを使用しており、Mountain LionとMavericksの両方でテストしました。
- URLでアクセスできるテキストファイルです。このテキストファイルはFTPサーバー、Dropbox、CDNなどに保存できます。編集作業の最後にEditorialからアクセスできるURLがあれば問題ありません。まずはDropboxを使うことをお勧めします。
- iPad用Editorial。Editorial用のワークフローを構築しましたが、これをさらに変更して他のシナリオで使用することもできますが、ここでは説明しません。
念のため補足しておきますが、このスクリプトはiCloudの認証情報には一切アクセスしません。iCloudタブはOS Xの.plistファイルに保存されており、Pythonで読み込み・解析できます。このスクリプトはiCloudに関する情報は一切持ちません。WebページのタイトルとURL、そしてデバイス名を含むファイルを読み込んでいるだけです。
iCloud タブを、後で Editorial のポップオーバーになるテキスト ファイルに変換するために Mac を実行したままにしておける場合は、必要なスクリプトとワークフローが以下にあります。
Pythonスクリプト
このスクリプトはKevinの成果を少し改変したもので、結果をAlfredに渡す代わりに、iCloudタブを行として保存するテキストファイルを作成します。これらの行はEditorial向けにフォーマットされており、ウェブページのタイトルとURLがタブで区切られて含まれています。
#!/usr/bin/python import os import shutil import tempfile import plistlib import json # Based on Kevin Marchand's iCloudTabs project for Alfred # https://github.com/kmarchand/iCloudTabsAlfredWorkflow # Best used in combination with Editorial for iOS # http://omz-software.com/editorial/index.html # The local path of the file that will store and pass URLs to Editorial or other apps fileLocation = '~/Desktop/alltabs.txt' def create_temporary_copy(path): temp_dir = tempfile.gettempdir() temp_path = os.path.join(temp_dir, 'safari_sync_plist_copy.plist') shutil.copy2(os.path.expanduser(path), temp_path) return temp_path # make a temp copy of the plist file temp_plist = create_temporary_copy( '~/Library/SyncedPreferences/com.apple.Safari.plist') # Use plutil to convert binary plist to xml os.system('plutil -convert xml1 %s' % temp_plist) # Use plistlib to convert plist XML to a dictionary info = plistlib.readPlist(temp_plist) # Clean up (delete) temp file os.remove(temp_plist) # Pull out the device elements from the info dict for easier parsing later devicetabs = [] for uid in info['values'].values(): try: devicetabs.append([uid['value']['DeviceName'], uid['value']['Tabs']]) except: pass dev = '' # Create string for text file for i in range(len(devicetabs)): dev += '\n' + '----- ' + str(devicetabs[i][0].encode('utf-8')) + ' -----' for machine in devicetabs[i][1]: dev += '\n' + machine['Title'].encode('utf-8') + '\t' + machine['URL'].encode('utf-8') # Write to file outfile = os.path.expanduser(fileLocation) f = open(outfile, 'w') print >> f, dev f.close()
スクリプトをニーズに合わせて準備するには、fileLocation
14行目の変数を変更するだけです。この変数は、iCloudタブを保存するテキストファイル(「alltabs.txt」)のローカルパスを決定します。デフォルトのパスは「~/Dropbox/alltabs.txt」です。
iOS または OS X で Safari を使っている場合、iCloud タブの便利な点は、ブラウザでタブを閉じたり開いたりするたびに iCloud によってタブが常に更新されることです。私は、このワークフローを自分のワークフローでも再現し、iCloud 対応デバイスすべてから最新のタブセットをテキストファイルに常に保存できるようにしたいと考えました。そのためには、Safari のタブファイル(「~/Library/SyncedPreferences/com.apple.Safari.plist」配下)が変更されるたびにスクリプトを実行し、更新されたタブでテキストファイルを上書きする方法を見つける必要があります。
私のワークフローでは、この作業をHazelに任せています。.plistが変更されるたびに、テキストファイルに新しいタブが追加され、ファイル名が同じなのでURLは変更されません。
編集部からiCloudタブを読む
Editorialでは、アプリが行う必要があるのはテキストファイルから行を読み取ってポップオーバーに表示することだけです。これはわずか6つのアクションで実現できます。
まず、Editorial は iCloud タブがテキストファイル形式でどこに保存されているかを知る必要があります。ワークフローをインストールし、ワークフローエディタを開いて、最初の「変数を設定」アクションをテキストファイルの URL に変更します。ファイルを Dropbox に保存している場合は、ブラウザでテキストファイルの内容を表示できる Dropbox の直接 URL を使用します。Editorial はこれを読み取ることができます。
URLを使用すると、Editorial はシンプルな Python スクリプトを実行してテキストファイルから各タブを読み取り、すべてのタブをポップオーバーに表示できます。ワークフローによって iCloud タブのリストから重複行が削除される点に注目してください。同じ URL が複数のデバイスで開かれている場合、Editorial はそれを 1 つだけ表示します。
ポップオーバーでは、タブは所属するデバイス名の下にタイトルとともに表示されます。Editorialブラウザでタブを開くには、タブをタップするだけです。残念ながら、Editorialには高度なUIツールがないため、リスト内のデバイス名もタップ可能ですが、通常のタブとは区別できるよう目立つようにしました。
まとめ
iCloudタブをファイルに保存してPythonでアクセスする、もっとエレガントな方法もあるでしょう(JSONが思い浮かびます)。しかし、シンプルなテキストファイルでも問題なく高速に動作します。このワークフローをここ1週間使っていて、MacとiPhoneで最初に開いたウェブページを再度開いています。テキストエディタやリサーチ用ブラウザでiCloudタブが使える便利さには本当に満足しています。
上記のワークフローは自由に変更してください。また、これとは異なるワークフローを作成された場合は、ぜひお知らせください。ワークフローはこちらからダウンロードできます。
注: 上のスクリーンショットは、現在テスト中の Editorial のベータ バージョンを示しています。
追加コンテンツと特典にアクセスする
Club MacStories は 2015 年に設立され、ほぼ 10 年間にわたって毎週独占コンテンツを提供してきました。
毎週、毎月の電子メール ニュースレターから始まったものが、すべての MacStories ファン向けに設計されたメンバーシップ ファミリーに成長しました。
詳細については、こちらおよびクラブの FAQ をご覧ください。
Club MacStories : アプリ、ヒント、自動化ワークフロー、長文執筆、MacStories Unwind ポッドキャストへの早期アクセス、定期的な景品など、盛りだくさんの情報を満載した、電子メールと Web 経由の週刊および月刊ニュースレター。
Club MacStories+ : Club MacStories が提供するすべての機能に加え、アクティブな Discord コミュニティ、クラブの過去のカタログ全体を閲覧するための高度な検索機能とカスタム RSS 機能、ボーナス コラム、多数のアプリ割引などが含まれます。
Club Premier : 上記のすべてに加え、早期に、広告なしで、高ビットレートのオーディオで配信される当社の主力ポッドキャストの拡張バージョンである AppStories+ が含まれます。