iPadのEditorialでiCloudタブを開く方法

iPadのEditorialでiCloudタブを開く方法
iPadのEditorialでiCloudタブを開く方法

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()

スクリプトをニーズに合わせて準備するには、fileLocation14行目の変数を変更するだけです。この変数は、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+ が含まれます。