FTPで最近のWinAmp Playlistを表示する

WinAmpでOddSock's Do Somethingプラグインを使用して、トラックバックを使って現在プレイしているファイルの情報をMovableTypeに表示させるというアイデアは、曲が変わるたびに送信されるトラックバックの洪水に飲まれて断念しました。

その際、Do Somethingプラグインがファイルを生成したり、それをFTPでアップロードしたりすることができるのが分かったので、これで何とかならないかな、と思ったところ、

Do Something Plugin (1)

で実行されている人がいました。

上記サイトの手順をもとに自分の手順を記録。

ちなみに環境は、

MovableType 2.661 + WinAmp 5.0.2 + Do Something Plugin 2.12 + ロリポップ
(MovableTypeはUTF-8で動作、WinAmpは非日本語化)

です。もっとも、MovableTypeの機能は利用していませんので、MovableTypeでないサイトでも同様の手法でできるはずです。表示したいhtmlがシフトJISなら後半のCGIを使う部分の手順が不要です。

また、サーバーがSSIに対応している必要があります。

Do Somethingプラグインは、ダウンロードしてきて、インストーラーでデフォルト設定のままインストールすればOKです。

次にプレイリストを作成するためのテンプレートファイルを作成します。

WinAmpのPluginsフォルダに保存するのが妥当かな。
(C:\Program Files\Winamp\Plugins\pltmpl.htmlとか)
サイトのエンコードに関係なくシフトJISで設定してみました。

そしたら、Winampを起動して、
右クリック→Options→Preferencesとクリックして、
Plug-insのGeneral PurposeとクリックするとDo Something Pluginがありますのでそれをダブルクリック。

dosomething0.gif

Do Something!の設定画面で
Disable Pluginのチェックを外し、
Enable ID3 Info Gatheringをチェックします。

※トラックバックから更新にチャレンジしたことのある方は、トラックバック送信用のSubmit A URLの設定は削除しておくこと。

ActionsでGenerate HTML Playlistを選択して、
Template Inの欄にさっき作ったファイルのパスを入力します。
(C:\Program Files\Winamp\Plugins\pltmpl.htmlとか)
Template Outの欄に出力するファイルのパスを入力します。
(D:\kirishima.it\mt\playlist.htmlとか。私はサーバーにアップロードするサイトのイメージのあるフォルダに保存しています)
そしたらAddボタンを押します。するとAction Listに今作ったGenerate HTML Playlistが追加されます。

dosomething1.gif

こんどはActionsでFTP A Fileを選択します。
Local FileにはさっきのTemplate Outに入力したものとまったく同じものを入力。
Remote FileはFTPサーバー上に配置する位置とファイル名(/mt/playlist.htmlなど)
FTP HostとUsername、Passwordはプロバイダーから提供されているFTPクライアントに設定する内容そのものです。
そしたらAddボタンを押すと、Action ListのGenerate HTML Playlistの下にFTP A Fileが追加されます。

dosomething2.gif

Show Status WindowとEnable Error Messageはうまくいかないときにチェック入れて動作を確認すればいいと思います。
(Show Status Windowにチェック入れておくとFTPに失敗するとエラーメッセージが出ます。
Enable Error Messageはどこにエラーが保存/表示されるのか不明…)

できたら、OKをクリックして、Closeをクリックして、WinAmpに戻ります。

念のため、WinAmpを終了して、再度起動しましょう。

適当な曲を選んで再生したら、

指定したローカルファイルが作成されているか、
先ほど指定したサーバー上の位置にファイルがアップロードされているか確認します。

※ファイヤーウォールソフト等でWinAmpのインターネットへの接続を遮断していないか要確認

無事作成・アップロードされていたら、

こんどは、MovableTypeの適当なところに、SSIの記述をします。
※SSIに対応したサーバーでなければできません。
※.htaccessの設定の必要があるサーバーもあるかもしれません。

私のMovableTypeはUTF-8で運用していますが、Do SomethingプラグインはUTF-8のHTMLファイルを書き出せない(シフトJISで書き出している様子、というかMP3ファイル内の日本語のタグがシフトJISなんでしょうね)ので、Jcode.pmを利用する簡単なCGIスクリプトを作成し、アップロードされたファイルをUTF-8に変換してはき出すようにしてみました。

MovableTypeがEUCでもJcode.pmが利用できる環境の人はutfconvert.cgiの

print jcode($_)->utf8;

print jcode($_)->euc;

にすればいいのかな(たぶん)。それかできる人はjcode.plでシフトJIS→EUCを変換するようにすればいいかと思います。
※ogohさんはご友人のSEの方に作って頂いて実現したようです。

ogohさん提供のCGIを掲載しておきます。(別途要jcode.pl)
eucconvert.cgi v1.00

また、MovableTypeとは関係なくてシフトJISの人は、CGIを利用せずに直接ファイルをインクルードすればいいでしょう。

UTF-8環境の人は、Jcode.pmが利用できるなら、
utfconvert.cgi v1.00
を利用してください。

解凍してutfconvert.cgiのPerlへのパスと$filenameを適切に変更して、
/mtフォルダに配置して
パーミッションを755とか実行できるものに変更します。

そしてMain Indexテンプレートなどに、

<!--#include virtual="./utfconvert.cgi" -->

などと記述します。
(ロリポップはMain Indexの拡張子を.shtmlに変更して、いままで作成していたindex.htmlをFTP等で削除する必要アリ)

以上設定が終わったら、Main Indexをリビルドして、トップページを表示させてみてください。SSIが正しく実行されれば、テンプレートの所定の位置に、先ほどWinAmpがアップロードしたplaylist.htmlの内容が表示されているはずです。

[an error occurred while processing this directive]

とか表示されている時は、SSIのエラーなので、サーバー環境や、SSIの記述、Main Indexファイルの拡張子など、SSIをチェックし直してみてください。

あとは、WinAmpのDo Somethingプラグインが曲が変わるたびに新しいplaylist.htmlをアップロードしてくれますので、訪問者は、現在サイトの管理者が聴いている曲が分かるようになっているはずです。
(※曲が「変わる」時に反映されるようで、同じ曲を再生し直したりするだけだと、設定の変更等が反映されないケースがありました)


余談ですが、

以前簡単に試してみたときに、タグを記述しても、何も情報が入らなくて困ってそのまま放置していたのですが、原因が判明しました。

Do Somethingプラグインが取得するタグはID3v1 TagID3v2 Tagは無視される

ということのようです。
実は私のMP3ファイルはほとんど全て、ID3v2タグしか持っていないのです。

そりゃあファイルがアップロードされても曲名やアーティスト名は埋まらないよね、と納得したモノです。

2005.5.16追記
このDo Somethingプラグインを改造された方がいらっしゃるようです。
私自身はまだ試していませんが、すごそうなので。
MP3のID3v2以外にも
WAV (.wav)
TwinVQ (.vqf)
WindowsMedia (.wma)
OggVorbis (.ogg)
Monkey's Audio APE Tag v1/v2 (.ape)
からもタグ情報を読み込めるようにしました。
(mp3infpのライブラリ使用)


イソプロピルアンチピリン: DoSomething Plugin 改造版

ちなみに、WinAmpでプレイリストでファイルを右クリックして「View File Info」を選ぶと、

Copy to ID3v1

っていうボタンで一発でID3v1タグにも入力できるのですが、全ファイルやるとなると面倒です。SuperTagEditorとかである程度一括処理はできますが、数台のPCに分散しているMP3ファイルの整合性にも問題が…。

ということで、

%%CURRENTSONG%%
%%CURRENTSONGLENGTH%%

などは比較的安全な(きちんと動作する)タグですが、

%%CURRENTSONGTITLE%%
%%CURRENTARTIST%%

などは(私的には)空欄になってしまう率の(非常に)高いタグということでした。
(テンプレート通りに情報が入らないという方はMP3ファイルのタグをご確認下さい)
で、無事にFTPでサイトにアップロードされているのが確認できました。


また、自分のMovableTypeの文字コードがUTF-8な罠にはまってしまいました。

……そのままインクルードしても漢字読めないじゃん……。

Do Somethingプラグインにそこまで求められないので、SSIで呼び出されて、指定されたファイルをUTF-8ではき出すようなCGIと組み合わせるしかないかな、と思って簡単なCGIを作成して組み込んでみました。

さいわい、サーバーがJcode.pmに対応しているので、それを利用します。

ファイル名とか引数で渡したり、エラー処理をキチンとしたりすれば汎用性が上がるのでしょうが、そんなことやる気は毛頭ないので、機能オンリーです。

utfconvert.cgi v1.00

2004.3.5 まぎらわしいのでテンプレートファイルをpltmpl.htmlに変更しました。

2004.3.12 それでもうまくいかない人のためのチェックリスト。

・トラックバックで行なうPlaylistに挑戦したことがあり、そのときと同名のファイルをFTPで更新しようとしている場合、以前作成したPlaylist用のカテゴリを削除すること。またトラックバック送信用のSubmit A URLは削除しておくこと。または同じファイル名でやらない。
・ファイヤーウォールの設定でWinAmpをブロックしていないか確認する。
・Jcode.pmを力業でMovableTypeに導入している場合、モジュール組み込みの方法を検討するか、utfconvert.cgiを改造すること。
・再生しているMP3がID3v1タグを持っていないのに、ID3v1タグに依存したテンプレートになっていないか確認する。

一歩進めて、曲データを元にAmazonで検索するのにも挑戦してみています。