Archive for 3月, 2010

2010/03/31 iTunes 9.1で用語辞書に変更アリ

iTunes 9.1がリリースされました。iPadのサポートが主な内容とのことですが、AppleScript用語辞書にも一部(だけ)変更が加わっています。

playlistのspecial kind属性の値が、

 Audiobooks → Books
 Videos → TV Shows

にそれぞれ変更されました。また、Genius、iTunes U、Libraryといった属性値が追加されています。

itunes91.jpg

2010/03/31 Mac OS X 10.6.3 UpdateでAS系のバグを修正

ソフトウェアアップデート経由でMac OS X 10.6.3(Build 10D573)アップデートが公開されました。

10.6.3ではAppleScriptからFinderに命令を出した時の速度低下、ひいてはAppleEvent Timed Outになってしまう現象が解消されたとのこと。スピードはたしかに10.6.2に比べて向上。

ただ……まだ、マイナーなバグは散見されています。Finder系のScriptを試していますが、そんなに自慢するほどには速くなっていないような気が(ーー;;

2010/03/30 次期SilverlightでAppleScriptのサポートが現実のものに?

The Registerが報じるところによると、次期SilverlightでWindows版はCOMが、Mac OS X版はAppleScriptとshell commandのサポートが行われるとか。以前にもそういう噂は聞いていましたが……本気でやるようですね(ーー;;

うーーん(ーー;;

かなり微妙というか、Eclipse上で開発する必要がありそうなのでその辺がかったるい気がします。Xcode上でSliverlightの開発が行えるのであればよいのですが……。

あと、セキュリティをどうやって確保するかが問題です。WebサーバーからダウンロードしたSilverlightのコンテンツが、勝手にAppleScript経由でローカルのアプリケーションにアクセスしまくりというのでは……とても怖くてWebが見られません。

Silverlightの開発チームと直接話ができるとよいのですが……。

2010/03/30 Skim 1.3.5でsave命令のオプションが変更に

オープンソースのPDFビューワーなのになぜかAppleScript系の機能が充実している「Skim」

skim0.jpg

バージョン1.3.4から1.3.5へのアップデート時に、例によってAppleScript用語辞書をHTMLに書き出してdiff(Apple謹製のFileMerge。Xcode Toolsに入っている)で差分チェックを行ってみたところ、saveコマンドのオプションに変更が行われたことが明らかになりました。

実際にサンプルを書いて本当に使えるかどうかチェックしてみないと「使えるようになった」と結論づけることはできませんが、dviファイルといえば……TeX(テフ)ですか(汗) 使ったことはありませんが、昔……工学部の友人たちがこれでレポートを書かされて苦労していました。今はWordなどで提出できるようですが…………

skim1.jpg
▲FileMergeで差分チェックを行った結果

skim2.jpg
▲Skim 1.3.5のAppleScript用語辞書

2010/03/30 SHA-1 digestを求める

SHA-1 digestを求めるAppleScriptです。

Mac OS X標準装備のシェルコマンド「openssl」を使って、指定ファイルのSHA-1チェックサム(という呼び方でいいのかな?)を取得します。

つまり、SHA-1の値が同じファイルは同一の内容であることが期待できるわけで……各種ダウンロードファイルの同一性を保証するようなケースでSHA-1の値が記載されているような場合が多いようです。

AppleScriptによる処理では、たとえばサーバー間でファイル(大きいファイル)を転送するような場合に、ファイルの内容を間違いなく転送できたかどうか検証するため、転送前にSHA-1の値を計算しておき、転送後にも値を求めて同一性を保証する……というような使い方をしています(個人的に)。

あとは、プログラム等のデータをZipアーカイブでFTP納品するような時に、SHA-1の値をメールで相手側に知らせておき、内容に間違いがないことを確認するような用途でしょうか。どちらかといえば、こちらの方で使うケースが多いようです。

スクリプト名:SHA-1 digestを求める
–ファイル選択
set theItem to choose file
set aRes to calcSHA1(theItem) of me

–> “e869a6d125c38c4417691573cfc291597f50df53″

–SHA-1 digestを求める
on calcSHA1(aFile)
  set aRes to do shell script “/usr/bin/openssl sha1 “ & quoted form of the POSIX path of the aFile
  
set anOffset to offset of “)= “ in aRes
  
if anOffset = 0 then return false –エラー時
  
set bRes to text (anOffset + 3) thru -1 of aRes
  
return bRes
end calcSHA1

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2010/03/27 DiskWarriorでHDDのハードウェアチェックを行う

Mac OS X用ディスク修復ソフトDiskWarriorでHDDのハードウェアチェックを行うAppleScriptです。

diskwarrior1.jpg

ディスク修復ソフトとひとことに言っても、それぞれに得意/不得意があり……DiskWarriorが長けているのはディレクトリ修復。ディレクトリ修復を定期的に自動実行できるようなプログラムを走らせられるかどうかが、DiskWarriorのAppleScriptによる自動処理が使い物になるかならないかの判断基準になりそうです。

また、ターゲットマシンのHDDの修復を行う場合には、他のマシンにTarget Disk Modeでマウントして、他のマシン側でDiskWarrior+AppleScriptを走らせるとか、外付けHDDからブートしてチェックを行うといった必要もあることでしょう。

diskwarrior2.jpg

スクリプト名:DiskWarriorでHDDのハードウェアチェックを行う
tell application “DiskWarrior”
  test disk device disk “Macintosh HD”
  
–> pass
  
  
test disk device disk “Cherry2″ –存在しないHDD名称
  
–> error “DiskWarrior でエラーが起きました:Could not match a disk to a supported hard drive device. Only ATA disks are supported.” number -1708 from disk “Cherry2″
  
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2010/03/27 DiskWarriorで各種情報を取得する

Mac OS X用のHDD修復ソフトDiskWarriorはAppleScriptに対応しており、HDDのチェック機能をAppleScriptから呼び出すことができるようになっています。

diskwarrior3.jpg
▲DiskWarrior 4.2JのAppleScript用語辞書

ディスク別に媒体チェック、ファイル単位のチェック、ディレクトリ構成の再構築が行えるはずですが……例によって実際に試してみないと(本当に使えるかどうかは)分かりません。

スクリプト名:DiskWarriorで各種情報を取得する
tell application “DiskWarrior”
  busy
  
–> false
  
  
last result
  
–> 0  
  
  
ready
  
–> true
  
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2010/03/26 現在編集中のXcodeプロジェクトのビルドターゲットが生成したpreferenceファイルを削除する v2

Xcode上で編集中のプロジェクトのビルドターゲットがテストラン時に生成したplistファイルを削除するAppleScriptです。Xcode 3.1.4をターゲットに作成したものですが、Xcode 3.2.xでも多分動くことでしょう。

AppleScriptによるXcodeの自動化というのは、本当にやりたい処理があってもXcodeのAppleScript対応機能が不十分で実装できないことが多くて実現できないケースが多いのですが……このケースではキレイにできました。Xcodeの単純なプロジェクト(ビルドターゲットが1つだとか、一般的なデスクトップアプリケーションのプロジェクトだとか)向けに作ったので、プラグインとかkextとかのプロジェクトまでは考慮していません。

AppleScriptからXcodeに問い合わせてプロジェクトのタイプなども取得できるとよいのですが……そういう「実践的な機能」というのが載ってこないのがXcodeのAppleScript辞書の不思議なところです。絶対に、AppleScriptの記述経験がほとんどないエンジニアが実装を行わされているに違いない、と思わせるものがあります。

Xcode(AppleScript StudioとかAppleScriptObjC)でプログラムを組んでいて、テストラン時に生成されたplistファイルが邪魔になってきちんと動作検証できないケースがあります。本来はうまく動いてはいけないものが、過去にテストランしたときのplistファイルが残ってしまっていたために「動いてしまった」とか。

そのため、plistファイルを手でいちいち消していました。Xcodeのクリーンコマンドは、ビルドフォルダ内のファイルは消去してくれますが、plistファイルは消してくれません。割とよく使う処理だったので、AppleScriptで自動化してみました。なにげに便利です。

スクリプト名:現在編集中のXcodeプロジェクトのビルドターゲットが生成したpreferenceファイルを削除する v2
–現在編集中のXcodeプロジェクトのパス情報を取得
tell application “Xcode”
  tell project 1
    set projPath to real path
  end tell
end tell

–現在編集中のプロジェクトに含まれるInfo.plistファイルを検出
set projPath to POSIX file projPath

tell application “Finder”
  set parantFol to (folder of file projPath) as alias
  
tell folder parantFol
    set infoP to exists of file “info.plist”
    
if infoP = false then
      display dialog “現在編集中のプロジェクトにはInfo.plistが入っていません。” buttons {“OK”} default button 1 with icon 1
      
return
    end if
  end tell
end tell

–Info.plistファイルからバンドル情報を取得する
set pListPath to (parantFol as string) & “Info.plist”
tell application “System Events”
  set vRec to value of property list file (pListPath as string) –plist fileから値を読み取る
end tell
set infoRes to |CFBundleIdentifier| of vRec

–plistファイルを消す
set aPath to (path to preferences from user domain) as string
set infoPlistPath to aPath & infoRes & “.plist”

try
  do shell script “rm -f “ & quoted form of POSIX path of infoPlistPath
  
tell application “Xcode”
    activate
    
display dialog “plistファイルを消去しました” buttons {“OK”} default button 1 with icon 1
  end tell
on error
  tell application “Xcode”
    activate
    
display dialog “plistファイルの消去に失敗しました” buttons {“OK”} default button 1 with icon 1
  end tell
end try

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2010/03/26 リストから指定のアイテムを削除する

リストから指定のアイテム(複数)を削除するAppleScriptです。

以前に同様の機能を実装したことはありましたが、作ったのが昔すぎて「なんでこんなに巨大なプログラムつくっちゃったの?」というぐらい複雑なものになっていました。

ゼロから書き直したら、数分で出来上がり……行数は大幅に短くなり……元のプログラムを見ると「一体何をやっていたんだろう?」というぐらいのあっけないものになりましたが、まーそんなもんです。

スクリプト名:リストから指定のアイテムを削除する
set aList to {{1, 2, 3}, {2, 3, 4}, {3, 4, 5}, {4, 5, 6}, {5, 6, 7}}
set delList to {1, 2, 3}

set bRes to delListItems(aList, delList) of me
bRes
–> {{4, 5, 6}, {5, 6, 7}}

–リストから指定のアイテムを削除する
on delListItems(aList, delList)
  set newList to {}
  
set itemCounter to 1
  
  
repeat with i in aList
    if itemCounter is not in delList then
      set j to contents of i
      
set the end of newList to j
      
    end if
    
set itemCounter to itemCounter + 1
  end repeat
  
  
return newList
  
end delListItems

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2010/03/18 pdfinfoの結果をparseするv3

2010/03/17 m2TVの録画ライブラリ情報を取得する

アイ・オー・データ機器のUSB地デジチューナー「m2TV」の録画ずみライブラリの情報を取得するAppleScriptです。

m2TVアプリケーションがAppleScript側に提供している機能は、番組録画予約だけですが、m2TVアプリケーションのライブラリ情報ファイル(plist形式)にAppleScriptから直接アクセスすることで、ご覧のようにライブラリ情報を取得しています。

スクリプト名:m2TVの録画ライブラリ情報を取得する
set aRes to getM2TV_LibData() of me
–>
(*
{{eventDate:date “2010年3月3日水曜日 21:00:00″, durationSeconds:3240, sName:”テレビ朝日”, pTitle:”相棒8 #18”, eDesc:”警視庁一の異端児・杉下右京(水谷豊)と突如特命係に左遷された神戸尊(及川光博)。尊は上層部からの命で右京を調査するため特命係へ。この新しい相棒から目が離せない!”, eDetail:”

【番組内容】
第18話『右京、風邪をひく』
山中で他殺体が発見された。捜査一課の伊丹は被害者の近所に住むジュン(東風万智子)が怪しいと睨み事情をきくと犯行を自供。鼻高々の伊丹だが右京(水谷豊)と尊(及川光博)は何故か微笑み合う。自供の裏にはもうひとつの事件があった!

【出演者】
水谷豊・及川光博・益戸育江
川原和久・大谷亮介・山中崇史・山西惇・六角精児

【ゲスト】
東風万智子・滝直希

【スタッフ】
●脚本:古沢良太
●監督:東伸児
●ゼネラルプロデューサー:松本基弘(テレビ朝日)
●プロデューサー:伊東仁(テレビ朝日)・西平敦郎(東映)・土田真通(東映)

【音楽】
池頼広
※相棒8オリジナル・サウンドトラック好評発売中!

【おしらせ】
右京ティーカップ絶賛発売中!
PCサイトと携帯サイトも充実!
PC: http://www.tv−asahi.co.jp/aibou/
携帯:メニュー ⇒ テレビ ⇒ テレビ朝日 ⇒ 相棒”}}
*)

–m2TVの録画ライブラリ情報を取得する
on getM2TV_LibData()
  set docFol to (path to documents folder) as string
  
set prgFilePath to docFol & “MacTV:MacTVLibrary.plist”
  
  
–設定ファイルが存在しなければリターン
  
tell application “Finder”
    set aRes to exists of file prgFilePath
  end tell
  
if aRes = false then return
  
  
–m2TVの録画ライブラリ情報ファイルから部分的に情報を読み込む
  
set prefsFile to prgFilePath as alias
  
tell application “System Events”
    set prgList to {}
    
    
set vRec to value of property list file (prefsFile as string) –plist fileから値を読み取る
    
repeat with i in vRec
      set j to contents of i
      
      
set eDate to eventDate of eventInfo of j
      
set stationName to station of j
      
set progTitle to |title| of j
      
set aDuration to eventDuration of eventInfo of j
      
set eventDescDat to eventDesc of eventInfo of j
      
set eventDetail to eventDetails of eventInfo of j
      
      
set the end of prgList to {eventDate:eDate, durationSeconds:aDuration, sName:stationName, pTitle:progTitle, eDesc:eventDescDat, eDetail:eventDetail}
      
      
    end repeat
  end tell
  
  
return prgList
  
end getM2TV_LibData

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2010/03/16 m2TVの録画スケジュール情報を取得する

アイ・オー・データ機器のUSB地デジチューナー「m2TV」でテレビ録画予約情報を取得するAppleScriptです。

m2TVのアプリケーション自体には、AppleScriptには指定時間帯/チャンネルの録画依頼機能しか開放されていません。録画予約を行っても、それが実際に予約されたのかどうかという結果も返ってきません。true/falseぐらいは返ってきてほしいものです。

そこで、m2TVアプリの設定ファイルをAppleScriptで直接読み込むテストを行い、録画スケジュール情報を取り出してみました。ご覧のとおり、情報を取得できています。

録画予約を行った後に、本ルーチンを併用して録画予約が確実に行えたかを確認することもできますし、録画予約を行う前に予約状況を確認することも可能です。

あとは、1週間分のTV番組表からiEPGの録画予約ファイルをすべてダウンロードし、AppleScript側で自力で番組表データをリストに仕上げ、さまざまなクエリーで検索できるようにするとよいでしょう。そのようなルーチンがすでに存在しているといいのですが……。

スクリプト名:m2TVの録画スケジュール情報を取得する
set aRes to getM2TV_recSchedule() of me
–> {{sDate:date “2010年3月16日火曜日 22:25:00″, eDate:date “2010年3月16日火曜日 22:50:00″, durationSeconds:1500, sName:”NHK教育・東京”, pTitle:”知る楽 歴史は眠らない“貧困”国家 日本の深層 第3回「見えなくなった貧困」”}, {sDate:date “2010年3月17日水曜日 0:59:00″, eDate:date “2010年3月17日水曜日 1:29:00″, durationSeconds:1800, sName:”日本テレビ”, pTitle:”レコ☆Hits!”}}

–m2TVの録画予約スケジュールを取得する
on getM2TV_recSchedule()
  set docFol to (path to documents folder) as string
  
set prgFilePath to docFol & “MacTV:MacTVSchedule.plist”
  
  
–設定ファイルが存在しなければリターン
  
tell application “Finder”
    set aRes to exists of file prgFilePath
  end tell
  
if aRes = false then return
  
  
–m2TVの録画情報ファイルから部分的に情報を読み込む
  
set prefsFile to prgFilePath as alias
  
tell application “System Events”
    set prgList to {}
    
    
set vRec to value of property list file (prefsFile as string) –plist fileから値を読み取る
    
repeat with i in vRec
      set j to contents of i
      
set startDate to |start| of j
      
set endDate to |end| of j
      
set stationName to station of j
      
set progTitle to |title| of j
      
set aDuration to eventDuration of eventInfo of j
      
set the end of prgList to {sDate:startDate, eDate:endDate, durationSeconds:aDuration, sName:stationName, pTitle:progTitle}
    end repeat
  end tell
  
  
return prgList
  
end getM2TV_recSchedule

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2010/03/11 FileMaker Pro v11 AppleScript用語辞書に変更なし

満を持して発表されたFileMaker Pro v11。お試し版もダウンロードできるようになっているので、さっそくAppleScript用語辞書を確認。

……v10.5から変更された点は皆無でした。FileMaker Proもv7で若干の変更が加わったほかはまったく機能に変化がなく、もう少し何かできてもいいような気もするのですが……。

fm11.jpg

2010/03/09 「AppleScriptの穴」、気がつけば3年目

2008年の3月9日に唐突に開始した本Blogも、気がつけば3年目に突入していました。

Googleで「AppleScript」という単語と何かを組み合わせると必ず1ページ目に出てくる本Blogも、コメントは両手両足で足りるぐらい。スパムは記事の数よりも多く……という、反響があるんだかないんだかよく分からない存在ですが、ぼちぼち続けていこうかというところです。

近々、本Blogをホスティングしているレンタルホスティング業者がDisk容量の増量を行ってくれるらしいのですが、その際にWordPressのバージョンが上がってしまうのではないかと懸念しています。

WordPress 2.8を別のBlog(本サイトの裏サイトのInDesignとかIllustratorのScriptしか載っていないサイト)で試したら、長いプログラムリストを掲載しようとすると、投稿用のインタフェース(AJAXベース?)がクラッシュしてしまい掲載できませんでした。

ユーザーインタフェースがリッチになって使いやすくなっている反面、長い文章やプログラムリストを入れるとクラッシュ(ーー;; なかなか勘弁してほしいものがあります。

Disk容量の増量時に(サーバー移転などで)従来どおりのバージョンのWordPressが使えなくなるとなかなかピンチです。

2010/03/09 AppleScriptによるTwitter関連ライブラリ「ASTwitterLibrary」

Collin Henerson氏によるTwitter関連のAppleScript集「ASTwitterLibrary v1.4」を見つけました。

ダウンロードしたら、以前にダウンロードしたものがすでに手元にあり、再発見というべきなのかもしれませんが、とにかく「自分で書くのは面倒だが、どうしたものか」と思っていたところだったので、利用させていただきましょう。

このライブラリ、ダウンロードすると……

astwitter.jpg

こんな感じになっていて、ソースも読むことができるようになっています。カスタムアイコンがついているので、

astwitt2.jpg

アプリケーション形式にでもなっているのかと思ったら、ただ単に「カスタムアイコンがついた普通のAppleScript書類」でした。

用意されているサブルーチン(ハンドラ)は、以下のとおりです。

postTweet(theUser, thePassword, theMessage)
sendDirectMessage(theUser, thePassword, theRecipient, theMessage)
getdirectmessages(theUser, thePassword, showDate)
getTweets(theUser, theCount)
getTimeline(theUser, thePassword)
getMentions(theUser, thePassword)
getFavourites(theUser, thePassword)
getStats(theUser)
getName(theUser)
getLocation(theUser)
getURL(theUser)
getBio(theUser)
getTrending()
getFollowers(theUser)
shortenURL(theURL)
getRSSID(theUser)
postPicture(pathToPic, theUser, thePassword, theMessage)
postVideo(pathToVid, theUser, thePassword, theMessage)
encodeURL(someURL)

実際に、

set aRes to getFollowers(”piyomaru”) of me

などとやってみると……きちんと結果が返ってきます。ちょっと処理が遅いようなので、AppleScriptの高速化手法を叩き込んでみると10倍ぐらいは速くなると思うのですが、現状のままのほうがビギナーには分かりやすそうなので、微妙なところです。

作者によれば、

If you would like to donate to this project to aid in continuing development click here. Thanks so much!

とのことで……PayPal経由での寄付を募っています。

2010/03/08 Twitterrificを使って、特定のアカウントの発言を監視

Twitterrificを使って、特定のアカウントの発言内容を監視するAppleScriptを作成しました。

Twitter経由で自宅のMacに命令を送ってテレビ録画を……などと考え、TwitterクライアントでAppleScript対応のTwitterrificをコントロール。自宅のMacにTwitterrificをインストールして、適宜自動処理用のTwitterアカウントを取得。Twitterrificが動作するようになったら、監視対象のTwitterアカウント(自分)をフォローするようにして、外でのTwitter経由の発言が自宅マシンでも見えるようにしておきます。

本Scriptの中に、

property masterAccount : “piyomaru”

という行があり、これが監視対象の(自分の)Twitterアカウントです。とりあえず、このあたりを書き換えていただいて、本Scriptを「アプリケーション」形式で保存。その際に、「実行後、自動的に終了しない」をチェックしておきます。

これで、本Scriptは10秒間隔でTwitterrificに問い合わせを行い、「#m2tv」の文字列を含む監視対象アカウントの発言が流れて来ないか、監視します。

条件に合致する発言があれば、その内容をそのまま発言者にエコーバックするようにしています。

twitterific1.jpg

実際には、このエコーバックした後にコマンド解釈部を入れて、さまざまなコマンドを実行させるようにするとよいでしょう。

ただ……実際に動かしてみて分かったのですが、Twitterrificが3分間隔でTwitterにアクセスするため、最悪の場合にはコマンドを送って返ってくるまで6分ぐらいかかることになり……Twitter経由でTV録画予約はできないことはないですけれども、ほかの手段を考えるかTwitterrific以外のアクセス手段を検討したほうがよさそうです(自前でTwitterへのアクセスプログラムをAppleScriptで作ったほうがよさそう)。

スクリプト名:twittEcho v2
property idleTime : 10
property idleF : false
property lastTweet : ""
property lastTweetDate : ""

property masterAccount : "piyomaru" –監視対象のアカウント

idleMain(true) of me

repeat
  idleMain(false) of me
  
delay 5
end repeat

on idleMain(initF)
  tell application "Twitterrific"
    set aList to every tweet whose screen name = masterAccount and text of it contains "#m2tv"
    
if aList is not equal to {} then
      set anItem to contents of first item of aList
      
set thisPostDate to date of anItem
      
      
      
–初期化フラグをtrueにして呼んだ場合には、処理に必要な変数の初期化のみ行ってリターン
      
if initF = true then
        set lastTweetDate to thisPostDate
        
return
      end if
      
      
      
if thisPostDate is not equal to lastTweetDate then
        
        
set lastCommand to text of anItem
        
        
try
          with timeout of 30 seconds
            post update ("@" & masterAccount & " (echo)" & lastCommand)
            
            
if lastCommand contains "beep" then
              say "Message from twitter"
            end if
          end timeout
        end try
        
        
set lastTweetDate to thisPostDate
      end if
    end if
  end tell
end idleMain

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

2010/03/05 m2TVで録画予約(2)

アイ・オー・データ機器さんからお借りしたMac OS X用USB地上波デジタルチューナー「m2TV」で、指定の番組の録画予約を行うAppleScriptです。

とりあえず、使い回しができる程度の汎用性を持たせたサブルーチンに仕立ててみました。実用上、最低限のレベルのルーチンです。

m2TVがAppleScript側に解放している機能は、開始時刻、終了時刻、録画日、放送局名などを具体的に指定して録画予約を実行するというものです。本来あることが期待される、録画予約のキャンセルや、録画番組の衝突などのチェックは行えません。メールで録画予約ができるといっても、1文字間違えただけで録画予約が却下されるなど、非常に注意力が要求されるレベルのものです。

そこで、AppleScript側で番組録画予約の管理を行い、番組の終了時刻を調べて自動で補うようにし、番組名をフルネームで書かなくても予約できるようにするなど……よりあいまいな内容で録画予約できるようにすると便利そうです。

また、メールで録画したとしても、送信したコマンドの内容が間違っていたとか、きちんと予約できたといった結果をメールで返すようになっていなければ実用性がいまひとつです。このあたりも、AppleScript側で管理するとよさそうです。

さらに、メールだけでなくiChatやTwitterなどで録画予約ができれば鬼に金棒。Twitter用のコマンド監視Scriptもすでに試作しているため、このあたりはさっくりできそうです。

ユーザー的に、この手の製品に一番期待してしまうのが「iPodやiPhoneで録画した番組を見る」ことだったりするわけですが、現状ではそのあたりの機能はm2TV(のソフトウェア)には用意されていません。「録画→iPod/iPhone向けに変換→iTunesに登録」といったフローが実現できると魅力的なソリューションになると思われます。また、その際にAppleScriptと連携することで、より少ない労力で実現できることでしょう。

m2TVそのものの話になりますが……m2TVのアプリケーションには、(プロ野球の中継が延長になるケースなど)録画予約した番組の放映時間が変更になった場合に自動で録画開始/終了時刻を変更する機能があるようですが、AppleScript経由で明示的に時刻を指定して録画予約した番組がこの機能の恩恵に預かれるのか、そのあたり、実際にプロ野球の中継がはじまる時期に、実際に中継が延長されないと実証ができません。

Core 2 Duo 2.4GHzのMacBook ProでTV視聴を行っている場合には動作が安定していましたが、Core Duo 2.0GHzのMacBook ProではときおりTVの絵が止まるような場面に遭遇しています。なんにしても、長期連続動作が可能か実機で検証する必要がありそうです。

スクリプト名:recSample1
set sTime to “0930″
set eTime to “1030″
set stationName to “NHK総合”
set theDate to (current date) + (1 * days)
set theName to “ぴよまるインタビュー”

set aRes to recTVprogram(sTime, eTime, stationName, theDate, theName) of me
–> true

–テレビ録画予約を実行
–(開始時刻、終了時刻、局名、録画実行月/日、番組名
on recTVprogram(sTime, eTime, stationName, theDate, theName)
  set b to month of theDate as number
  
set bb to retZeroPaddingText(b, 2) of me
  
  
set c to day of theDate as number
  
set cc to retZeroPaddingText(c, 2) of me
  
set d to bb & cc
  
  
set rsvInfo to “tv “ & stationName & ” “ & sTime & ” “ & eTime & ” “ & d & “\n” & theName & “\n”
  
  
tell application “m2TV”
    «event 1TVpaddR» rsvInfo
  end tell
  
  
return true
end recTVprogram

–数値にゼロパディングしたテキストを返す
on retZeroPaddingText(aNum, aLen)
  set tText to (“0000000000″ & aNum as text)
  
set tCount to length of tText
  
set resText to text (tCount - aLen + 1) thru tCount of tText
  
return resText
end retZeroPaddingText

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

★プログラムリスト中に「円マーク」の記述がありますが、実際にはバックスラッシュです

2010/03/04 m2TVで録画予約

アイ・オー・データ機器さんから製品をお借りして、さっそくAppleScriptから録画予約する処理を試してみました。

m2tv3.jpg

m2TVの視聴用アプリ「m2TV」は2010/2月末のアップデート(→ ver 1.3.1f7)により、メールから録画予約する機能が追加され……この機能がAppleScriptで提供されていたために「m2TV自体もAppleScriptからコントロールできるのでは?」との期待が高まり、今回のテストを行うこととなりました。

実際に確認してみたところ……視聴/録画アプリケーション「m2TV」にAppleScript用語辞書は用意されていないのですが、生イベントを送ることでAppleScriptから命令を送ることができるようになっていました。用語辞書さえ用意すれば、何らかの命令語でコントロールすることは可能になっているようです。

m2tv1.jpg
▲m2TVの視聴画面

スクリプト名:m2TVで録画予約
–開始時間、終了時間、日付
set rsvInfo to “tv NHK総合 0900 0930 0304
ニュース

tell application “m2TV”
  «event 1TVpaddR» rsvInfo
end tell
–> 0

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

AppleScriptから録画予約を実行し、録画状況をm2TV上で確認してみるとこんな感じです。

m2tv2.jpg

一応、録画予約実行時にリザルトが返ってくるのですが、同じ日の同じ時刻に重複して録画予約を入れてもリザルトの内容は変わりません(そのかわり、録画予約も行われない)。

m2tv4.jpg

▲GUI側から予約内容の詳細について確認したところ

重複があったり録画指定内容に誤りがある場合にはリザルトが変わるとか、そういう動作を期待したいところですが……まずはAppleScript用語辞書をしっかり装備していただくのが先決でしょう。

2010/03/02 AppleScript用語辞書の変更履歴が分かるよう「DICT」メニューを整備中

日常的にやっていることですが……アプリケーションのアップデートがあると、アプリケーションのAppleScript用語辞書をHTMLに書き出して、旧バージョンとの差分を(Apple純正のFileMergeで)とっています。

この、HTML書き出ししたAppleScript用語辞書のストックが膨大な量になっているため、試しにBlogに突っ込んでみました。こうしてWeb公開しておいて役に立つかどうかは、まだ分かりません。

情報量が増えすぎて、すでにWordPressでは管理し切れなくなってきているような……(ーー;