プロが教えるわが家の防犯対策術!

Google Ajax Feed APIでRSSフィードを読み込み表示していますが、更新反映が遅いため(修正・削除したはずのエントリーが、古いままで表示される)、以下の方法を試してみたいと思っています。
http://www.lepracaun.info/blog/2007/06/google_aj …

現在は
var feedurl = "http://glftp.main.jp/blg/?feed=rss2&cat=3";
var feed = new google.feeds.Feed(feedurl);

となっているのですが、これをそのまま上記ページのように

var feedurl = "http://glftp.main.jp/blg/?feed=rss2&cat=3";
var feed = new google.feeds.Feed(feedurl)+"?"+(new Date()).getTime());

としてみても何も表示されません。
完全に手探りなのですが…どこかが間違っているのでしょうか?

A 回答 (4件)

まず結果から。

修正したものをUPしました。
http://www13.atpages.jp/makotogawa/test3.html

以下,少し詳しい話です。
if(flag == 0) continue;という行は,関数宣言の中にあります。
その次の行に関数宣言を持ってくることは出来ない筈です。
(もしかしたら厳密には可能かもしれません。javascriptにそこまで詳しくないので分かりかねます)
また,僕はdispfeedという関数を使わずにスクリプトを書きました。これは無名関数と呼ばれる仕組みを利用した方法です。より詳しい話は割愛します。

とにかく,僕のスクリプトでは無名関数を利用しており,その違いからコピー&ペーストでは上手くいかなかったようです。
(僕の元のソースではdispfeedという関数を宣言していません)

上に挙げたtest3.htmlではdispfeedという関数を宣言,利用していますので,そのまま使って下さい。

あとはgoogleのAPIとは無関係なjavascriptとcssの範囲で色々やれば大丈夫だと思います。


最後に,今回の話を自分のブログに書いたので,それも参考URLに挙げておきます。

参考URL:http://d.hatena.ne.jp/m_ogawa/20100301/1267423085
    • good
    • 0
この回答へのお礼

丸投げしてしまって申し訳ございませんでした…
ご親切にありがとうございます!;;
feedを取得できるのは便利でも、反映が遅すぎるのが問題だったのですが
これで問題は解説されたと思います。
手探りでやっていたので大変ご迷惑をお掛け致しましたが、ブログの記事を拝読致しまして、初心者ながら理解が深まりました。
誠にありがとうございました。

お礼日時:2010/03/05 21:19

cat=3はカテゴリ指定なのですね。



では,RSSを取得する時点ではカテゴリを指定せず,取得したRSSからカテゴリごとにデータを取捨選択する方法ではどうでしょうか?

http://code.google.com/intl/ja/apis/ajaxfeeds/do …
googleのリファレンスを読むと,categories[]というクラス変数があります。これを使えばブログのエントリに割り当てられているカテゴリ文字列を取得できます。

少々面倒ですが,特定のカテゴリの記事だけを選別して表示する事は可能になります。
http://www13.atpages.jp/makotogawa/test.html
こちらに「更新履歴」というカテゴリの記事のみを選別するHTMLをupしてみました。
この方法であれば,cat=3というクエリをURLに入れる必要がなくなります。如何でしょうか?

参考URL:http://code.google.com/intl/ja/apis/ajaxfeeds/do …
    • good
    • 0
この回答へのお礼

ご回答誠にありがとうございます。
フィードを取得してから、categories[]で絞る感じなのでしょうか?
見本まで作っていただいてありがとうございます;;
ulとliでマークアップして、記事へのリンクと日付を足したかったので、今までのスクリプトをif(flag == 0) continue;の下に足してみたりしたのですが、そうすると動きません…
文法チェックしてみたのですが英語でわからず…頼り切りで申し訳ないのですが、間違っている点をご指摘いただけないでしょうか…m(_ _;m)

http://gurrenavi.e-whs.tk/test2.html

お礼日時:2010/03/04 22:57

URLを見てみると,すでにいくつかクエリ(引数)があるようなので,?ではなく&で繋いでみて下さい。



var feedurl = "http://glftp.main.jp/blg/?feed=rss2&cat=3";

この行を

var feedurl = "http://glftp.main.jp/blg/?feed=rss2&cat=3" + "&" + (new Date()).getTime();

としてみてはどうでしょう?

次に,クエリのcat=3が気になります。
当方でテストしてみたところ,ページ数のようなパラメータかな?と思いました。(想像にすぎません)
結果論ですが,当方でテストした結果このcat=3を削除するとうまくいきました。結局次のようになります。

var feedurl = "http://glftp.main.jp/blg/?feed=rss2" + "&" + (new Date()).getTime();

僕のサーバでテストしてみたところ,今のところは上手くいっています。
URLはこちらになります。
http://www13.atpages.jp/makotogawa/test.html

新しいエントリを追加して,上のページに反映されるか試してみて下さい。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます!教えていただいた
var feedurl = "​http://glftp.main.jp/blg/?feed=rss2&cat=3"​ + "&" + (new Date()).getTime();
でテストしてみたのですが、やはり400:Feed could not be loaded.が出てしまいました。
そうなんですよね、cat=3を抜くと動作するのですが…

やりたい事というのが、「cat=3」で特定のカテゴリのフィードのみ取得+キャッシュ騙しで反映を早くする というのが目標なんですが、両方やるとエラーが…
var feedurl = "http://glftp.main.jp/blg/?feed=rss2&cat=3"; のみではちゃんと動くのですが、
​ + "&" + (new Date()).getTime(); をつけるとエラーが出ます。

なんだろうなぁ。

お礼日時:2010/03/01 22:38

はじめまして。

同じ事で悩んでいました。

var feedurl = "​http://glftp.main.jp/blg/?feed=rss2&cat=3";
var feed = new google.feeds.Feed(feedurl)+"?"+(new Date()).getTime());

これを,

var feedurl = "​http://glftp.main.jp/blg/?feed=rss2&cat=3";
var feed = new google.feeds.Feed( feedurl + "?" + (new Date()).getTime() );
とするか,
var feedurl = "​http://glftp.main.jp/blg/?feed=rss2&cat=3"+"?"+( … Date()).getTime();
var feed = new google.feeds.Feed( feedurl );

とするとうまくいくはずです。
(元のソースだと括弧の数が合わないはずです。単なるミスではないでしょうか)

僕の環境で確認したところ,ばっちりキャッシュを再取得してくれました。
ただ,RSSを取得する速度は少し遅くなりますね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
早速ご提示の方法で試してみたのですが、「400:Feed could not be loaded.」と出てしまいフィードが読み込めないようです。
何故なんでしょうか…
このエラーメッセージで検索しても日本語のページがほとんどなく…困りました。

ちなみにキャッシュ騙しをしない状態では、以下のような状態ですが、正常にフィードを読み込んでいるようです。
function initialize() {
var feedurl = "http://glftp.main.jp/blg/?feed=rss2&cat=3";
var feed = new google.feeds.Feed(feedurl);
feed.setNumEntries(999);
feed.load(dispfeed);

お礼日時:2010/03/01 17:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!