現在、ポータルをGoogle Sitesでコツコツ作成していますが、そうなると毎回出てくるのが、ニュースを受信できないか?といった要望。早い話が、RSSを受信して、自分たちに関連しそうなニュースを表示してみようという事です。ただ、この手のものは既にGoogleガジェットで結構出回っているので、手っ取り早くRSSを取得して表示したいのであれば、わざわざコードを書かずに、ガジェットにURL渡して貼り付けるほうが早いです。自分自身もそのやり方を採用しています。とはいえ、細かいカスタマイズが必要だとか、こだわりがあるだとか、そういった場合、どうしてもこれら出来合いのガジェットでは対応が難しい場合があります。
そんな時に、自分でガジェットを作ることが一番オススメなのですが、今回はあえてそこをGoogle Apps Scriptで取得して整形してみたいと思います。RSSと銘打ちましたが、今回はATOM形式で取得します。
Google Newsは実は日本のサイトでは公式にRSS出力出来ますといったことは表示されていません。代わりに全く利用価値の無いAlertというものを未だにやってたりします。しかし、実はRSSでもATOMでも取得出来るようになっています。そこで、今回は「仮想化」というキーワードを元に以下のURLでATOM形式で取得してみました。URL中のatomの文字列をrssにするとRSS形式での取得が可能になります。
http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=atom&q=%E4%BB%AE%E6%83%B3%E5%8C%96
ただ受信しても、表示する手段がないので、今回もHTML Servicesで整形して表示してみようと思います。非常に単純にリストにして表示しますが、ATOMの中で使用する項目はIDとTITLEのみです。
また、CSSを利用していますが、今回はその部分はコードから省略します。
function doGet(){
var output = HtmlService.createTemplateFromFile('atomman');
var html = output.evaluate();
return html;
}
// データ取得とパース
function parseXml() {
var url = 'http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=atom&q=%E4%BB%AE%E6%83%B3%E5%8C%96';
var myXm = UrlFetchApp.fetch(url).getContentText();
var myDoc = XmlService.parse(myXml);
var root = myDoc.getRootElement();
var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom');
// エントリーのタイトルとURLの塊を取得
var entries = root.getChildren('entry', atom);
return entries;
}
<style type="text/css">
・・・・・省略・・・・・
</style>
<div class="kousin">
<?
//parseしたデータを準備
var atomdata = parseXml();
var dataLength = atomdata.length;
var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom');
output.append("<div class=imglist><ul>");
//activeユーザと承認者が同一で未承認のものをリストアップして出力する
for(var i = 0;i<dataLength;i++){
//必要な情報を取得して、HTMLを組み立てて出力する
var title = atomdata[i].getChild('title', atom).getText();
var id = atomdata[i].getChild('id', atom).getText();
var tempid = id.split("=");
var url = tempid[1];
var contents = atomdata[i].getChild('content', atom).getText();
output.append("<div class='myClassName'>");
output.append("<li><a href='" + url + "' target='_blank'>" + title + "</a></li></div>");
}
output.append("<div></ul></div>");
?>
</div>