Webnail AppleScript
たくさんの Web ページを自動巡回して、そのサムネイル画像を撮影する AppleScript アプレット。
というかほとんど、「CSSでイケてるデザインサイトリンク集 (Gecko サムネイル版)」ページ作成のためだけに作ったようなモノ。
「WEBページがキオスクになる日 中編」にて配布されてるソフトと同じような事を MacOSX 上で出来ないかと考え、 AppleScript でムリヤリ実現してみた次第。
使用方法
- URL リストファイル (list.txt) の準備。巡回する URL をつらつらリストアップしてください。一行につき URL を一つ。最後の行の行末にも改行を入れてくださいな。改行コードは CR じゃないとマズイです。
#
で始まる行はコメント扱いで、無視されます。
- Camino の環境設定ダイアログにて、 JavaScript をオン、ポップアップブロックをオフに設定。これを行わないと巡回できません。
- システム環境設定の「省エネルギー」ペインにて、ディスプレイのスリープを「しない」に設定。巡回撮影処理中にディスプレイがスリープしてしまうと、真っ黒な画面しか撮影できないため。
- 同じくシステム環境設定ダイアログの「スクリーンエフェクト」の「始動設定」ペインにて、「スクリーンエフェクトを開始するまでの待ち時間」を「起動しない」に設定。巡回撮影処理中にスクリーンセーバが発動してしまうと、スクリーンセーバの画面ばかりが撮影される罠にハマります(笑)。
- 以上が準備できたら、 Webnail (GC) か Webnail (GI) のどちらかをダブルクリックして起動。
以後、処理が完了するまで、他の作業は事実上不可能になるです(理由は後述)。
撮影したサムネール画像ファイルと一覧用 HTML は、保存用フォルダ (result フォルダ) へ納められていきます。巡回撮影が完了したら、保存用フォルダが Finder で開かれて、終了。
動作原理
- ウインドウサイズも位置もばっちり決め打ちした Camino でページを開く
- Camino がページのロードを完了したかどうかを AppleScript 側から知る術は無いので、とりあえず 10 秒待つ。
- シェルコマンド
screencapture
で画面全体のスクリーンショットを取得し、クリップボードへ格納。
- クリップボードに格納された画像から、Camino のページ表示域だけを切り抜き(そのためにウインドウ位置とサイズを決め打ちする必要があった)、縮小、 JPEG あるいは PNG 形式でファイル保存
- それをしながら、 HTML を生成して、ファイル出力。
本家の Webnail.exe は IE コンポーネントを使ってるようで、「ページ表示」「ブラウザウインドウ中の表示を画像データとして取得」「そこからサムネール画像を生成保存」という一連の処理を、アプリ単体で内部完結させる事が出来てます。よってアプリを裏側で作動させてても問題なく画面撮影が出来る。
しかし上記動作原理のように、 AppleScript でブラウザウインドウ中の表示画面を得るには、ブラウザを操って画面上に実際に事を起こし、それをうまいこと撮影するしか無い。撮影に失敗しないような仕掛けもいろいろ必要。そのために「アプレットの動作が終わるまで他の作業が事実上不可能」な状態となっちゃうわけでして。
まぁ逆にいえば、複数の既存アプリを連携制御する事によって「不可能を(ある程度)可能にする」というのが AppleScript の存在意義であり真骨頂でして。
FAQ
- なんで Safari じゃなくて Camino ナノデスカ。
-
- ぼくの今現在のメインブラウザが Camino だから。
- 「 HTML/CSS の実装度が現在最強である Gecko ブラウザでの表示をサムネールにできたら」というのがそもそもの発端だから。Webnail.exe は Windows IE での表示画面をサムネールにする物だけど、しかし HTML/CSS を激しくダイナミックかつ適正に使ってるサイト作者の中には、 WinIE での表示 (CSS 実装度) が不愉快である人も少なくない。ハードコアな人々になると Gecko 以外の事なんか考慮してなかったりする(標準仕様通りに正しく記述してる以上、腐ったブラウザでどうなろうと構わない…という厳格な立場は間違った考えではない)。もちろん Safari の HTML/CSS 実装は WinIE なんか比較にならん程マシではあるけど、 Gecko よりは見劣りする。
- Safari を使う様にする書き換えはたぶんカンタンだとおもうので、自力でヨロシク。
- あまりに非実用的ですよ?
- そのとおりですが何か。「 Web ページ群のサムネール画像を作る」という本来の目的よりも、ソレを AppleScrpt で実現するという手段それ自体が目的になっちゃった、ただの日曜スクリプター的趣味活動の産物ですからして。
- GraphicConverter も GraphicImporter OSAX も持ってないけど、他の AppleScript 対応のグラフィックツールなら持ってるですが?
- 自力でなんとかしちゃってください
- Safari のコアである例の Framework を使ったアプリなら、単体で動作させられるんじゃないのですか?
- ぼくにはそんなんムリです。作ったら公開キボンヌ。 Gecko エンジン利用だとなおいいのだけど…。
- たくさんのページを巡回させると時間がかかるし、その間何もできないから困ります
- 寝る前に仕掛けるとか。
- たくさんのページを巡回させた時の出力 HTML ファイルがなんかブッ壊れてる時があるような?
- 原因不明です。 AppleScript の限界に達した瞬間を刻み込んでいるのかもしれない。
- うごきません
- しりません。