iSyncを定期的に実行する

705NK(N73)は、iSyncでアドレスブックとiCalの内容を同期できるので、毎日自動的に同期させたいものです。

iSyncを定期的に実行するのはとても簡単です。iSyncはスクリプタブルですので、AppleScriptを定義してcronに登録するだけです。iSyncに同期を指示するスクリプトは、

tell application "iSync" to synchronize

だけでも十分ですが、もし、「Google Calendarから携帯電話(PDA)への一方向iSync」で紹介したようにGoogle CalendarをiCalに取り込んでいる場合は、以下のように、iSyncを実行する前にiCalを起動してGoogle Calendarの最新スケジュールがiCalに取り込まれるようにします。

tell application "iCal" to run
delay 10
tell application "iSync" to synchronize

スクリプトエディタを用いて、上記のスクリプトをアプリケーション形式で適当な場所(~/Library/Scripts/など)に保存します。

後は、上記スクリプトが定期的に実行されるように、crontabコマンドでcronに登録します。

$ crontab -e

crontabの設定変更はviが使われますので、vi特有のキーバインド/コマンドに慣れていない方は予め、viコマンドで練習しておいた方がいいでしょう。

crontabで設定する形式は、「分 時 日 月 曜日 コマンド」です。例えば、毎日夜22:00に同期させたい場合は以下のような設定になります(crontab書式の詳細はmanページcrontab(5)を参照)。

 0 22 * * * open /Users/foo/Library/Scripts/iSyncDevices.app

openコマンドは、CocoaやCarbonで作られたMac OS Xのアプリケーションをコマンドラインから実行するためのものです。openコマンドの引数はあなたがスクリプトを保存した場所で置き換えてください。

また、crontabの設定をGUIで編集するCronniXというアプリケーションもあるそうです。

| | コメント (0) | トラックバック (0)

iTunes Storeのトップソングを自動再生する

iTunesのTipsをまとめている「iTunes for Macまとめ」というサイトで、iTunes Storeのトップソングを順次自動再生してくれるAppleScriptを見つけました。

上記のサイトで紹介しているスクリプトが若干古いようで、iTunes 7ではうまく動きませんでしたが、以下のようにスクリプトを若干修正することで問題なく動くようになりました。

global theStopFlag

on run
  set theStopFlag to false
  tell application "iTunes"
    open location "itms://phobos.apple.com/WebObjects/MZStore.woa/wa/viewTop?id=1000&popId=1"
    say "Welcome to iTunesMusicStore Japan. Today's top 100."
    delay 0.5
    repeat with i from 1 to 100
      say "today's number" & i
      play
      repeat until (player position ≥ 29)
        delay 0.5
        if theStopFlag is true or player state is not playing then error number -128
      end repeat
      pause
      next track
    end repeat
  end tell
end run

on quit
  tell application "iTunes" to stop
  set theStopFlag to true
end quit

また、このスクリプトは、iTunes Storeで購入前の任意のアルバムを全曲流して聞くことができるように汎用化できます。その場合は、まず、AppleScriptユーティリティ.appで、「メニューバーにスクリプトメニューを表示」にチェックをつけて、スクリプトメニューを有効にします。

Applescriptutility

次に、iTunesを手前に表示した状態で、スクリプトメニューから、「スクリプトフォルダを開く>iTunesスクリプトフォルダを開く」を選択します。

Scriptmenu1_1

この操作によって、ディレクトリ~/Library/Scripts/Applications/iTunes/が作成されます。このディレクトリに、以下のスクリプトを「スクリプトエディタ.app」を用いて、スクリプト形式で保存してください。

on run
  tell application "iTunes"
    play
    repeat with i from 1 to 100
      repeat until (player position ≥ 29)
        if player state is not playing then play
        delay 0.5
        if player state is not playing then error number -128
      end repeat
      pause
      next track
    end repeat
    stop
  end tell
end run

iTunesを手前に表示したときに、先ほど保存したスクリプトのファイル名がスクリプトメニューに現れるようになりますので、簡単にiTunes Storeの任意のアルバムの全曲を自動再生することができるようになります。

Scriptmenu2_1

| | コメント (0) | トラックバック (0)

.weblocファイルを.urlファイルに変換する

皆さんはWebページのブックマークをどのように管理されていますか。

私はWindows環境との共有を考慮して、urlファイルで管理しています。初期のMac OS Xのデフォルト・ブラウザはInternet Explorer (IE)だったので、ブラウザ上部のURL左のアイコンをFinderウィンドウにドラッグ&ドロップするとこのurlファイルが作成されます。urlファイルは以下のような形式のデータファイルです。

$ cat Google.url 
[InternetShortcut]
URL=http://www.google.com

このurlファイルはWindows環境と互換性があり、ダブル・クリックで目的のWebページを表示することができます。

1ファイル=1URLのブックマークの管理は、Finderウィンドウへのドラッグ&ドロップだけですし、urlファイルが多くなってもFinderの検索やfindコマンドで簡単に探し出すことができます。また、Windows環境でもまったく同じ操作でブックマーク管理が行えます。そのためブックマーク管理方法としては、とてもシンプルでクロスプラットフォーム環境でうまく機能していました。

ところが、Macのデフォルト・ブラウザがSafariになると問題が発生しました。SafariでURL左側のアイコンをFinderウィンドウにドラッグ&ドロップしたときにできるファイルは、拡張子が.weblocのファイルになってしまいました。しかも、この.weblocファイルは中身のないサイズ0のファイルです。

$ ls -l Google.webloc 
-rw-r--r--   1 foo  wheel  0 Aug 20 16:08 Google.webloc
$ cat Google.webloc
$

.weblocファイルは中身がないのにどうやってURLを記憶しているのでしょうか?

実は、.weblocファイルの情報はMacのHFS+ファイルシステム特有のリソース・フォークに保存されているのです。ファイルのリソース・フォークを取り出すには、ファイル名の後ろに仮想パス"/rsrc"をつけます。リソース・フォークはバイナリの構造化データですので、stringsコマンドでフィルタしてあげると、以下のように、きちんとURLが記録されているのが分かります。

$ strings Google.webloc/rsrc
TEXT
url
urln
http://www.google.com
http://www.google.com
Google
drag
"url
.TEXT
:urln
Google.webloc
Google.webloc
Google.webloc
Google.webloc

Mac OS Xになって、リソース・フォークはなくなっていくものだと思っていましたが、Appleはまだまだリソース・フォークを使い続けるつもりのようです。リソース・フォークはHFS+ファイルシステムに特有の機能ですが、HFS+ではない他のファイルシステムでもリソース・フォークを扱えるようにしています。例えば、FAT32のファイルシステムをMacにマウントし、SafariのURLアイコンをドラッグドロップすると、以下のようにファイル名の先頭に"._"がついた隠しファイルが作成されます。この先頭が"._"のファイルがリソース・フォークになっており、HFS+の場合と同様のデータが取得できます。

$ ls -a
._Google.webloc
Google.webloc

$ strings ._Google.webloc
TEXT
url
urln
http://www.google.com
http://www.google.com
Google
drag
"url
.TEXT
:urln
Google.webloc
Google.webloc
Google.webloc
Google.webloc

MacとWindowsの相互運用を考えた場合、Windowsでは扱えないリソース・フォークに頼った.weblocファイルを.urlファイルに変換した方が良さそうです。幸い.urlファイルは、今でもSafariで正しく開くことができます。

以下のシェル・スクリプトは.weblocファイルを.urlファイルの形式に変換するものです。

#!/bin/sh

if [ $# -lt 1 ]; then
  echo Usage: `basename $0` "file1.webloc" "file2.webloc" ...
fi

for i in "$@"
do
  url_name="`echo "$i" | sed 's/.webloc/.url/g'`"
  rsrc_file="`dirname "$i"`/._`basename "$i"`"
  if [ -f "$rsrc_file" ]; then
    rsrc="$rsrc_file"        # non-hfs file system
  else
    rsrc="$i"/rsrc           # hfs file system
  fi
  # extract url.
  url=`strings "$rsrc" | grep http | sed 's/^.//' | head -1`
 
  # make url file.
  cat << EOF >$i
[InternetShortcut]
URL=$url
EOF
 
  # remove unnecessary resource part on non-hfs file system.
  if [ -f "$rsrc_file" ]; then
  rm "$rsrc_file"
  fi
  mv "$i" "$url_name"
 
  echo "Conversion completed and saved as:"
  echo "$url_name"
  echo ""
done

上記のスクリプトファイルをwebloc2urlというファイル名で保存し、chmodで実行権を与えると、以下のように簡単にurlファイルに変換できます。

$ webloc2url Google.webloc

ただし、urlファイルをダブルクリックしてSafariで表示しようとした場合、必ず新しいウィンドウを開いてしまいます。また、Firefoxをデフォルトブラウザにしている場合、Mac版のFirefoxはurlファイルを認識してくれません。このような場合は、以下のAppleScriptをスクリプトエディタを用いてアプリケーション形式で保存し、urlファイルがこのAppleScriptアプリケーション経由で開かれるようにするとよいでしょう。

on open theFiles
repeat with theFile in theFiles
do shell script "cat " & quoted form of POSIX path of theFile & " | grep '^URL=' | sed 's/URL=//'"
set theURL to the result as text
tell application "Finder"
open location theURL
end tell
end repeat
end open

全てのurlファイルがこのAppleScript経由で開かれるようにファイル拡張子の関連付けを変更するには、Finder上で適当なurlファイルの「情報をみる」ウィンドウを表示し、「このアプリケーションで開く」を上記のAppleScriptアプリケーションに変更した後、「全てを変更...」ボタンを押します。

Finderinfoopenurlall_2

| | コメント (5) | トラックバック (0)

その他のカテゴリー

applescript | book | camcorder | development | english | iphone | ipod | java | linux | mac | solaris | 携帯