ruby,rails から graphviz を使う、家系図サイト構想。 google api のgraphvizも検討。
railsで家系図作成サイトを作ってみたい。この参考サイトを元に考えよう。
やっぱりgraphvizか。以前使ってみたけど、忘れてた。これはイケるかもしれない。
とりあえずRubyからgoogleのAPIを呼び出してみた。 できた。
要は、ruby の graphviz でoutデータ(って言うの?)を作って、googleのAPIに引数で渡す。
ここでは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クラスを使って、ローカルのgraphvizでpngを生成する場合
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