Google Feed API (3/8)
作成:2011-06-08 08:21
更新:2011-06-08 08:34
更新:2011-06-08 08:34
■Google Japan Blogのフィードを利用してみる
では、実際に簡単なサンプルを作ってみましょう。ここでは、Google Japan BlogのRSSを読み込み、内容を表示してみることにします。
ここでは、ブロクの最新記事のタイトルだけを取り出して表示しています。下のリスト欄にサンプルコードを掲載しましたので実際に書いてアクセスしてみましょう。最近アップされた記事のタイトルが一覧表示されます。ここではsetOnLoadCallbackでOnLoad関数を実行していますね。このOnLoadで、Feedオブジェクトを作成し、loadメソッドでフィードの読み込みを行っています。
Ajax通信で受け取ったデータの処理を行っているのは、コールバック関数として用意したfeedLoaded関数内です。ここでは、受け取ったデータが引数のresult変数に渡されます。まず最初に、エラーのチェックを行います。
実行している処理部分では、まずデータを表示する<div>タグのDOMオブジェクトを変数に取り出した後、resultから順にデータを取り出して処理をしています。この部分を見ると、以下のような繰り返しになっていますね。
最後に、作成した<div>タグを、表示用のタグにappendChildで組み込みます。全体の流れがわかれば、そう難しいものではありませんね。
※setOnLoadCallbackを使わない方法
ざっとスクリプトを見ていきましたが、やっぱり「google.loadでロードしてからsetOnLoadCallbackで処理を実行して、そこからコールバック関数で……」というのは、ややこしいことは確かです。せめてもう少しシンプルな書き方ができないか、と思う人に、「google.loadで直接OnLoadを実行させる書き方」を紹介しておきましょう。
まぁ、たかだが1行減るだけなのでそれほど大きな違いはありませんが、「setOnLoadCallbackするのを忘れて動かない」というポカはよくやってしまいがちですので、こちらの書き方で覚えたほうが確実かも知れませんね。
※Google Japan BlogのRSS
http://feeds.feedburner.com/GoogleJapanBlog
ここでは、ブロクの最新記事のタイトルだけを取り出して表示しています。下のリスト欄にサンプルコードを掲載しましたので実際に書いてアクセスしてみましょう。最近アップされた記事のタイトルが一覧表示されます。ここではsetOnLoadCallbackでOnLoad関数を実行していますね。このOnLoadで、Feedオブジェクトを作成し、loadメソッドでフィードの読み込みを行っています。
Ajax通信で受け取ったデータの処理を行っているのは、コールバック関数として用意したfeedLoaded関数内です。ここでは、受け取ったデータが引数のresult変数に渡されます。まず最初に、エラーのチェックを行います。
if (!result.error) {……resultは、受け取ったXMLデータのテキストがただずらずらと保管されているのではなく、オブジェクトになっています。この中に、必要な情報が整理され保管されているのです。データが正しく受け取れたかどうかは「error」プロパティでチェックできます。!result.errorをチェックすることで、エラーがない場合にのみ処理を実行させることができます。実行している処理部分では、まずデータを表示する<div>タグのDOMオブジェクトを変数に取り出した後、resultから順にデータを取り出して処理をしています。この部分を見ると、以下のような繰り返しになっていますね。
for (var i = 0; i < result.feed.entries.length; i++) {……}result内の「feed」というオブジェクトに、取得したフィード情報がまとめられています。個々のデータ(「エントリー」と呼ばれる、各記事の情報をまとめたもの)は「entries」というプロパティに配列として保管されています。ですから、繰り返しを使い、ここから順にエントリーのオブジェクトをとり出し、そこから情報を調べていけばよいわけです。var entry = result.feed.entries[i];それを行っているのが、この部分です。まず、entries配列からエントリーのオブジェクトをとり出しておきます。そしてcreateElementで新たな<div>タグのDOMオブジェクトを作って、エントリーのタイトルをその中に組み込みます。エントリーのタイトルは、「entry.title」というように、エントリーオブジェクトのtitleプロパティで取り出せます。
var div = document.createElement("div");
div.innerText = entry.title;
container.appendChild(div);
最後に、作成した<div>タグを、表示用のタグにappendChildで組み込みます。全体の流れがわかれば、そう難しいものではありませんね。
※setOnLoadCallbackを使わない方法
ざっとスクリプトを見ていきましたが、やっぱり「google.loadでロードしてからsetOnLoadCallbackで処理を実行して、そこからコールバック関数で……」というのは、ややこしいことは確かです。せめてもう少しシンプルな書き方ができないか、と思う人に、「google.loadで直接OnLoadを実行させる書き方」を紹介しておきましょう。
google.load("feeds", "1",{"callback":OnLoad});
google.setOnLoadCallback(OnLoad); ↓google.load("feeds", "1",{"callback":OnLoad});こんな具合に、google.loadを実行する際、第3引数として{"callback":OnLoad}という連想配列を渡してやります。これで、ライブラリの読み込みが完了したら自動的にOnLoadを実行させることができます。つまり、setOnLoadCallbackは不要となるのです。まぁ、たかだが1行減るだけなのでそれほど大きな違いはありませんが、「setOnLoadCallbackするのを忘れて動かない」というポカはよくやってしまいがちですので、こちらの書き方で覚えたほうが確実かも知れませんね。
※Google Japan BlogのRSS
http://feeds.feedburner.com/GoogleJapanBlog
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=utf-8">
<title>Sample</title>
<style>
h1 {font-size: 14pt; font-weight:bold;
background-color:#DDF; padding:3px;}
</style>
<script src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("feeds", "1");
google.setOnLoadCallback(OnLoad);
function OnLoad() {
var feed = new google.feeds.Feed
("http://feeds.feedburner.com/GoogleJapanBlog");
feed.load(feedLoaded);
}
function feedLoaded(result) {
if (!result.error) {
var container = document.getElementById("container");
container.innerHTML = '';
for (var i = 0; i < result.feed.entries.length; i++) {
var entry = result.feed.entries[i];
var div = document.createElement("div");
div.innerText = entry.title;
container.appendChild(div);
}
}
}
</script>
</head>
<body>
<h1>Google Feed API</h1>
<p>Google Japan Blogの新着記事</p>
<div id="container">Loading...</div>
</body>
</html>
※関連コンテンツ