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

解決済みの質問

google feed apiを使い分けたい

google ajax feed apiですが、下記コードを書いて
"rss_url"部分を引数にして同一ページ内でURLの違うものを複数
使用したいのですが、やり方がわかりません。
理想は<div id = "feed"></div>の
id = ""の部分を変更してURLごとに使い分けたいのですが、
どうすればいいでしょうか?

google.load("feeds", "1");
function initialize() {
var feed = new google.feeds.Feed("rss_url");
feed.setNumEntries(5);
feed.load(function(result) {
if (!result.error) {
var container = document.getElementById("feed");
}
});
}
google.setOnLoadCallback(initialize);
このコードだと<div id = "feed"></div>を記述すればうまく実行されます。

試しに
google.load("feeds", "1");
function initialize(rss_url, id) {
var feed = new google.feeds.Feed(rss_url);
feed.setNumEntries(5);
feed.load(function(result) {
if (!result.error) {
var container = document.getElementById(id);
}
});
}
google.setOnLoadCallback(initialize);
var test = new MyRssReader("rss_url", "test1");
として
<div id = "test1"></div>としてみましがたうまくいきませんでした。

投稿日時 - 2012-01-19 14:12:14

QNo.7253624

暇なときに回答ください

質問者が選んだベストアンサー

>> No.1 補足

<script type="text/javascript" src="http://www.google.com/jsapi?key=KEY"></script>
<script type="text/javascript">
google.load("feeds", "1");

// myGoogleFeed関数宣言
function myGoogleFeed(settings) {
 var feed = new google.feeds.Feed(settings.url);
 feed.setNumEntries(settings.entries);
 feed.load(function () {
  return settings.callback.apply(settings.context || settings, arguments);
 });
 return feed;
}

function initialize() {
 // myGoogleFeed使用例
 myGoogleFeed({
  url: 'http...', // URL
  entries: 3, // 件数
  context: { id: 'feed1' }, // コールバック関数のthis値
  callback: func // コールバック関数
 });

 myGoogleFeed({
  url: 'http...',
  entries: 4,
  context: { id: 'feed2' },
  callback: func
 });

 function func(result) {
  if (!result.error) {
   var container = document.getElementById(this.id);
   // 処理
  }
 }
}
google.setOnLoadCallback(initialize);
</script>

<div id = "feed1"></div>
<div id = "feed2"></div>


上記が基本的な記述(使い方)になります。
initialize関数内だけで利用するなら、myGoogleFeed関数宣言もinitialize関数の中に入れて構わないです。

要は

google.load("feeds", "1");
function initialize() {
var feed = new google.feeds.Feed("rss_url");
feed.setNumEntries(5);
feed.load(function(result) {
if (!result.error) {
var container = document.getElementById("feed");
}
});
}
google.setOnLoadCallback(initialize);

この上手く実行されるinitialize関数の中身をmyGoogleFeed関数に移しただけですから、initialize関数の中で実行すればいいです。

投稿日時 - 2012-01-21 13:40:22

お礼

正常に動作させることができました。
すごく丁寧な回答ありがとうございました。
今後のプログラムに生かせそうです。

投稿日時 - 2012-01-22 10:30:28

ANo.2

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

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

回答(2)

ANo.1

function myGoogleFeed(settings) {
 var feed = new google.feeds.Feed(settings.url);
 feed.setNumEntries(settings.entries);
 feed.load(function () {
  return settings.callback.apply(settings.context || settings, arguments);
 });
 return feed;
}


// myGoogleFeed使用例
myGoogleFeed({
 url: 'http...', // URL
 entries: 3, // 件数
 context: { id: 'feed1' }, // コールバック関数のthis値
 callback: func // コールバック関数
});

myGoogleFeed({
 url: 'http...',
 entries: 4,
 context: { id: 'feed2' },
 callback: func
});

function func(result) {
 if (!result.error) {
  var container = document.getElementById(this.id);
 }
}


こんな感じで。
特に難しいことはやってないですけど、不明な点があれば補足下さい。

投稿日時 - 2012-01-20 10:14:33

補足

何点かわからないところがあります。
まず
google.load("feeds", "1");
google.setOnLoadCallback(myGoogleFeed);
の記述ですが、これは
function myGoogleFeed(settings) {
の手前つまり

google.load("feeds", "1");
google.setOnLoadCallback(myGoogleFeed);
function myGoogleFeed(settings) {
としておけばよろしいでしょうか?

もうひとつ実際の使い方がよくわかりません。

<script type="text/javascript">
</script>
の間に教えていただいた処理を記述し、表示したい箇所で
<div id = "feed1"></div>
<div id = "feed2"></div>
とするとういうことでしょうか?
しかし、上記方法は試してみましたが、うまくいきませんでした。

投稿日時 - 2012-01-21 08:25:43

あなたにオススメの質問