上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--|スポンサー広告||TOP↑

なんか、「知らなかったのは自分だけ」な気がしないでもないんですが今日初めて気がついたので書いちゃいますよ、ええ。

他人が公開してるスクリプトをこうやって選択してですね……
service060419_1.jpg

"アプリケーションメニュー" > "サービス" > "スクリプトエディタ" > "新規 AppleScript を作成"を実行するわけですよ、それだけです。
service060419_2.jpg

びっくりしますた。
service060419_3.jpg

スポンサーサイト
04/20|AppleScriptコメント(1)トラックバック(0)TOP↑

以下は Mac OS X 10.4.6 上で調べたものです。
環境が違うと結果が異なる可能性があります。

こういう書き方のやつです。

property num : 0

display dialog num
set num to num + 1


変数と同じように使えるけれど変数と違ってスクリプト終了後も値 (上記の場合だと num に代入された数値) が保存される、ということになっているのですがどうもうまくいかないことがあるのでいくつか試してみました。
で、だいたい雰囲気はつかめました。「だいたい」なのでとりあえず箇条書き。

  • 実行の方法による違い
    • スクリプトメニューから実行すると num に代入された数値 (以下値) がスクリプトファイル (以下ファイル) のどこかに書き込まれる。このことは実行のたびにファイルの変更日が更新されることで確認できる。
      この場合ログアウト/ログイン や OS の再起動をしても値は保持される。
    • スクリプトエディタ上から実行すると値がファイル以外のどこかに保存される (メモリ?)。
      ファイルを開いているかぎりスクリプトを実行するたびに値は「1,2,3....」と増えていくが、ファイルを閉じると初期値 (0) に戻ってしまう。
    • スクリプトエディタ上で実行して変更された値は、スクリプトメニューから実行するときには継承されない。逆も同じ。つまりスクリプトエディタ上で実行して保存された値と、スクリプトメニューから実行して保存された値は互いに別物で干渉し合わない (試した限りでは)。
      (勘違いでした。コメント欄の MeSH さんのコメントを参照してください)
  • スクリプトメニューから実行してファイルに書き込まれた値が初期値に戻るタイミング
    • スクリプトエディタでファイルを開き変更を加え保存すると値は初期値に戻る。
      変更を保存せずにファイルを閉じれば値は保持される。
    • 内容に実質的な変更がなくてもとにかく「ファイルを保存し直す」という操作があれば初期値に戻る。たとえば改行を加えてからその改行を削除するなども有効。変更してから「取り消し (command+z)」を行って「保存」メニューがグレーになっている場合はファイルを閉じても値は保持される。
    • ファイル名を変更しても値は保持される。
    • ファイルの階層が変わっても値は保持される。
  • ファイルを別ユーザに渡すとき
    • 同一 Mac 内の別ユーザにドロップボックス経由でファイルを渡した場合、値は保持されているがアクセス権が「読み出しのみ」でありスクリプトメニューから実行しても値は更新されない (ファイルに値を書き込む権限がないため)。同ファイルをスクリプトエディタ上で実行する場合は値を書き込む必要がないため、ファイルを開いている間にかぎり実行するたびに値が更新される。
      Finder の「情報を見る」でアクセス権を変更すればスクリプトメニューから通常通り実行できる。また、アクセス権を変更しても値が初期値に戻ることはない。
    • OS 標準の機能で zip 圧縮したものをアップローダに揚げて別ユーザでダウンロードするとアクセス権はそのファイルを受け取ったユーザのものになる。値は保持される。zip でなく dmg でも同様。

04/18|AppleScriptコメント(4)トラックバック(0)TOP↑

一度実行すると再生中の曲と再生位置を記憶し、次回実行時にその曲を再生します。
再生が実行されると記憶はリセットされます。
ファイルトラックのみ有効。

--Mac OS X 10.4.6 on PPC、iTunes 6.0.4 で動作確認

property curPlaylistIndex : 0
property curPlaylistName : ""
property curTrackName : ""
property curTrackArtist : ""
property curTrackID : 0
property curPosition : 0

tell application "iTunes"
activate
if curPlaylistIndex is 0 then
try
if class of current track is not file track then
--beep
display dialog "曲を記憶するには" & return & "ファイルトラックを再生中に" & return & "実行する必要があります。" buttons {"キャンセル "} default button 1 giving up after 3
return
end if
on error errMsg
--beep
display dialog errMsg buttons {"キャンセル"} default button 1 giving up after 3
return
end try
display dialog "再生中の曲を記憶します。" buttons {"キャンセル", "記憶して終了", "記憶"} default button 3
set theResult to result
set curPlaylistIndex to (index of current playlist)
set curPlaylistName to (name of current playlist)
set curTrackName to (name of current track)
set curTrackArtist to (artist of current track)
set curTrackID to (database ID of current track)
set curPosition to player position
if button returned of theResult is "記憶して終了" then quit
else
if curTrackArtist is not "" then
set theString to (curTrackName & " / " & curTrackArtist) as Unicode text
else
set theString to curTrackName as Unicode text
end if
choose from list {"再生", "記憶した位置から再生", "記憶をリセット"} with prompt "\"" & theString & "\"" & return & "を再生します。" default items "再生"
set theResult to result
if theResult is false then
return
else if (item 1 of theResult) is "記憶をリセット" then
set curPlaylistIndex to 0
set curPlaylistName to ""
set curTrackName to ""
set curTrackArtist to ""
set curTrackID to 0
set curPosition to 0
else
if (name of playlist curPlaylistIndex) is curPlaylistName then set view of window "iTunes" to playlist curPlaylistIndex
set mute to true
play (item 1 of (every track of playlist curPlaylistIndex whose database ID is curTrackID))
playpause
if (item 1 of theResult) is "再生" then
set player position to 0
else if (item 1 of theResult) is "記憶した位置から再生" then
set player position to curPosition
end if
set mute to false
playpause
--再生後に記憶がリセットされるのを避けるためには以下6行を削除またはコメントアウト
set curPlaylistIndex to 0
set curPlaylistName to ""
set curTrackName to ""
set curTrackArtist to ""
set curTrackID to 0
set curPosition to 0
end if
end if
end tell


04/12|AppleScriptコメント(0)トラックバック(0)TOP↑

北ろだで日本語の DLKey が文字化けしてしまう。
そんなときは DLKey を文字参照に変換してみよう。

そんだけ(*´ω`*)


04/11|ネットコメント(0)トラックバック(0)TOP↑

Safari で Yahoo! Japan ID とパスワードを自動入力します。
つぎのような人におすすめ

  • 無料の Yahoo! Japan ID を持っている
  • 万が一他人にログインされてもダメージは小さいヽ(`Д´)ノ
  • なのに Safari でヤフーだけ自動入力にならないのがむかつくヽ(`Д´)ノヽ(`Д´)ノ
  • とにかくキーボード嫌いなんだよヽ(`Д´)ノヽ(`Д´)ノヽ(`Д´)ノ

(※この方法を用いて Yahoo! BB などの有料アカウントでログイン可能にすることはおすすめしません。)

tell application "Safari"
activate
if URL of document 1 starts with "http://login.yahoo.co.jp/" or URL of document 1 starts with "https://login.yahoo.co.jp/" then
do JavaScript "document.login_form.login.value='Yahoo! JAPAN ID'" in document 1
do JavaScript "document.login_form.passwd.value='PASSWORD'" in document 1
do JavaScript "document.login_form.submit()" in document 1
else
open location "http://www.apple.com/" --dummy script
end if
end tell

--dummy scripts ダミーの例
--Apple のサイトを開く
--open location "http://www.apple.com/"
--現在の URL を archive.org で探す
--open location "http://web.archive.org/web/*/" & (URL of document 1)

/アプリケーション/AppleScript/スクリプトエディタ を起動して新規書類に上記スクリプトをコピペ。
スクリプト中の「Yahoo! JAPAN ID」と「PASSWORD」を自分のものに書き換えます。
必ず「実行専用」で保存。そうしないとスクリプトの中身が丸見えです。意味ないです。
ファイル名もうまくごまかしましょう。「Appleのサイトに行く.scpt」とか。
yahoo.png

保存したスクリプトを ホーム/ライブラリ/Scripts/Applications/Safari/ (フォルダがなければ作る)に入れておく。
/アプリケーション/AppleScript/AppleScript ユーティリティ を起動して「メニューバーにスクリプトメニューを表示」にチェックを入れるとスクリプトメニューが使用可能に。
yahoo2.png

ヤフーのログイン画面を表示した状態でスクリプトを実行すると自動入力 → ログイン。
それ以外のページが前面にあるときは ダミーのスクリプトを実行します。

ワンクッション入れた例 (ここまでしなくてもいいと思う)

つぎのスクリプトではコマンドキー+クリックで
{"焼肉", "もつ鍋", "野菜炒め", "ホットケーキ"}
という組み合わせを選択した場合のみ自動入力を実行します。
if x is {"焼肉", "もつ鍋", "野菜炒め", "ホットケーキ"} then
の食べ物の名前を書き換えれば正解の組み合わせを自分で指定できます。
(食べ物の数は4である必要はありませんが順列は食べ物の全リストに準じる必要があります。)

tell application "Safari"
activate
if URL of document 1 starts with "http://login.yahoo.co.jp/" or URL of document 1 starts with "https://login.yahoo.co.jp/" then
set x to (choose from list {"焼肉", "もつ鍋", "野菜炒め", "ホットケーキ", "渋いお茶", "ステーキ", "カルボナーラ", "ビッグマック", "刺身盛り", "寿司"} with prompt "ご注文は" with multiple selections allowed)
if x is {"焼肉", "もつ鍋", "野菜炒め", "ホットケーキ"} then
do JavaScript "document.login_form.login.value='Yahoo! JAPAN ID'" in document 1
do JavaScript "document.login_form.passwd.value='PASSWORD'" in document 1
do JavaScript "document.login_form.submit()" in document 1
else if x is false then
return
else
set favorite to ""
repeat with j in x
set favorite to favorite & tab & j & return
end repeat
display dialog "へいおまち" & return & return & favorite
end if
else
open location "http://web.archive.org/web/*/" & (URL of document 1) --dummy script
end if
end tell

くどいようですが「実行専用」で保存しないと意味ないです。

追記:
スクリプト中にパスワードをそのまま書いてしまうと、たとえ実行専用で保存してもヘックスエディタなどで読めてしまうようです。文字を並べ替えて変数に格納するなどの工夫が必要かなと。

たとえばパスワードが「test」なら

set x to "jaiekl;aj;87mckad490-0;jfa;stoeuujkagj;ldaf12dklai@q4n,kx,94jdk"
set y to (character 29 of x) & (character 4 of x) & (character 28 of x) & (character 29 of x)


とか。


04/07|AppleScriptコメント(0)トラックバック(0)TOP↑

まず Creammonkey をインストールします。
8-p.info - Creammonkey

つぎに crosspost.user.js をダウンロード。
UserJS Mania: はてなブックマークとdel.icio.usに同時ポスト

テキストエディタで crosspost.user.js を開き、
// @include http://b.hatena.ne.jp/*add?*
の add の前のアステリスク(*)を削除。

crosspostuserjs.png

これだけです。まじで。
あとは
var deliciousid = 'bamboosprout'; // enter your del.icio.us id
という行のユーザ名を自分のものに書き換えてから保存して、Creammonkey のサイトに書かれている指示に従って crosspost.user.js をインストールすればオッケ。

crosspostuserjs2.png

正規表現の扱いが違うってことなんでしょうか。
Creammonkey で動かないと思われているほかの Greasemonkey スクリプトにも応用できそうな気がしますが、Firefox を使う機会がほとんどなく巷にどんな JS があるのか知らないので何とも言えません。


04/05|Macコメント(0)トラックバック(0)TOP↑

追記: 2006年4月5日
Greasemonkey 用の user.js を Creammonkey で使えるようにする方法が判りました。
Creammonkey + crosspost.user.js (続々 Safari ではてブ del.icio.us 同時ポスト)
追記ここまで


Safari からはてブと del.icio.us に同時ポストしちゃうよ一応ね の続き。

do JavaScript でブックマークレット自体を実行できることをすっかり忘れていました。(Tips: Web ブラウザに登録済みのブックマークレットを AppleScript に流用する場合、"%20"→" "(半角スペース)のようにデコードされた文字に書き換えなければ動かないケースがあります。)
ブックマークレットが使えるということは、どちらか一方の編集画面だけを開いて必要事項を入力すれば、あとは AppleScript にお任せでよいということですねヽ( ゚∀゚)ノ

というわけで書き直しました。

はてなブックマークの後に del.icio.us にもポストするAppleScript (Safari 用)

はてなブックマークのブックマークレットを実行(前回のエントリで紹介した長いブックマークレットは必要ありません。ふつうので。)して、ブックマーク追加画面でタグとコメントを入力。そのウインドウが前面にある状態で上記リンク先の AppleScript を実行すればあとは自動です。ちょっと時間かかるかも。


追記: 2006年4月4日
上記リンク先の AppleScript を修正しました。
修正点:
・del.icio.us をログアウトしていた場合の処理を追加。
・前面のウインドウで URL を開けなかった場合、中断せず新規ウインドウで続行できるようにした。
追記ここまで


ブックマークレットについて
Safari でブックマークレットから

encodeURIComponent(location.href)

を含む URL を開くとはてなブックマークや del.icio.us の編集画面で URL 文字列が化けることがあります。

encodeURIComponent(document.URL)

に書き換えることをお奨めします。

参考リンク: はてなブックマークのBookmarklet Safariでの文字化けを直す : blog.nomadscafe.jp

document.URL で都合が悪いページにはまだ遭遇したことがないのですが、もしある場合、二種類のブックマークレットを用意しておいて普段は location.href で、特定のサイトでは document.URL でと使い分けるのが良いと思います。

文字化けする例:
Safari でページを表示してブックマークレットを実行してみてください。
はてな - はてなとは


追記
iTMS Album Art Finder
ここは document.URL でなく location.href でないと取得できないようです。
臨機応変に使い分けるのが良さそうですね。
追記ここまで


del.icio.us のブックマークレットについて
前回のエントリで del.icio.us のブックマークレットに自分のユーザ名を付加する必要があると書きましたが、最新のバージョンではスクリプト中にユーザ名を含まないようです。
del.icio.us/help/buttons
v=4って書いてありますがバージョン4ってことかな? 今回の AppleScript の中ではこのバージョンを使っています。おそらく問題ないと思いますが、ログインしているのにうまく編集画面をひらけないときは AppleScript 中の
set bookmarklet to
に続く部分を以前の(ユーザ名を含んだ)ものに書き換えてみてください。


04/04|AppleScriptコメント(0)トラックバック(0)TOP↑

追記: 2006年4月4日
下記のものよりもうちょっとマシなものが書けました。こちら
追記終わり。


AppleScript の do JavaScript 命令を使って Safari 様にポストしてもらう方法です。

まず、del.icio.us とはてなブックマークのブックマークレットをセミコロンでつなぎます。
以下は一例です。(お前様のusername)となっている部分は各自 del.icio.us のユーザ名に書き換えます。

上記のブックマークレットを実行すると、現在のウインドウに del.icio.us が、別窓ではてブが開くので、両方のページが読み込み完了するのを待ちます。
読み込み完了する順番によりますがはてブの別窓が背面に隠れてしまうことが多いため、大きなウインドウで開くようにブックマークレットを書き換えておいた方がいいかもしれません。
たとえばこんな感じ。

どちらか好きな方(どちらでもいいです)の編集画面でタグとコメントを入力したら、そのウインドウを前面に出したままで以下のスクリプトを実行。もう一方の編集画面に内容をコピーして送信するところまで自動で行われます。(コピーするのはタグとコメントのみです。)

--スクリプトここから--(\はすべてバックスラッシュ)
--Mac OS X 10.4.5、Safari 2.0.3 で動作確認

tell application "System Events"
if not (exists application process "Safari") then return
end tell

tell application "Safari"

if (number of every document) < 2 then return
set firstDocument to document 1

if URL of firstDocument starts with "http://del.icio.us/" then
set getURL1 to "document.delForm.url.value"
set getURL2 to "document.add.url.value"
set secondDocument to my getURL(getURL1, getURL2, firstDocument)
if secondDocument is "" then
my noMatchURL()
return
end if
set notes to (do JavaScript "document.delForm.notes.value" in firstDocument)
set tempTags to (do JavaScript "document.delForm.tags.value" in firstDocument)
set tags to (do shell script "echo " & quoted form of tempTags & " | sed 's/^/\\[/;s/$/\\]/;s/ /\\]\\[/g;s/\\[\\]$//'")
set comment to tags & notes
do JavaScript "document.add.comment.value='" & comment & "'" in secondDocument
do JavaScript "document.add.submit()" in secondDocument
do JavaScript "document.delForm.submit()" in firstDocument
else if URL of firstDocument starts with "http://b.hatena.ne.jp/" then
set getURL1 to "document.add.url.value"
set getURL2 to "document.delForm.url.value"
set secondDocument to my getURL(getURL1, getURL2, firstDocument)
if secondDocument is "" then
my noMatchURL()
return
end if
set theString to (do JavaScript "document.add.comment.value" in firstDocument)
set tempTags to (do shell script "echo " & quoted form of theString & " | sed -E 's/^\\[[^]\\[]+\\](\\[[^]\\[]+\\])*/&\\" & (ASCII character 10) & "/g'")
--「-E」をつけて拡張正規表現とかいうやつを有効にしないと「+」は正規表現演算子ではなく文字列として扱われる模様。ようわからん。
if (number of paragraphs of tempTags) is 1 then
set notes to (paragraph 1 of tempTags)
set tags to ""
else
set notes to (paragraph 2 of tempTags)
set tags to (do shell script "echo " & quoted form of (paragraph 1 of tempTags) & " | sed 's/^\\[//;s/\\]\\[/ /g;s/\\]$/ /'")
end if
do JavaScript "document.delForm.notes.value='" & notes & "'" in secondDocument
do JavaScript "document.delForm.tags.value='" & tags & "'" in secondDocument
do JavaScript "document.add.submit()" in firstDocument
do JavaScript "document.delForm.submit()" in secondDocument
else
return
end if

end tell

on getURL(script1, script2, theDocument)
tell application "Safari"
set firstURL to (do JavaScript script1 in theDocument)
set everyDocument to (every document)
set secondDocument to ""
repeat with i from 1 to (number of items of everyDocument)
try
set secURL to (do JavaScript script2 in (item i of everyDocument))
if secURL is firstURL then
set secondDocument to (item i of everyDocument)
exit repeat
end if
end try
end repeat
end tell
return secondDocument
end getURL

on noMatchURL()
tell application "Safari" to display dialog "はてなと del.icio.us の編集画面が開かれていて、かつブックマーク先の URL が一致している必要があります。" & return & "両方の編集画面が間違いなく開かれているなら、del.icio.us 側の url テキストボックスを編集して URL をはてなと一致させることで実行可能になるかもしれません。" buttons {"キャンセル"} default button 1 with icon path to resource "compass.icns" in bundle (path to application "Safari")
end noMatchURL
--スクリプトここまで

本当は user.js みたいなことをしたいんですが、それにはもっと勉強が必要なようです。(そもそも可能かどうかすらわからん。Creammonkey とか?)


04/02|AppleScriptコメント(0)トラックバック(0)TOP↑
プロフィール

AquaBowler

  • Author:AquaBowler
  • 現在の Mac 環境:
    iBook Late2001
    Mac OS X 10.4.11
フリーエリア
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
リンク
del.icio.us
feed meter

RSS feed meter for http://kotoerisan.blog16.fc2.com/

FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。