【Mac】Platypus で遊ぶ

英語でカモノハシを意味する Platypus。
 Mac で Platypus といったらこいつだ。

🔗 Platypus – Create Mac apps from command line scripts | |

Platypusは、シェルスクリプトやPerl、Ruby、PythonプログラムなどのコマンドラインスクリプトからネイティブのMacアプリケーションを作成する開発者ツールです。

Platypus – Create Mac apps from command line scripts | |

Platypus を使えば、スクリプトに GUI 的な装いをつけられる。
 インターフェイスは以下のうちのひとつだ。

  • なし(アプリアイコン)
  • プログレスバー
  • テキストウィンドウ
  • web表示
  • ステータスメニュー
  • ドロップレット

対応するスクリプトは、シェルスクリプト、Python、Perl、Ruby、PHP、Swift、JavaScript、AppleScript などなど。

無料のオープンソースソフトウェアだが、サイトで支援を求めているので、気に入ったら寄付を考えてみてもいいかもしれない。

要するにスクリプトに GUI を着せるものなので、スクリプト以上のことは出来ない。ダブルクリックで叩いてなにかさせる、もしくはドラッグ&ドロップでファイルを渡す、などが主な使い方ではないかと思う。

とはいえ、自分の作ったアイコンのアプリが、デスクトップにひとつくらいあるというのも、いいかもしれない。

試してみる

ということでテストしてみる。
 詳しいことはドキュメンテーションを見て欲しい。

🔗 Platypus 5.3のドキュメント

Google Chrome で開くと、かなりわかりやすい翻訳で訳してくれる。

とりあえず、上のようにしてみた。
「Accept dropped Items」は下のように、とりあえずすべてにチェックした。

「Script Path」にある「+ new」を押すと、簡易な組みこみエディタが起ち上がる。「Check Syntax」でシンタックスエラーをチェックできて便利だ。

下のようなものを書いた。

#!/bin/sh

echo 'Hello, World'
echo '現在地'
pwd

echo ' '

echo '引数 '$1
echo ' '
echo 'cat -'
cat -

これで [Create App] してみた。

現在地はアプリのなかのリソースらしい。

ファイルをドロップすると、引数としてパスが入力される。

文字列をドロップすると、標準入力されるようだ。

imageDL を作成してみる

ちょっとむかしの男子は、なんといっても画像ダウンロードのためにスクリプトをおぼえたものである。初心にかえってそういうアプリを作ってみたい。

インターフェイスは「Text Window」にしておいた。
「Accept dropped items」は、「Accept dropped text」だけにチェック。

ちなみに中段右の、「Run with root privileges」というのは root 権限で実行する、という意味だ。ドキュメントに詳しいが、Platypus では「sudo」を使ってはいけないらしい。
「Runs in background」はバックグラウンドで実行。Dock にアイコンがあらわれない。
「Remain running after completion」は、スクリプトが終了してもアプリは起動したままにする。

「Script Path」のスクリプトは以下のように書いた。

📝 imageDL.sh
#!/bin/sh

URL=`cat -`
if ! test -z "$URL"; then
	if echo "$URL" | grep -sq "^http"; then
		sh dl.sh "$URL"
	fi
else
	exit 0
fi

下段の「Bundled Files」には「dl.sh」というシェルスクリプトを入れた。
 dl.sh の内容は以下のとおりだ。
 画像がたくさん載っている記事の URL をドロップすると、リンクされた大きな画像のアドレスを取得するべく試み、ダウンロードしていく、という動作を考えている。

#!/bin/sh

saveLoc=~/Desktop

if ! test -e ./dlTmp; then
	mkdir ./dlTmp
fi
cd ./dlTmp

url=$1
/usr/local/bin/wget "$url"
/usr/local/bin/nkf -w * >utf.txt

blogtitle=`head -n 50 utf.txt |
 grep -i -A 10 '<title>' |
 grep -B 10 '</title>' |
 tr -d '\n' |
 sed -e 's/<[^>]*>//g' |
 sed -e "s/ /_/g" |
 sed -e "s/[:.\/()=-]//g"`

echo $blogtitle

grep -i -E  'href=(http|"http|"https)://[a-z0-9/_\.\-]+(.jpg|.png|.gif|.jpeg).' utf.txt |
 sed -e  's/[Ss]rc=\"http//g' |
 tr ' ' '\n' | tr '=' '\n' |
 tr '"' '\n' | grep -E 'jpg$|jpeg$|png$|gif$'|
 grep -E '^http'  > list.txt

for file in `cat list.txt`
do
	/usr/local/bin/wget $file
done

zip -0 "$blogtitle".zip *.jpg *.gif *.png *.jpeg
cp "$blogtitle".zip "$saveLoc"/

cd ../
rm -rf dlTmp

echo '終了です'

ダウンロードには「wget」を使うことにした。
 また、文字コードの変更のために「nkf」が必要である。両方とも Homebrew でインストールできる(【Mac】 Homebrew を導入する | 林檎コンピュータ)。

Homebrew でインストールしたコマンドは、「/usr/local/bin/wget」のようにコマンドの場所を指示して書く。コマンドの場所は、ターミナルで which wget などと実行すれば出てくる。

画像は、アプリパッケージ内のリソースフォルダに「dlTmp」というフォルダを作って、そこにダウンロードする。
 ダウンロードした画像は、zip ファイルにしてデスクトップに出し、dlTmp は消去することにした。

[Create App] を押してアプリを書き出した。

URL をウィンドウにドロップすると、うまいこと動作してくれた。
 だいぶ雑な感じだが、わりと簡単に作れた気がする。

とりあえず完成だが、Platypus の「Profiles」メニューの、「Load Example」には、たくさんのサンプルがある。これを参考に、もう少しマシな形を考えたいものだ。