Google SketchUp の API は ruby !

http://sketchup.google.com/
http://sketchup.google.com/support/bin/search.py?query=ruby
先日公開された Google SketchUpAPI はなんと ruby*1 ! ということで rubyist の間では話題になってたりなかったりします。ということで早速使ってみて RSS を読み込んで表示する単純な Plugin を書いてみました。表示はこんな感じ。

API のドキュメントがまとまっている*2 し、サンプルコードもあるので ruby 使える人ならすぐにでも Plugin 書くことができると思います。使い方も簡単で Plugins ディレクトリに .rb ファイルを放り込むだけ。また window -> ruby Console から対話型のコンソールを使えるので簡単な動作テストが簡単にできるでしょう。

しかし、RSS を読み込むのに大きな問題点があったのです。それは SketchUp に組み込んである ruby では socket 周りが使えない、つまり http でデータの取得ができないのです。セキュリティ考えると解る気もしますが…。
というわけでどうしようもないので `` 使って windows にインストールしてある ruby 叩いてます…。また RSS::Parser も windows にインストールしてある ruby ライブラリの Path を LOADPATH に追加して使ってるので、下記 Plugin を動かすのに windows の ruby が必要だったりします。うーん。

とはいえ、ruby 使って簡単に操作や SketchUp 上のオブジェクトの作成ができるので、ruby 大好きな人は弄ってみると面白いと思いますよ。

以下 RSS 表示スクリプト。Plugins ディレクトリに rssreader.rb という名前で保存してから起動すると、Draw メニューの中に RSSReader というサブメニューが追加されていると思います。

require 'sketchup.rb'

$LOAD_PATH << 'C:\ruby\lib\ruby\1.8'
require 'rss/1.0'
require 'rss/2.0'


class RSSReader
  def initialize
    @model = Sketchup.active_model
    @entities = @model.entities
    @boxes = 0
  end

  def input
    uri = inputbox(['URL'], ['http://d.hatena.ne.jp/secondlife/rss'], "RSS URL").first
    rss_draw uri
  end

  def draw(title)
    @entities.add_text(
                       title,
                       [100 * (@boxes % 4), 10 + @boxes / 4 * 100,-1]
                      )
    @boxes += 1
  end

  def rss_draw(uri)
    source = `ruby -r 'open-uri' -e 'puts open("#{uri}").read'`
    RSS::Parser.parse(source).items.each do |item|
      draw item.title
    end
  end
end

if( not file_loaded?("rssreader.rb") )
    add_separator_to_menu($exStrings.GetString("Draw"))
    UI.menu($exStrings.GetString("Draw")).add_item($exStrings.GetString("RSSReader")) { RSSReader.new.input }
end

file_loaded("rssreader.rb")

*1:1.8.0 ベース

*2:インストールディレクトリ/ruby/docs/ 以下に html があります

CSSXSS脆弱性よりもっとヤバイ脆弱性がIEに発見されたようですね の対策

hoshikuzu | star_dust の書斎#P20060428MHTMLREDIRECT
指摘されているように、現在の WinIE では mhtml スキームを悪用して、クロスドメインの html を取得することが可能になってしまっています。これを利用したはまちちゃんの実証コードを踏んだ人も居るでしょう(実際に WinIE だと情報が抜かれるので、安易に WinIE で見に行かないで下さい)。
この対策として id:hosikuzu:20060428#P20060428MHTMLREDIRECT では以下のような対策方法が提示されています。

  • そもそも信頼できないページを見ない
  • IE使わない
  • アクティブスクリプトとAxtiveXを切る
  • レジストリでmhtmlスキームのハンドラを殺す

この中で一番簡単かつ安心なのは WinIE を使わないことですが、IE コンポーネントブラウザなどを使っており IE Love! な人は使うのを辞めるのはちょっと辛いですよね。
ここでは一番下のレジストリで mhtml スキームのハンドラを殺す方法をご紹介。mhtml なんてつかわねーよ!って云う人はレジストリ

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PROTOCOLS\Handler\mhtml

を削除すれば良いでしょう。

Windows Registry Editor Version 5.00

[-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PROTOCOLS\Handler\mhtml]

な .reg ファイルを作って実行するのも良いでしょう。それもめんどくさい人は http://rails2u.com/misc/mhtml_del.reg を落として実行しても良いかもしれません。実行は自己責任でお願いします。

追記

削除ではなくてデータの先頭に『!』をつける方法もあります。この方法の方が元に戻しやすいので良いと思います(コメント欄参照)