ラベル Automator の投稿を表示しています。 すべての投稿を表示
ラベル Automator の投稿を表示しています。 すべての投稿を表示

2013年3月2日土曜日

フォルダの背景の花粉情報予測マップ画像表示の自動化 (Automator編)

前の記事で、フォルダの背景に花粉飛散状況(花粉マップ)画像の表示ができるようにしました。
これで、昼休みに散歩に出るとき、見逃さない可能性が高くなりますね。ちゃんと忘れなければですが。

でも、今のままでは、花粉マップのある日本気象協会のウェブに毎日アクセスして、花粉マップ画像をダウンロードし、フォルダの背景に貼り付ける作業を手で行う必要があります。
多分忘れることも多そうですし、面倒になってやらなくなりそうです。

ということで、自動化を考えてみます。ここでは、Automatorを使うことにしたいと思います。冗長なところもあるかもしれませんが、できるだけAutomatorのアクションだけで作ってみます。


準備として、花粉マップを表示する(=普段よく使う)フォルダを決めておきます。ここでは、testとしておきます。
また、花粉マップを毎日ダウンロードするフォルダを決めます。表示するフォルダと同じにしてもかまいませんが、ここではtestフォルダの下にtest/kafunとして作成します。
また、一度だけ、Safariなどで花粉マップ(pollen)をあらかじめダウンロードしておいてください。以下は参考画像です。


処理の考え方は以下のようになります。

Automatorで、(1) カレンダーアラームとしてワークフローを作成します。
ワークフローの中では、(2) 前回の花粉マップを削除し、(3) 新しい花粉マップをダウンロードして、(4) それをフォルダの背景として設定します。
最後に、(5) カレンダー上でそのワークフローを連続イベント設定します。(Mountain Lionではカレンダーと名前が変わっていますが、Snow LeopardではiCalという名前です。)

1. Automatorの立ちあげとカレンダーアラームの選択

カレンダーアラームは、カレンダーのイベントがきっかけとなって実行されます。毎日、決まった時間に処理を行うために、この書類の種類にします。また、Mac OS Xの以前のバージョンでは、iCalアラームになっています。


2. 花粉マップ画像の削除

Finderのアクションから、「指定されたFinder項目を取得」を右側のワークフロー作成領域(ペイン)にドラッグします。ダブルクリックしてもいいようです。

「追加...」ボタンを押して、上の準備のところであらかじめダウンロードした花粉マップを指定します。


Finderのアクションから、「Finder項目をゴミ箱に入れる」を選びます。


3. 花粉マップ画像のダウンロード

Safariのアクションから、「指定されたURLを取得」アクションを右側のペインにドラッグします。

アドレスは、apple.comになっていると思いますので、それを選択してから削除ボタンで削除します。
続いて、追加ボタンで日本気象協会の花粉画像ファイルのURL(http://season.tenki.jp/component/images/pollen_mesh_large.jpg)に変更します。

その際、Safari で、花粉マップの画像を開いておくと、自動的にそのURLが設定されます。

Safariのアクションから、「URLをダウンロード」アクションをドラッグします。

ダウンロードする場所は、上の準備で決めたフォルダ(ここではkafunフォルダ)に変更します。


4. 花粉マップをフォルダの背景へ貼り付け

Finderのアクションから、「指定されたFinder項目を取得」をドラッグします。このアクションは、2回目ですね。
パスは、フォルダの背景を設定したいフォルダを指定します。ここでは、testフォルダです。

Finderのアクションから、「Finder項目にフィルタを適用」アクションをドラッグします。そして、種類をフォルダに設定します。
その種類を限定する理由は、Finder項目として、ダウンロードした花粉マップ画像と上で選択した、背景を設定したいフォルダの両方が選ばれているためです。このままですと、後の処理でエラーが出る場合があります。Mac OS Xのバージョンによってはエラーが出ない場合もあります。

Finderのアクションから、「フォルダ表示を設定」アクションをドラッグします。

右側の背景の欄をピクチャに変更し、準備段階でダウンロードしておいた花粉マップ画像を設定します。

これで、フォルダの背景に画像が設定できているのですが、対象のフォルダを開いたままにしてAutomatorを実行した場合、フォルダの背景の変更がすぐに反映されません。フォルダを開き直したり、表示形式をカラムやリスト形式からアイコン形式に変更したら、背景画像が設定されているのが確認されます。

ここで、それと同じ効果をAutomatorで得るため、もう一度、「フォルダ表示を設定」アクションをドラッグします。

今回は、「常に次の項目で並び替える」を「変更日」に変更します。また、背景は、もう一度、花粉マップ画像を設定します。
このような設定は二度手間なので、本当は何かいい方法があるのかもしれませんがわかりませんでした。

やっとAutomatorの部分の最後になりました。ここでワークフローを保存します。
私は、名前を「花粉マップ」にしました。
動くかどうかをここで確認するのもいいと思います。右上の「実行ボタン」や「コマ送り」ボタンを押して実行と確認をしてください。


5. カレンダーでイベントを修正

カレンダーアプリを立ちあげると、Automatorというカレンダー項目と「花粉マップ」(または自分でつけたワークフロー名)イベントが登録されています。

この「花粉マップ」を選んで編集メニューから「情報を見る」を選びます。command + Iでも同様です。

登録した時間に1回だけ実行されるようスケジュールされています。
このイベントを毎日実行されるよう設定を変更していきます。
まず、開始時刻を適当な時間、例えば6時55分に変更します。朝、6時に日本気象協会の情報が更新されますのでそれより後で、Macを立ち上げている時間がいいと思います。

また、繰り返しを毎日に変更します。通知の時間が指定時刻ではなく、0分前になっていることも確認してください。
Snow Leopardの場合、指定時刻(将来の日時から見ると過去の時間)に固定されている場合があるので注意が必要です。

これで適用を押して情報ウインドウを閉じてみると、カレンダー表示が次のようになります。

これで終了でもいいのですが、毎日表示されているのが多いと感じた場合は、左上のAutomatorのチェックをオフにすることで、毎日の表示を隠すことができます。その場合も、花粉マップのダウンロードとフォルダの背景への設定更新はされます。

ずいぶん長くなりましたが、これで終わりです。画像の明るさや透明度を変えたり自分なりに工夫ができるかもしれません。試してみてください。

2013年2月4日月曜日

スクリーンショットのファイル名の変更 (3)

システムファイルを変更してスクリーンショットのファイル名を変更する方法を説明しましたが、システムファイルを変更するのはできるだけ避けたいと思います。他に方法がなかったり、効果が大きい場合は別ですが。

defaultsコマンドとAutomatorでのシェルスクリプト(実際はrubyスクリプトですが)を組み合わせて実行することにしました。

1. はじめにスクリーンショットを保存するフォルダを作成します。ここでは仮にscreenshotsフォルダとし、適当なフォルダの下に作ります。
上の図では既にファイルが入っていますが、無視してください。

2. defaultsコマンドでスクリーンショットの保存先を、このscreenshotsフォルダに変更します。

$ defaults write com.apple.screencapture location ~/Documents/somewhere/screenshots
$ killall SystemUIServer

保存先の変更は、SystemUIServerの再起動が必要です。

3. Automatorを立ちあげて、フォルダアクションを選びます。

4. フォルダアクション(のワークフロー)を定義するフォルダを、先ほど変更したscreenshotsフォルダに設定します。

5. Automatorのアクションから「シェルスクリプトを実行」を選びます。今回は、rubyスクリプトを使いますので、シェルの種類を/usr/bin/rubyに変更し、下記のようなスクリプトを入力します。書く前は、rubyの方が簡単に書けるかなと思ったのですが、bashなどでもほぼ同等に問題なく書けそうですね。

スクリプト部分は下記のようになっています。ここでは、既にスクリーンショット名の先頭を"ss"にしていることを前提にしています。


re = /^ss \d{4}-\d\d-\d\d \d\d\.\d\d\.\d\d( \d+)?\.png$/
ARGV.each do |f|
if re =~ File.basename(f)
new = File.dirname(f) + "/" + File.basename(f).gsub(" ", "-")
File.rename(f, new) unless File.exists?(new)
end
end

6. フォルダアクションに適当な名前をつけて保存します。ここでは、mvssとしました。

準備は以上で終了です。
使い方は、普通どおりにcommand + shift + 3 や 4 でスクリーンショットを撮るだけです。
"ss 2013-02-14 02.34.56.png"で一旦保存された後、"ss-2013-02-14-02.34.56.png"に自動的に変更されます。
場合によっては、以前書いたpngからgifへの変換も合わせて行なってもいいかもしれません。

2013年1月22日火曜日

Automatorで画像をGIFに変換する

スクリーンショットなどの画像をGIFに変換したい場合が結構出てきますね。GIF画像の方が他のフォーマットに比べて普通は小さいですし。
でも、ファイルが多いとプレビューでの操作は面倒になってきます。
ということで、少しでも楽をするために、Automatorを使おうと思います。

AutomatorにGIF画像に変換するアクションがない

Automatorを立ちあげてプレビューを選び、イメージのタイプを変更するというアクションを選んだのですが、変更後のタイプにGIFが出てきません。option キーを押しながら選んでも出てきません。
どうやらAutomatorのプレビューアクションではサポートされていないようです。残念。

Automatorでシェルスクリプトを使う

仕方がないので別の方法、「Automatorからシェルスクリプトを実行する」方法にしました。
Macには、ターミナルから使うsipsコマンドが用意されています。sipsコマンドは画像の情報を取り出したり、サイズやフォーマット(タイプ)を変更することができます。
GIFに変換する場合の基本的な使い方は以下のようになります。

$ sips -s format gif 入力ファイル名 --out 出力ファイル名

これを、Automatorから使おうと思います。
まず、Automatorを立ちあげて、アプリケーションを選び、「Automatorからシェルスクリプトを実行」のアクションを選びます。入力の引き渡し方法は「引数として」にして、シェルは、bashかshを選びます。
この中の echo "$f" の部分を以下のように変更します。
OUTF=`dirname "$f"`/`basename "$f" .png`.gif
sips -s format gif "$f" --out "$OUTF"


適当な名前を付けてアプリケーションとして保存します。

このアプリケーションにPNG画像をドラッグアンドドロップするとGIF画像に変換されます。このアプリケーションは、GIF画像が既に存在しても上書きしたり、PNG画像かどうかのチェックも行なっていないので注意してください。

[関連記事]
プレビューでGIFに変換する

2012年10月18日木曜日

シェルスクリプトを実行するAutomatorドキュメントでアプリケーションしか保存していなかった場合?

Automatorでシェルスクリプトを実行させることができますが(1, 2)、保存するときにアプリケーション形式でしか保存していないと、そのアプリケーションはAutomatorではもう編集できません。と書いてあるブログやツイートがいくつかありました。
初めは信じていたのですが、うっかりアプリケーション形式でしか保存しなかったものがあり、確かめたところ、そういうことはないようですね。バージョンなどが違うのかもしれませんが。私の場合はSnow Leopardと古いので、以下のようです。

確かに、Automatorで作成したアプリケーションをFinder上で右クリックしても、「開く」メニューしか出ませんが、Automatorを立ちあげて「開く」を選ぶと編集できます。わざわざファイルの種類に「アプリケーション」が出てきますね。
ちゃんと表示されて、再保存、別名で保存もできました。
作成したアプリケーションのパッケージ中にある document.wflow を見ると、そこにシェルスクリプトが書いてあります。ですのでそちらからスクリプトを回復する記事を書こうと思った訳ですが、そこまでする必要はなかったようです。

2012年10月14日日曜日

Windowsファイル共有のファイルパス名をWindow形式に変換する

会社でもMacを使っているのですが、ファイルサーバはNASによるSMB共有(Windowsファイル共有)になっています。
普通に使っている分にはそれほど困らないのですが、Windowsを使っている人が大部分なので、ファイルの保存場所を連絡するとき等に、少し面倒くさいことがあります。

Mac OS Xでは、ファイルのパス表記は、
/Volumes/Server/somefolder/some.file   (Unix形式パス名)
になりますね。スラッシュの代わりにコロンで区切ったMac OS形式もありますけど。
一方Windowsでは、上の例ですと
\\Server\\somefolder\some.file
となります。
WindowsユーザにUnix形式のパス名を教えても、アクセス出来ないと言われますので、Windows形式で連絡するのが親切かなと思います。
よくやるのは、Unix形式のパス名をメーラにコピー・ペーストして修正する方法です。
たまに、Windowsマシンも持っているのでそちらから入って同じ場所をアクセスして連絡することもあります。どちらにしろ度々あると面倒になってきます。

そこで現在は、以下のようにしています。少しはましになったかなというところです。

まず、準備です。
(1) Automatorでシェルスクリプトを実行を選んで次の行を入力します。(1行です)

echo "$@" | iconv -f UTF-8-MAC -t UTF-8 | sed -e 's/^\/Volumes/\//' -e 's/\//\\/g' | pbcopy

以前の記事の「Automatorでシェルスクリプトを実行する」も参考にしてください。
iconvコマンドでは、UTF-8文字コードをMacで使われている形式からWindowsなどで使われている形式に変換しています。これをしないとカナの濁音記号などが別の文字になったりします。
sedコマンドでは、先頭のVolumesを削除して、スラッシュをバックスラッシュに変換しています。
pbcopyはクリップボードに文字列をコピーします。別アプリケーションでペーストして使えるようになります。
(2) このAutomatorのワークフローをアプリケーションとして保存します。例えば、towinpath.appのような名前にします。
以上で準備は終わりです。

次に使い方ですが、以下のようになります。
(3) Finderで連絡したい共有サーバのファイルやフォルダを選択します。
(4) Quicksilverを使う場合、
    command + esc キーで(3)のファイルが選択された状態でQuicksilverを開きます。
    2ndペインに移って、open with... Actionを開きます。私の場合は、owで出てきます。
    3rdペインに移って、先ほどのAutomatorアプリケーション名(towinpath)を入れてリター
    ンします。

    Quicksilverを使わない場合は、(3)のファイルを(2)のtowinpath.appにドラッグアンドド
    ロップします。
(5) この状態で、クリップボードにWindows用パス名がコピーされた状態になっています。後は、例えばメーラ上でペーストするなりして連絡すればOKです。


2012年9月5日水曜日

Automatorでシェルスクリプトを実行する [追記あり 2012/9/22]

インターネットで拾った画像を、自作のシェルスクリプトでフォルダごと無圧縮ZIPファイルとしてまとめたりしていました。でも、Terminalからコマンド操作するのが面倒なときがあります。
そこで、Finderで選択した項目を個別にZIP化(非圧縮)してくれるアプリケーションを、Automatorで作ってみました。実際は、自作のシェルスクリプトを呼び出すだけですが、少し試行錯誤をしました。[追記: 2012/9/22 無圧縮ZIPをターミナルで作成する記事を書きました]
Automatorを起動してアプリケーションを選択します。そして、ライブラリのFinderから「選択されたFinder項目を取得」を選び右側の領域にドラッグアンドドロップします。
次に、ライブラリのAutomatorから「シェルスクリプトを実行」を選び先ほどの項目の下にドラッグアンドドロップします。
そして、シェルは今回は/bin/bash、入力の引き渡し方法は「引数として」を選びます。
スクリプトのウィンドウには、渡されたFinder項目を"$f"としてechoするスクリプトが記入されていますので、それを自作のコマンドに置き換えます。
適当な画像フォルダを選択して、このワークフローの実行ボタンを押したら、以下の警告ダイアログが出ました。テスト時には別のアクションを入れて、実際に使うときは取り除けと出ていますが、OKすると選択したフォルダがZIPファイルに変換されました。
出来上がったZIPファイルを見たのですが、フォルダの階層がトップから含まれています。これは邪魔です。

そこで、スクリプトを以下のように修正しました。
ループ中で、Finder項目のUnixパス名から、ディレクトリ部分とZIP化対象部分を取り出しています。次に、ディレクトリに移動してからZIP化対象部分だけをシェルスクリプトに渡しています。今度は、ZIP化対象部分以下だけがZIPファイルに含まれていました。

これで基本機能を確認できたので、ワークフローをアプリケーションとして保存し、そのアイコンにフォルダをドラッグアンドドロップしたのですが、実行される気配がありません。Dockの対応アイコンを右クリックすると「アプリケーションが応答しません」と薄い字で表示されています。仕方がないので強制終了しました。その後、ウェブで調べるとどうもワークフローの先頭の「選択されたFinder項目を取得」はいらないようです。
上のように「シェルスクリプトを実行」だけを残して、アプリケーションとして保存し直したところ、ドラッグアンドドロップで動作するようになりました。

関連記事: シェルスクリプトをMacのアプリケーション化するシェルスクリプト