ここ数日 iBlog Spy に刺激されて、 FTP に自動で RSS ファイルをアップロードする方法を模索しておりましたが、漸くうまく行ったのでメモエントリ。
そもそも iBlog が日本語環境でも適切な RSS ファイルを出力してくれれば問題はないのですが、現状では iblogPatcher に頼らざるを得ません。ところが iblogPatcher は元々は .Mac 用に開発された物なので、現状では FTP に対応していません(【参考リンク】公開先が FTPサーバのときの iBlog とiblogPatcher 利用方法)。今まではこの Blog を設置しているロリポップに FTP でパブリッシュした上で、ローカルにもパブリッシュファイルを書き出し、そこに iblogPatcher の PublishAfter を適用、以前紹介した FTP mini に修正された rss.xml をドラッグドロップしてアップロード、と言う作業を毎回行っていました。
そこで今回 NcFTP Software という Terminal から利用するクライアントソフトを利用して自動化してみました。元々 Mac OS X には ftp と言うコマンドが用意されていますが、これだと機能が限定されていて、自動でログインなどが出来ない模様。じゃあ ncftp だと出来るのかと言うと、これもちょっと情報が錯綜していていささか往生しましたが、 ncftp に含まれる ncftpput と言うコマンドを利用する事で可能になりました。以下、手順です。
まず上記 NcFTP の本家サイトのダウンロードページからダウンロードします。 Mac OS X 用のインストーラも有りますので、難しい事は何も有りません。 中段辺りの Download NcFTP Client と有る下の 「Mac OS X 10.3」と言うリンクをクリックしてダウンロード、インストールします。
これはインストール後に Terminal で ncftpput と入力し return する事で見る事が出来ます。またこのモードから抜ける場合は Q キーを押すと普段のプロンプトに戻ります。
(mode1) ncftpput [flags] remote-host "remote-directory" "local-files..."
(mode2) ncftpput -f login.cfg [flags] remote-directory "local-files..."
(mode3) ncftpput -c remote-host "remote-path-name" < stdin
僕は2番目 (mode2) の方法を用いましたので、これを例に説明します。
login.cfg とは FTP ホストにログインする為のホスト、ユーザ名、パスワードを記述した設定ファイルです。 mi 等のテキストエディタで改行コードを LF にしたテキストファイルを以下のように作成します。
host (FTPホスト)これをホームフォルダ直下に「login.cfg」として保存します。
user (ユーザ名)
pass (パスワード)
次にこれが外部から閲覧されないようにパーミッションを設定します。但し、外部からホームフォルダにアクセス出来ない環境である場合、この限りでは有りません。ここは飛ばしてしまいましょう。
Terminal に以下をタイプして return します。
chmod 700 ~/login.cfg
次に Terminal に入力するコマンドラインです。普通にホームフォルダにいる状態のプロンプトに続けてタイプして動作しますし、これを元にコマンドファイルを作るのも手でしょう。
僕の環境を例に記述します。赤字は任意の文字列ですので、環境に合わせて変更して下さい。
ncftpput -f login.cfg -a /iblog "~/Sites/publish/iblog/rss.xml"
これだけだと何なので、一応各コマンドの意味を説明しておきます。
最後にコマンドの入力を自動化する為に iBlog Spy をちょこっと改造しました。本当はコマンドファイルを作成して、 iblogPatcher の PublishAfter 時に OPEN_FILES.plugin を用いて呼び出す方がスマートな気もするのですが、なぜか僕の環境では Finder 、若しくは iblogPatcher から呼び出した(要は Terminal への open コマンド)場合、コマンドファイルは連続して実行出来ません。なぜかアップルスクリプトからは連続してコマンドを実行する事が出来ます。一応例としてアップルスクリプトで Terminal にこのコマンドを渡して実行する例を書いておきます。
tell application "Terminal"
do script with command "ncftpput -f login.cfg -a /iblog '~/Sites/publish/iblog/rss.xml'"
end tell
※赤字は任意です。
これだけです。アップルスクリプトの場合、ターミナルに送るコマンドをダブルクォートで括る必要が有りますので、ローカルファイルのディレクトリはシングルクォートで記述しましたが、これでも問題なく動作しました。これをアプリケーション形式で保存して、 iblogPatcher から開く、と言う手も有ります。但し、この方法だといちいちアプリケーションとして起動してしまうので、ちょっと鬱陶しいです。そこで直接 iBlog Spy に記述してしまう事にしました。以下がその例です。
まずは iBlog Spy を Script Editor.appで開き、 property を設定しました。
--START settings の行の続いて Script Editor.app で「do script with command ib_pub_cmd」を検索します。その部分に続いて先程 property で設定したコマンドを呼び出すように追記します。具体的にはこうです。
property ib_pub_cmd : "iblogPatcher --blog myblog.txt publish after"
の下に
property ncftpput_cmd : "ncftpput -f login.cfg -a /iblog '〜/Sites/publish/iblog/rss.xml'"
と追記
tell application "Terminal"property に使用した「ncftpput_cmd」は何でも構いません。
activate
do script with command ib_pub_cmd
my wait_finish(now_pub_m_date, old_pub_m_date, target_pub_file)
do script with command ncftpput_cmd
my close_term()
end tell
※赤字が追記部分です。
以上で完成です。これで漸く FTP 環境でも iBlog を2クリックでプレビュー→パブリッシュが完了するようになりました。長い道のりだったぁ〜〜(^^;
[同日修正] ken_taka さんに「ちょっと冗長かも」とご指摘いただいて、上記スクリプトの改造個所を変更しました。ありがとうございます。
Posted by at 10:17
▼1年前はこんなこと書いてました...▼