「クリップ オンライン」使えず…
会社の 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
}
| 固定リンク
「パソコン・インターネット」カテゴリの記事
- AmigaOSのHDDジオメトリ (つづき)(2017.05.29)
- AmigaOSのHDDジオメトリ (つづく…)(2017.05.23)
- Firefox41 で .keysnail.js がエラーしてた件(2015.10.12)
「日記・コラム・つぶやき」カテゴリの記事
- 本日のランチ(2010.07.26)
- 蝉の一生は短い…短い。(2010.07.22)
- ひさし鰤に(2010.07.04)
- 名古屋は初雪?…たぶん(2010.01.14)
「スクリプティング」カテゴリの記事
- Android の adb backup から一部だけリストアしちゃー(2014.08.22)
- Python の正規表現が激遅だと思ったら(2013.05.27)
- Pythonの日本語版HTMLヘルプ再構築(2013.03.07)
- migemo の ruby 1.9 対応 (NTEmacs + Cygwin)(2012.10.30)
この記事へのコメントは終了しました。


コメント