ruby,rails から graphviz を使う、家系図サイト構想。 google api のgraphvizも検討。

railsで家系図作成サイトを作ってみたい。この参考サイトを元に考えよう。

やっぱりgraphvizか。以前使ってみたけど、忘れてた。これはイケるかもしれない。

とりあえずRubyからgoogleAPIを呼び出してみた。 できた。

 

要は、rubygraphviz でoutデータ(って言うの?)を作って、googleAPIに引数で渡す。

ここではGraphvizのクラス自身を拡張して、mechanizeなどの方法でPOSTしてレスポンスを返すメソッドを実装する。

 

#!/home/hamtaro02/.rbenv/shims/ruby
require 'graphviz'
require 'mechanize'

class GraphViz
  def to_png_using_google_chart
    agent=Mechanize.new
    agent.verify_mode=OpenSSL::SSL::VERIFY_NONE
    response=agent.post(
      "http://chart.apis.google.com/chart",
      {
        "cht"=>"gv",
        "chl"=>to_s
      }
    )
    return response.body
  end
end

まずはRubyで普通にデータを構築する。

graph=GraphViz.new(:G, :type=> :digraph) do |g|
  g.world << g.hello
end

こんな記法もある。動的ならこっちのが良いね。(この例は作ってる内容が違うけど。)

graph=GraphViz.new(:G, :type=>:digraph)
s=graph.add_nodes("s")
p=graph.add_nodes("p")
q=graph.add_nodes("q")
graph.add_edges(s,p)
graph.add_edges(s,q)

例えば、ファイル出力する場合

File.open("XXXXXXX.png",'w+b') do |file|
  file.write(graph.to_png_using_google_chart)
end

例えば、標準出力に出力する場合

STDOUT.binmode
STDOUT.write graph.to_png_using_google_chart

ちなみに、GraphVizクラスを使って、ローカルのgraphvizpngを生成する場合

gv.output(:png=>"XXXXXXXX.png")

参考サイト

http://www.kkaneko.com/rinkou/rubydb/rubygraphviz.html

http://99blues.dyndns.org/blog/2010/02/graphviz-family-tree/

http://d.hatena.ne.jp/simply-k/20100705/1278326617

http://www.ownway.info/MovableType/MT-4.22-ja/mt-search.cgi?IncludeBlogs=1&search=ruby-graphviz

https://developers.google.com/chart/image/docs/gallery/graphviz

http://chalow.net/2011-02-15-3.html 

https://github.com/glejeune/ruby-graphviz/issues/10

http://www.cbrc.jp/~tominaga/translations/graphviz/dotguide.pdf

http://www.cbrc.jp/~tominaga/translations/pari_gp_tutorial/tutorial.pdf