- 締切済み
GoogleFeedApiで任意タイトルの付け方
サイト名の正規の取得方法は、 var feed = new google.feeds.Feed(”URL”); var title = rss.feed.title; document.writeIn(title); 多分?こんな感じなのでしょうけど、自分は、各サイトごとに指定したサイト名を表示させたいので、 http://wp.7zz.jp/news/ajax/2447.html ↑のサイトをほぼ全部参考にして、 var site = new Array(); site[0] ={ title:'GIZUMODO', url:'http://feeds.gizmodo.jp/rss/gizmodo/index.xml', disp_entry:2 }; ↑のようにサイの情報を配列に手入力して、 ~前略~ function init() { var site_count = 0; for (var i=0; i<site.length; i++){ // 読み込むRSSを設定 var feed = new google.feeds.Feed(site[i]['url']); feed.setNumEntries(site[i]['disp_entry']) //●↓追加 var title = site[i]['title']; //●↑ feed.load(function(rss) { if (!rss.error) { // RSSからサイトの情報を配列に格納 //●↓変更 channel['title'] = title; //●↑ channel['link'] = rss.feed.link; channel['favicon'] = "http://favicon.hatena.ne.jp/?url=" + channel['link']; channel['description'] = rss.feed.description; channel['author'] = rss.feed.author; ~後略~ }} みたいな小学生レベルの改変をしたのですが、全てのタイトル名が同じになってしまいます。 javascriptの入門書を読んだ程度の私に、どこがおかしいのか指摘お願いいたします。よろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- warpspace
- ベストアンサー率56% (83/147)
forループで複数サイトのRSSフィードを読み込んでいますが、feed.loadで実際に 読み込まれるのは、非同期に動作します。したがってforループが完了した時点で var title = site[i]['title']では配列の最後のタイトルが格納されています。 この状態でfeed.loadが順次、非同期で完了してくるのでタイトルがすべて同じに なるのだと思われます。 したがってひとつのサイトの場合と同じように、var title = rss.feed.titleで非同期 完了後にタイトルも取得する必要があります。
お礼
回答感謝です。同期、非同期が理解出来ていませんでした。 一応、 // RSSからサイトの情報を配列に格納 var title = site[site_count]['title']; channel['title'] = title; でうまくいきました。。