みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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の入門書を読んだ程度の私に、どこがおかしいのか指摘お願いいたします。よろしくお願いいたします。

投稿日時 - 2013-06-09 16:50:50

QNo.8126407

暇なときに回答ください

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

forループで複数サイトのRSSフィードを読み込んでいますが、feed.loadで実際に
読み込まれるのは、非同期に動作します。したがってforループが完了した時点で
var title = site[i]['title']では配列の最後のタイトルが格納されています。
この状態でfeed.loadが順次、非同期で完了してくるのでタイトルがすべて同じに
なるのだと思われます。
したがってひとつのサイトの場合と同じように、var title = rss.feed.titleで非同期
完了後にタイトルも取得する必要があります。

投稿日時 - 2013-06-09 21:40:39

お礼

回答感謝です。同期、非同期が理解出来ていませんでした。
一応、
// RSSからサイトの情報を配列に格納
var title = site[site_count]['title'];
channel['title'] = title;
でうまくいきました。。

投稿日時 - 2013-06-12 16:42:20

あなたにオススメの質問