« 最近の晩酌のお供… | トップページ | Vista の音声認識… »

2007年2月14日 (水曜日)

「クリップ オンライン」使えず…

会社の PC で苦手なパワポのスライドを作っていたら、オンラインのクリップアートが取り込めません。
"Access Denied" と言われるので、パーミッションの問題っぽいですが、悪いのは MS なのか、会社の IT なのか…トホホ。

チェックマークをつけたクリップアートのダウンロードを選ぶと、 MS のサーバが ClipArt.mpf というファイルをくれるんですが、これを関連付けられている「クリップ オーガナイザ」なるアプリでインポートしようとすると、「カタストロフィ」が起こった(?…苦笑)らしきメッセージが表示されて失敗してしまいます。
.mpf ファイルは、「メディアパッケージファイル」らしいですが、中身は xml で、ダウンロードするよう指定した各クリップアート画像が Base64 でエンコードされて格納されているようです。

最近ちょうど rexml をかじり始めたとこだったので、この .mpf ファイルからクリップアート画像を抽出するだけのスクリプトを書いてみました。 実際は、 この .mpf ファイルには各クリップアート画像に関するその他の情報(サイズやカテゴリ等)も含まれています。

XPath がイマイチ判ってなくてパスが決め打ちだったり、エラー処理が不足していたり、そもそも rexml が使えてなかったり、 ruby らしくなかったり? ^^;; すると思われ恥ずかしながらも、備忘録代わりに貼っておきます。

取敢えず、このスクリプトで抽出したファイルを "My Documents\My Pictures" (日本語版だと "マイ ドキュメント\マイ ピクチャ" ?)に置くと、 MS Office アプリからこれらクリップアートを利用出来るようになりました。更に取り込んだクリップアートがちゃんとカテゴリ毎に分類されていたので、最初失敗していたインポート処理で一部情報は取り込まれていたのかも知れません。

めでたしめでたし :-)

 


#!ruby -Ku

require "rexml/document"
require 'base64'

ResXPath = "/D:multistatus/D:response/D:propstat/D:prop/C:resource"

file = File.new(ARGV.shift)
doc = REXML::Document.new(file)

doc.elements.each(ResXPath) { |res|
  name = res.elements["C:filepath"].text
  data = res.elements["C:contents"]
  enc  = data.attributes["dt:dt"]

  if enc == "bin.base64"
    begin
      File.open(name, "wb") { |file|
        file.write(Base64.decode64(data.text))
      }
    rescue
      STDERR.puts "Error while writing to #{name}: #{$!}"
    end
  else
    STDERR.puts "Unknown encoding \"#{enc}\" found while writing to #{name}..."
  end
}

|

« 最近の晩酌のお供… | トップページ | Vista の音声認識… »

スクリプティング」カテゴリの記事

パソコン・インターネット」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/144752/13901885

この記事へのトラックバック一覧です: 「クリップ オンライン」使えず…:

« 最近の晩酌のお供… | トップページ | Vista の音声認識… »