2014年10月6日月曜日

HubotからWinSCPでlsが取れない

Redmineのチケット上で指定されたファイルをWebDAVで自動ダウンロードできるようになった。


サーバ上にあるファイルの一覧を出したい


だが、指定ファイルが存在しなかったときが問題だ。

「Not found」
ってメッセージはREST APIでRedmineのチケットに書き込めるようになった。

一歩進んで、
「今あるのはこれらのファイルですよ?」
ってのもチケット上に出したい。

が、一筋縄ではない


WinSCP .NET AssemblyサイトのJScriptサンプル
http://winscp.net/eng/docs/library_session_listdirectory#example
だと、lsの結果をnew Enumerator()でめでたく列挙子化できている。

だがEnumeratorはnode.jsにはない。
http://msdn.microsoft.com/ja-jp/library/ie/6ch9zb09(v=vs.94).aspx

node.jsには列挙子みたいなものがないようだ。
あったとしても、JScriptと同じ方法でCOMコレクションを扱える保証はない。

ArrayとかObjectでやってみたけどダメ。

いろいろ頑張ってみた。
けれどもできない。

というか、無理ぽ


結論としては、node.js用win32oleでCOMコレクション対応が未実装なのが原因だった。

作者さんが
https://github.com/idobatter/node-win32ole
「can not handle some COM VARIANT types, array etc.」
と言っちゃってる。
だから間違いない。

発想の転換


まあ、WebDAVのlsだったら単に普通にHTTPで
http://username:password@example.com/path/
からGETしたものをCheerioでほのぼのスクレイプすればいいような気もしますが。
https://github.com/cheeriojs/cheerio


0 件のコメント:

コメントを投稿