Google Feed APIを使い分けたい

このQ&Aのポイント
  • Google Feed APIを使用して、複数のURLを同一ページ内で使い分けたい方法を教えてください。
  • 「<div id="feed"></div>」の部分をURLごとに変更し、Google Feed APIを使用して情報を表示したいです。
  • 既存のコードではうまく実行されないため、試しにIDを指定して実行してみたのですが、うまくいきませんでした。
回答を見る
  • ベストアンサー

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>としてみましがたうまくいきませんでした。

  • igniz
  • お礼率52% (10/19)

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

  • ベストアンサー
  • my--
  • ベストアンサー率89% (91/102)
回答No.2

>> 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関数の中で実行すればいいです。

igniz
質問者

お礼

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

その他の回答 (1)

  • my--
  • ベストアンサー率89% (91/102)
回答No.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);  } } こんな感じで。 特に難しいことはやってないですけど、不明な点があれば補足下さい。

igniz
質問者

補足

何点かわからないところがあります。 まず 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> とするとういうことでしょうか? しかし、上記方法は試してみましたが、うまくいきませんでした。

関連するQ&A

  • Google AJAX Feed API

    Google AJAX Feed APIでRSSを読み込んでタイトルなどの文字のみの表示をすることはできたのですが、(下の記述でやっています。) 画像が投稿されているブログ記事の画像を読み込み、表示させることはできるのでしょうか? その場合の方法はどのように、すればできるのでしょうか? お手数をおかけしますが、よろしくお願い致します。 <script type="text/javascript" src="http://www.google.com/jsapi?key="></script> <script type="text/javascript"> google.load("feeds", "1"); function initialize() { var feed = new google.feeds.Feed("http://");  <!--表示したいエントリー数--> feed.setNumEntries(10); feed.load(function(result) { if (!result.error) { var container = document.getElementById("feed"); for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var div = document.createElement("li"); var a = document.createElement("a");a.href = entry.link;  <!--別窓で表示しない場合は削除してください--> a.target = "_blank" ; a.appendChild(document.createTextNode(entry.title)); div.appendChild(a); container.appendChild(div); } } }); } google.setOnLoadCallback(initialize); </script>

  • Google AJAX Feed APIキー

    http://okwave.jp/qa/q7289256.html ↑こちらの記事を参考にしてサイトのTOPページにWPのタイトル表示を試みました。 表示はされるものの、そのタイトルを更にリンク(各記事にとぶ)にしたいのですが、 以下のソースのどこをいじればリンクになるのか教えて下さい。 ------------------------------------------------------- ■タイトル表示させたいページの<head>内に以下入れる。 <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("feeds", "1"); function initialize() { var feed = new google.feeds.Feed("★RSS★"); feed.load(function(result) { if (!result.error) { var container = document.getElementById("feed"); for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var div = document.createElement("div"); div.appendChild(document.createTextNode(entry.title)); container.appendChild(div); } } }); } google.setOnLoadCallback(initialize); </script> ■HTMLのタイトル表示させたい部分に以下入れる。 <div id="feed"></div> ------------------------------------------------------------------------------- よろしくお願い致します。

  • Google AJAX Feed APIについて

    ブログのRSSを使って自動的にホームページに新着ブログ記事の日付とタイトルを表示されるようにしたいと思い、Google AJAX Feed APIを使用しました。 下記のソースだとこのように表示されます。 ・タイトル(2009年6月22日) ・タイトル(2009年6月20日) 表示方法をもう少し変えたいんですが、文字サイズと行間の変更はどのようにすれば可能か、ご存知の方は教えて下さい。 1.文字サイズをもう少し小さく(10pxに)したい 2.行間がくっ付いているのでもう少し広くしたい <script type="text/javascript" src="http://www.google.com/jsapi?key=APIキー"></script> <script type="text/javascript"> google.load("feeds", "1"); function initialize() { var feed = new google.feeds.Feed("フィードのアドレス"); feed.setNumEntries(10); feed.load(function(result) { if (!result.error) { var container = document.getElementById("feed"); for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var div = document.createElement("li"); var a = document.createElement("a"); a.href = entry.link; a.target = "_top" ; var date = new Date(entry.publishedDate); a.appendChild(document.createTextNode(entry.title + " (" + date.toLocaleDateString() + ")" )); div.appendChild(a); container.appendChild(div); } } }); } google.setOnLoadCallback(initialize); </script> <div id="feed"></div>

  • Google AJAX Feed APIで、ホームページにアメブロRS

    Google AJAX Feed APIで、ホームページにアメブロRSSを表示する際、「PR」広告を排除したいです。 現在のソースは以下の通りです。 ------------------------ <script type="text/javascript" src="http://www.google.com/jsapi?key=・・・・・・"></script> <script type="text/javascript"> google.load("feeds", "1"); function initialize() { var feed = new google.feeds.Feed("http://feedblog.ameba.jp/rss・・・・・"); feed.setNumEntries(5); feed.load(function(result) { if (!result.error) { var container = document.getElementById("feed"); for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var dd = new Date(entry.publishedDate); // now var yearNum = dd.getYear(); if (yearNum < 2000) yearNum += 1900; var m = dd.getMonth() + 1; if (m < 10) {m = "0" + m;} var d = dd.getDate(); if (d < 10) {d = "0" + d;} var date = yearNum + "." + m + "." + d + " "; container.innerHTML += "<p>" + date +" <a href='" + entry.link + "' target='_blank'>" + entry.title + "</a></p>"; } } }); } google.setOnLoadCallback(initialize); </script> (ボディー内) <p><div id="feed"></div></p> ------------------------ どこをどのようにすればいいのでしょうか? どうぞ宜しくお願いいたします。

  • Google Feed APIの表示について

    複数ブログの新着RSSを、自分のHPに表示させたいと考えております。 <script type="text/javascript" src="https://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("feeds", "1"); var getRssFeed = function (_id, _urls, _length) { if(!_id || !_urls || (!(_urls instanceof Array))) return; //変数 var entriesArray = new Array(); var complete = 0; //読み込み var init = function () { for (var e = 0; e < _urls.length; e++) getFeed(_urls[e], e) }; function getFeed(_url, _num) { var feed = new google.feeds.Feed(_url); if(_length) feed.setNumEntries(_length); feed.load(function(result) { if (!result.error) { html = '<h2>' + result.feed.title + '</h2>'; html += '<ul>'; for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; var pdate = new Date(entry.publishedDate); var Y = pdate.getFullYear(); var m = pdate.getMonth() + 1; m = (m < 10)? '0' + m:m;//月数字を2桁に var d = pdate.getDate(); d = (d < 10)? '0' + d:d;//日数字を2桁に var date = Y + '/' + m + '/' + d; html += '<li>'+ date +' <a href="' + entry.link + '" target="_blank">' + entry.title + '</a>'; html += '</li>'; } html += '</ul>'; entriesArray[_num] = html; complete++; if(complete == _urls.length){ echo(); } } }); }; //出力 var echo = function () { var container = document.getElementById(_id); for (var e = 0; e < _urls.length; e++) container.innerHTML += entriesArray[e]; }; google.setOnLoadCallback(init); }; getRssFeed("feed", [ 'RSS1', 'RSS2', 'RSS3', 'RSS4' ], 3); getRssFeed("feed", [ 'RSS5', 'RSS6', 'RSS7', ], 3); </script> <body> <div id="feed"></div> </body> 現在、上記のようになっておりますが、後半の getRssFeed("feed", [ 'RSS1', 'RSS2', 'RSS3', 'RSS4' ], 3); が、Feedが4つまでではないと何も表示されなくなってしまうので Feed4つ区切りのものを複数書いている状態ですが、リロードをするたびに RSS5~7のブロックが上にきたりと、表示順序が変わってしまいます。 リロードしても表示順序はRSS1~4、その下にRSS5~7のように きちんと固定したいのですが、これは可能でしょうか? Javascriptについては完全に初心者です。 お手数おかけしますがご回答をお願いします。 ここまでの内容は http://indigonote.com/2011/06/16/google-feed-api-customize/ 上記サイト様を参考にさせていただきました。

  • google feed api

    以下のようにブログのフィードを取得しようとしたのですが、何も出てきません。APIキーは 間違っていないです。二つのファイルは同階層です。余分なところは省略しています。 //test.html <title>Google AJAX Feed API テスト</title> <script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAABuy1BFnkBh8stkm....................................."> </script> <script type="text/javascript" src="test.js"> </script> </head> <body> <p>Google AJAX Feed API テスト</p> </body> </html> //test.js google.load("feeds", "1"); function initialize() { google.feeds.lookupFeed("http://feedblog.ameba.jp/rss/ameblo/blog/rss20.xml", getFeedUrl); } function getFeedUrl(result){ if (!result.error){ if (result.url != null) { var feed = new google.feeds.Feed(result.url); feed.load(dispfeed); } }else{ var container = document.getElementById("feed"); container.innerHTML = "フィードがありません"; } } function dispfeed(result){ if (!result.error){ var container = document.getElementById("feed"); var htmlstr = ""; htmlstr += '<h2><a href="' + result.feed.link + '">' + result.feed.title + '</a></h2>'; for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; htmlstr += '<h3><a href="' + entry.link + '">' + entry.title + '</a></h3>'; htmlstr += "<p>" + entry.publishedDate + "</p>"; htmlstr += "<p>" + entry.contentSnippet + "</p>"; htmlstr += "</p>"; } container.innerHTML = htmlstr; }else{ alert(result.error.code + ":" + result.error.message); } } google.setOnLoadCallback(initialize);

  • Google AJAX Feed APIについて

    ネットで出ているサンプルのソースを見るとjsの最後はこうなっています。 // ページが読み込まれたら、initialize関数を実行する google.setOnLoadCallback(initialize); 自分がやりたいことは、initializeの関数を実行する際に引数を渡したいです。 調べてみると、setOnLoadCallbackは引数を使えないようなので HTMLファイルで <script> $(function(){ initialize('feed1', 'フィードのurl1, 3); initialize('feed2', 'フィードのurl2, 3); }); </script> <div id="feed1"></div> <div id="feed2"></div> としたところ動作は正常なようです。 Google AJAX Feed APIを使ったプラグインもないようですし無理矢理 上記の形式にしているのですが、この方法で問題ないでしょうか? 引数を渡して汎用化したいと言うのは特に珍しいことでもないと思うのですが 調べても有力な情報が見つかりません。 何かいい方法がありましたら教えてください!

  • Google feed API の外部jsファイル化

    Google feed API をつかって、 rssリーダーを作って実験しているのですが、 以下のjavascript部分を外部jsファイルすると、 動作しなくなってしまい困っています。 javascriptには、外部js化が出来るものと 出来ないものがあるのでしょうか? どなたかご教授おねがいいたします。 <script type="text/javascript"> function load() { var feed = [ {title:'xxx', url:'http://xxx.com'} ]; var options = { numResults : 3, stacked : true, displayTime : 7000, fadeOutTime : 500, linkTarget : google.feeds.LINK_TARGET_BLANK } new GFdynamicFeedControl(feed, "feedControl", options); } google.load("feeds", "1"); google.setOnLoadCallback(load); </script>

  • Google AJAX Feed APIについて

    ライブドアブログに外部RSSを表示しているのですが、上手くカスタマイズできません。 現在はこのようになっていて http://imageshack.us/photo/my-images/850/sample1x.jpg/ これのように日付ごとに分けたいのです http://imageshack.us/photo/my-images/651/sample2s.jpg/ どのようにコードを書けば日付ごとに分けられますでしょうか? 以下に現在使用してるコードを書いておきます <script type="text/javascript" src="http://www.google.com/jsapi?key=*APIキー"></script> <script type="text/javascript"> google.load("feeds", "1"); function initialize() { var feedurl = "http://blog.livedoor.jp/dqnplus/index.rdf"; var feed = new google.feeds.Feed(feedurl); feed.setNumEntries(10); feed.load(dispfeed); function dispfeed(result){ if (!result.error){ var container = document.getElementById("feed"); var htmlstr = ""; htmlstr += '<h2></h2>'; htmlstr += "<p>" + "</p>"; htmlstr += "<ul>"; for (var i = 0; i < result.feed.entries.length; i++) { var entry = result.feed.entries[i]; htmlstr += "<li>" htmlstr += '<a href="' + entry.link + '">' + entry.title + '</a>'; var strdate = createDateString(entry.publishedDate); htmlstr += "(" + strdate + ")"; htmlstr += "</li>" } htmlstr += "</ul>"; container.innerHTML = htmlstr; }else{ alert(result.error.code + ":" + result.error.message); } } } function createDateString(publishedDate){ var pdate = new Date(publishedDate); var pday = pdate.getDate(); var pmonth = pdate.getMonth() + 1; var pyear = pdate.getFullYear(); var phour = pdate.getHours(); var pminute = pdate.getMinutes(); var psecond = pdate.getSeconds(); var strdate = + pmonth + "月" + pday + "日" + phour + "時" + pminute + "分"; return strdate; } google.setOnLoadCallback(initialize); </script>

  • RSSで取得したURLに文字列を追加と配置?

    現在googleのAPIを使いRSSからURLと画像を取得しています。 それで質問なんですが、その取得した(それぞれの)URL末尾に指定した同一の英数字を付加と、 表示する画像のレイアウト(現在は縦一列表示)を4×4とかにしたいとですがうまく出来ません>< 複数のURLだと、どの段階で??どう振り当てて組み込んだら良いのか?? レイアウトもCSSで試みましたが一括で処理されるので途中で区切っての配置が出来ず;; 複数の画像だとどうやって振り当てていくのかが判りません>< 初心者で申し訳ありませんがよろしく願いします。<m(__)m> <script type="text/javascript" src="googleのapiキー"></script> <script type="text/javascript"> google.load("feeds", "1"); function initialize() { var feed = new google.feeds.Feed("RSSのURL");   feed.setNumEntries(16); feed.load(function(result) { if (!result.error)   { var container = document.getElementById("feed"); for (var i = 0; i < result.feed.entries.length; i++) {var entry = result.feed.entries[i] ; var gazo = entry.content.match("<img.*jpg.*?>") if(gazo != null){container.innerHTML += "<p><a href='" + entry.link + "'>" + gazo +"</a></p>" } var div = document.createElement("div"); container.appendChild(div); } } }); } google.setOnLoadCallback(initialize); </script> <body onload="OnLoad()"> <div id="feed" ></div>

専門家に質問してみよう