簡単に公開されているHTML(テーブル)からグラフを生成する方法
原発大丈夫でしょうか? だれも正確なことを答えられないかも知れませんが、原発の建物自体は大変な状態になっています。さらに、崩壊熱を冷却しようと現地では多くの人が本当に命がけで作業をされています。ありがとうございます。
パニックにならないためには、正しく判断していくことが大切です。感情に支配されたまま、冷静な判断をくだすことが難しいです。時には感情に従うことがいい時もあるのでしょうが、今はその時ではないと思っています。特に放射線に関しては・・・
全国各地で放射線の継続監視が行われ公開されています。大抵の場合それらは数値で公表されています。(参考:http://113.35.73.180/report/report_table.do)
このような数字の羅列を見て、増えている減っていると即座に判断するのは難しいですよね。過去の偉人がグラフを発明してくれて居るのでそれを活用したいのですが、グラフを生成するのも大変だし、そのデータがjsonじゃなくてhtmlでテーブルになっているのもまた大変ですよね。
つ importHTML
GoogleAppsのスプレッドシートには、importHTMLという関数があります。この関数は、どのURLの何の成分(li要素、table要素等)の何番目を抜いてくるかの引数を取ります。対象のテーブルを取得しスプレッドシート内に表示されます。
セル内で以下の関数を書くだけで利用できます。今回使用した物は
=ImportHtml("http://113.35.73.180/report/report_table.do","table",2)
最後の2は、ページ内で何番目のテーブルかを指定しています。
どのような挙動になるのか、ムービーを御覧ください。
スプレッドシートにさえなってしまえば後は、焼くなり煮るなり好きなように出来ます。
今回は、直近の24時間を折れ線グラフにしてみました。左が今で右に行くほど過去です。順調に放射線の量は下がってきているようです。
最新のグラフ:http://bit.ly/hSaVoZ
このように、誰でも簡単にスクレイピングから、グラフ生成まで簡単に出来るのは驚きです。
また、グラフになるだけでなく、オリジナルの情報を提供してくれているサーバーの負荷低減にも貢献できるかも知れません。
計画停電で、オリジナルのサーバーが落ちたとしても一定時間はキャッシュされるようなのでしばらくはグラフが閲覧可能です。30分間隔で、別シートにコピーするAppsスクリプトを書いてみたのですが、関数ごとコピーされてしまい数値のコピーができませんでした。やり方ご存じの方居たら教えてください。
追記
ある方から、やり方を教えてもらいました。
数値のみのコピーの仕方を書いてみたいと思います。 // コピー rangeToCopy.copyTo(tgt_sheet.getDataRange()); を // コピー rangeToCopy.copyTo(tgt_sheet.getDataRange(), {contentsOnly:true}); にすれば出来ます。
{contentsOnly:true}をオプションで渡せばいいみたいです。動作確認できました。有難うございます。
追記ココまで
特定シートから、別シートへデータをコピーするスクリプト
function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); // コピー元のシート var org_sheet = ss.getSheetByName('original'); // コピー先のシート var tgt_sheet = ss.getSheetByName('copied'); // もとのデータ範囲を取得 var rangeToCopy = org_sheet.getRange(1, 1, org_sheet.getMaxRows(), 9); // コピー rangeToCopy.copyTo(tgt_sheet.getDataRange(), {contentsOnly:true}); }