2013年5月30日木曜日
【AppleScript】 フォルダ内のファイル(HFSパス/URL)を取得
いつものリハビリハンドラです。
フォルダ内のファイルのHFSパス、URLを取得します。
使い方は、ファイル一覧を出力したいとき、更にEvernoteとかに貼り付けようとしたらURLもあると便利だな、という感じです。
やりようによって、下層フォルダも巡回するので、うまく取り出せれば面白いですね。
複雑で混乱しそうなので、いまのところ1階層しか読み込んでませんが。
2013年1月29日火曜日
【AppleScript】 ファイルの拡張子を取得する超簡単なコード
ファイルの判別にファイルタイプか拡張子を取得したいシーンは多いですが、ファイルタイプは汎用性が低くてイマイチでした。
一方で、拡張子は取得の仕方が少し強引な感じなので、気持ち悪く感じるコードになりがち。
これを解決するスマートな書き方がこちら。
(どこかで見たコピペなんですが、1ヶ月ほど前なので忘れました・・・)
2012年11月29日木曜日
【AppleScript】 指定した階層数分上がった階層を返す(UNIX/POSIX両用)
もっと簡単に書けそうだけど、取り急ぎ必要だったから気にしなかった&結局他の方法をとったから無駄になったので、半ば腹いせです。
UNIX PATHとPOSIX PATH、どちらも返します。
「/」もしくは「:」で区切られたパスならなんでもOK。
ただ、返される値はテキストなので注意。(個人的にはそのほうが使いやすい)
今思うと、URLでも使えますね。それなら少しは使いまわせそうかな・・・
2012年11月1日木曜日
【AppleScript】リストから該当ナンバーのアイテムを削除
分かりづらいので補足すると、
{"あ","い","う","え","お"}と{"1","3","5"}を入れると、
{"い","え"}が返ってきます。
ナンバーは配列でも単数でも動きます。
2012年10月29日月曜日
【AppleScript】ファイル名に使えない文字のみエスケープする(Windowsも含む)
Macだけならさほどありませんが、Windowsも含めると予約語なんてものもあります。
最近はOSにこだわらないクラウドな世界なので「Windowsとか使ってねーよwww」ってWindowsを無下にした考えは極力なくしたいものです。
なので、それらの文字もまとめてエスケープする仕様です。
2012年10月26日金曜日
【AppleScript】 2つのリストから重複するアイテムを抜き出す
重複はファイル名などの文字列で考えてます。as textなどしたほうが確実かも。
{duplication_word:{重複アイテム},a_num_list:{aリストの該当ナンバー}, b_num_list:{bリストの該当ナンバー}}
を返します。
"item number i of duplication_word of ほにゃらら" みたいな使い方を想定しています。
二重リスト(?)はrepeatで扱いやすくて便利ですね。
リストを総当たりでチェックするので、アイテム数が多いととても時間がかかります。
スペック次第ですが、数百あたりからアヤシイです。使う時は気をつけてください。
2012年4月24日火曜日
[AppleScript] root権限でshellを実行する
そんな操作をAppleScriptから行うと、
must be run as root…とエラーを吐かれます。これをあらかじめ指定しておいてちゃんとshellを実行する方法。
(って答え出てますね・・・)
-- Sleepモードを変更するときのサンプル
set pass to "パスワード平打ち"
set slmodecode to "pmset -a hibernatemode 1"
do shell script slmodecode password pass with administrator privileges
「セキュリティとか知らない」ってやり方だけど、他に方法が見つからないです。
パスワードを
property変数にすれば、初回しか尋ねてこないコードも作れますね。
2012年3月3日土曜日
[AppleScript] リストをソートする
ググったらすぐ見つかったのでご紹介です。
ScriptTextBook's NoteBook - AppleScript内に記述されたPerlを実行する
AppleScriptとperlの合体技がたくさんあります
2012年3月1日木曜日
[AppleScript] iTunesで再生中の曲の歌詞を検索して曲に埋め込む [ほぼ手動]
前回は
- 歌詞が無い曲をひとまとめにする
- 歌詞を入れる
- 最終確認する
の1と3、肝心の歌詞を入れるとこは放置でした。
ということで、今回は2の部分です。
[AppleScript] iTunesで選択している曲から歌詞が無いものをプレイリストに書 きだす
僕はiPodで歌詞を読みたいので、リッピングするときについでに歌詞も入れてます。
メジャー曲はだいたいLyrics Masterっていう素晴らしいアプリで事足りてます。
が、少しマイナーな曲になるとやっぱりぜんぜん見つからないわけです。
でもやっぱり歌詞欲しい!ってことで、頑張って検索してコピペするという涙ぐましい努力をしています。
この検索する過程がもう本当にすっっっごくめんどくさいんですが、今回はそこは置いといて、歌詞の無い曲を抽出するする方法についてです。
[AppleScript] iTunesで再生中の曲のArtworkをAmazonから検索
僕は音質とか割とどうでもいい派なので借りてきたCDのリッピングはお手軽にiTunesで済ませてるんですが、iTunesのCDDBってArtworkがあったりなかったりマチマチなのです。
無いときはわざわざWebから落としてきてるんですが、そのとき毎回「アーティスト名 アルバム名」って検索するのがメンドクサイ。
ということで、お手軽に再生中の曲のArtworkを検索するだけのスクリプトです。
2012年2月24日金曜日
[AppleScript] Chromeのダウンロードバーをやっつけるショートカットキー
近頃のディスプレイはどんどん縦に狭くなっていくので喜ばしい限りです。
しかしあいかわらずMacは非対応という・・・
Mac版Chromeのflagsは常にハブられ気味ですから仕方ありません。
だけどやっぱりダウンロードバーじゃまいよね!
ということで、Mac版でもダウンロードバーをサクっと退治する方法の紹介です。
キッカケはラクイシくんのこの記事。
みんなの敵ダウンロードバー
やっぱりみんなイラナイと思ってるんだね・・・
なんて不遇な子なのダウンロードバーさん(´・ω・)
2011年9月18日日曜日
[AppleScript] Finderで複数選択している項目を1つずつzipで圧縮
複数選択している状態で圧縮すると、デフォルトではまとめて圧縮されてしまいます。
しかしときには1つずつ圧縮したいケースもあるでしょう。(というか直面した)
コードは相変わらず9割コピペ。僕の仕事はGrowlを設定しただけ。
dittoが初参加です、ちょっと調べるとこれ便利ですね。これからお世話になりそう。
ditto(1) Mac OS X Manual Page
あと、今回のような時間がかかるときはGrowl入れる意味があって嬉しいです。
いつも自己満なんで。。。
しかし、ファイル操作のときはshell大活躍すぎてAppleScriptで書く意味がががが・・・
AppleScriptは当然として、shellも知っとかないとですねぇ。覚えることが多いっす。
set i to 0
tell application "Finder"
set fol_Path to (target of window 1) as alias
repeat with select_item in (selection as list)
set file_path to select_item as alias
set fil_name to name of file_path as text
set source to quoted form of POSIX path of (file_path as text)
set dest to quoted form of POSIX path of (fol_Path & fil_name & ".zip" as text)
do shell script "ditto -ck " & source & " " & dest
delay 1
set i to i + 1
end repeat
end tell
set grrDescription to i & "files" as text
my growlRegister()
growlNotify("End Run Zip", grrDescription)
using terms from application "GrowlHelperApp"
on growlRegister()
tell application "GrowlHelperApp"
register as application "選択項目をzipで圧縮" all notifications {"Notification"} default notifications {"Notification"} icon of application "Finder.app"
end tell
end growlRegister
on growlNotify(grrTitle, grrDescription)
tell application "GrowlHelperApp"
notify with name "Notification" title grrTitle description grrDescription application name "選択項目をzipで圧縮"
end tell
end growlNotify
end using terms from
2011年8月17日水曜日
[AppleScript] 各ブラウザで最前面のページタイトルとURLを取得
タイトルどおりなんですが、それぞれで取り出す手法が違います。
AppleScriptでは、同じクラスでもアプリによって意味が違うことがあります。
なので、一つの情報を取り出すにも、同じ手段が取れないことはザラです。
Macで使う最近のブラウザといったら、Safari、Google Chrome、Firefoxでしょうか。
それ以外は使ってないので、ひとまずは3つ作りました。
まずはSafari。
tell application "Safari"
set page_URL to URL of current tab of window 1
set page_title to name of current tab of window 1
end tellうん、分かりやすいですね。さすがApple純正ブラウザです。
用語説明を開いて驚いたんですが、印刷設定まで出来るんです。充実し過ぎ。
お次はGoogle Chrome。
tell application "Google Chrome"
set page_URL to URL of active tab of window 1
set page_title to title of active tab of window 1
end tellまあ、大体は一緒ですね。currentがactiveになっただけ。
しかし、このくらいなら統一して欲しい気もしますが・・・
この辺りがAppleScriptらしさ。クラス云々というのはこういった側面です。
最後にFirefox。
tell application "Firefox"
activate
set page_title to the name of front window
tell application "System Events"
keystroke "l" using {command down}
keystroke "c" using {command down}
set page_URL to the clipboard as text
end tell
end tellええ、思わず「うそ・・・だろ・・・?」と言いたくなるコードです。
URL取得でkeystrokeとか、冗談でしか無いですね。が、残念。これしかありません。
AppleはMozillaに恨みでも買ってるんでしょうか。
細かく言えば、GUI Scriptingのエラー処理、クリップボードの保護も欲しいところです。
その辺を追加したらこうなります。
my gui_check()
set temp to the clipboard as text
tell application "Firefox"
activate
set page_title to the name of front window
tell application "System Events"
keystroke "l" using {command down}
keystroke "c" using {command down}
delay 0.5
set page_URL to the clipboard as text
end tell
end tell
delay 0.5
set the clipboard to temp as text
to gui_check()
tell application "System Events"
if UI elements enabled is false then
tell application "System Preferences"
activate
set current pane to pane "com.apple.preference.universalaccess"
set msg to "GUI scripting is not available." & return & "Do you put the check in" & return & "\"Enable access for assistive devices\" ?"
--display dialog msg buttons {"OK"} default button "OK" with icon note --giving up after 10
display dialog msg buttons {"cansel", "check and try"} with icon note
end tell
set UI elements enabled to true
delay 0.5
tell application "System Preferences" to quit
delay 0.5
end if
end tell
end gui_checkもうね、やってられっかって話です。
そして嫌味なのが、この手法だと3つのブラウザ全て共通で使えるということです。
3つのブラウザに対応した形を作るなら、これをハンドラにした方が楽だということ。
まあ、 絶 対 に やらないけど・・・
でもまあ、これでFirefoxでもURL取得のテンプレが出来たので、次からは楽できそう。
ついでにGUI Scriptingのエラーもルーチン化できたし。こっちは随分と便利。
にしても、もう少しなんとかならないかなぁ・・・
言語を変えれば解決するんでしょうか・・・
今回これを作るにあたって、少しSafariに傾きつつあります。
2011年8月16日火曜日
[AppleScript] iTunesの再生中の曲情報をいろいろ取得
そのまんま、iTunesの曲情報を取得するだけ。
1分で書けるレベルですが、ひな形くらいにはなるかと。
Twitterの呟きパラメータとかになら使えるかもしれません。
というか、実際にその用途でついでに書いただけだったり・・・
ぱっと見たところアートワークの取得も出来たので、使いかたによっては面白いことができるのかもしれません。
こういうの見てると、Windowsのsamurizeを思い出しますね。
tell application "iTunes"
set i_track to current track
set i_name to the name of current track
set i_artist to artist of current track
set i_album to album of current track
set i_genre to genre of current track
set i_rating to rating of current track
set i_lyrics to lyrics of current track
set i_path to location of current track --HFSパス
end tell
[AppleScript] Bit.lyで短縮URL作成 [要API]
bit.lyで短縮したURLを返すルーチン。
用途的にルーチンにする必要は無いですが・・・書いちゃったので。
前に本家が公開してた方法は閉鎖してました。
Bit.ly URL shortening with Mac OS X Snow Leopard Services and Applescript
いっても410 GONEが返ってきます
しかし410なんてエラーあったんですね、知らなかった・・・
現行の記述はググッても中々見つからず、公式の隅っこに埋まってる感じ。
もうbit.ly自体あまり使われていないのかもしれませんが、念のため。
僕としては、かなり便利だと思うんですけどねぇ。。。
format=txtをxml、jsonに変えると、そのタイプで取得できます。
ApiDocumentation - bitly-api - bitly REST API method documentation - API Libraries and Documentation for bitly - Google Project Hosting
v3/shortenってとこ
残念ながら、直リンを返してくれるのはユーザー名、API持ってる人だけみたい。
無い場合はhttp://bit.ly/longURLに飛ばされてからでないと、短縮URLが作れません。
「アカウント持ってないヤツ、ちょっとウチこいよ」ってことなのかな?
ワンクッション無くURLを作る方法をご存知の方いましたら、教えてください。
set bitly_user to "" --bit.ly ユーザー名
set bitly_api to "" --bit.ly API
set longURL to "" --短縮前URL
to bitly(longURL, bitly_user, bitly_api)
set inputResult to (longURL as string)
if (((characters 1 thru 4 of inputResult) as string) = "http") then
set curlCMD to "curl --stderr /dev/null \"http://api.bitly.com/v3/shorten?login=" & bitly_user & "&apiKey=" & bitly_api & "&longUrl=" & longURL & "&format=txt\""
set tinyURL to (do shell script curlCMD)
return tinyURL
end if
end bitly
[AppleScript] Finderで選択した項目のいろんな情報を取得
スマートなコードを見つけたのでご紹介。
AppleScriptでググったらまずヒットするザリガニが見ていた...。さんから。
選択中したファイルのいろんな情報を引っ張り出します。
大抵はshellで取得すると思うんですが、これはprpertyから抜き取ります。
無理がなく、AppleScriptだけってのもステキ。
一気にいろんな情報が取れて便利ですねー。
ついでですが、a7、a8にパス関係を追加してます。(僕が使いたかっただけ)
tell application "Finder" to repeat with a2 in selection as alias list
copy properties of a2 to {name:a3, name extension:a4, container:a6}
set a5 to a3's characters 1 thru -((count character of a4) + 2) as Unicode text
set a7 to (a2 as alias) as Unicode text
set a8 to POSIX path of a7 as Unicode text
end repeat
--a3:ファイル名&拡張子、a4:拡張子、a5:ファイル名、a6:ディレクトリ、a7:HFSパス、a8:POSIXパス
2011年8月14日日曜日
[AppleScript] テキストをデリミタで分割してリスト化
テキストをリスト化する構文。
Finderからパスを取得した場合などによく使ってます。
拡張子、ファイル名、階層数を受け取りたいときは便利。
try
set AppleScript's text item delimiters to "NewDelim"
set DelList to ""
repeat with i from 1 to (count text item of DelText)
set demo to text item i of DelText
set DelList to DelList & demo as list
end repeat
end try
[AppleScript] Growlのサブルーチン化
Growlで通知を出すときの決まり文句。お世話になりそうです。
初回実行後に登録アプリ名でGrowlのアプリケーションごとの設定欄に現れます。音などはそちらで設定するしかなさそう。
サンプルのTweetの部分はGrowlへの登録アプリ名になります。
またサンプルのYoruFukurouは夜フクロウさんのアイコン指定。
思いのほか弄れるところはあるようで、詳しくは本家で都度確認、わかり次第追記の方がよさそう。
--実行部
my growlRegister()
growlNotify(grrTitle, grrDescription)
--サブルーチン部
using terms from application "GrowlHelperApp"
on growlRegister()
tell application "GrowlHelperApp"
register as application "Tweet" all notifications {"Notification"} default notifications {"Notification"} icon of application "YoruFukurou.app"
end tell
end growlRegister
on growlNotify(grrTitle, grrDescription)
tell application "GrowlHelperApp"
notify with name "Notification" title grrTitle description grrDescription application name "Tweet"
end tell
end growlNotify
end using terms from
2011年8月13日土曜日
[AppleScript] Finderで選択中の項目をリネーム
今日からApple Scriptの書き溜めをブログにしていこうと思います。
スクリプト書くとき、簡単なルーチンはEvernoteにメモで残してるんですが、それだとあんまり実用性が無いので。
というのも、ただコピペするだけだと、こんな感じになるから。
もう目も当てられません・・・
つーことで、「Webクリップしたソースコードならそのまま使えるだろ!」&「Webに置いときゃ誰が見るかもね!」と思った次第。
どこまで続くか分からないし、実際スクリプト書いてる最中にチマチマとブログにメモするの?って疑問はありますが、とりあえず続けてみます!
リネーム
ほんでは、さっそく一つ。
巷で大流行のAlfred拡張で使う予定の、リネームルーチン。
連番とかはつけてないので、必要に応じて変えてください。
拡張子は保護しますが、フォルダ名がファイル名まがいな記述("エロフォルダ.jpg"とか)だとエラー。(理由分からず)
あと二重拡張子も無視。.tar.gzとか、うちのHDDに入ってない無いものは興味なし。
on rename(new_name)
tell application "Finder"
repeat with select_item in (selection as list)
set file_path to select_item as text
if file_path contains "." then --ファイルのとき
set oldDelim to AppleScript's text item delimiters
set AppleScript's text item delimiters to "." --二重拡張子は無視
set item_ext to text item 2 of file_path
set AppleScript's text item delimiters to oldDelim
set name of select_item to new_name & "." & item_ext
delay 0.05 --タマに重複することがある(うちだけ?)
else --フォルダのとき
set name of select_item to new_name
delay 0.05 --タマに重複することがある(うちだけ?)
end if
end repeat
end tell
end rename
おお、割と見れる感じに整いますね。
ただ、色が・・・(´・ω・`) まあ、いいか。
これでEvernoteにもクリップ出来てることでしょう。(まだ未確認ですが)
こういうの、サクッとブログに上げるスクリプトも欲しいですねぇ。