• ベストアンサー

複数のフィードの読み込みが日付順にならない

google feed API を使用して、複数のフィードを読み込み、日付順にソートするページを制作しております。複数のフィードの読み込みは実装できたのですが、順番が日付順の部分とそうでない部分がまざって、法則性が不明な順番でソートされてしまいます。 フィードは、RSS1.0/RSS2.0/Atom などいろいろなブログサービスのものを読み込んでいるのですが、このあたりが原因ではないかと探っています。 種類の違うフィードを読み込むときの注意点などあるのでしょうか?

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

A No1です。 google feed を知りませんので、コードだけではわからないのと、ざっと見ただけですが… ajaxでのフィードではないのでしょうか? 非同期の場合はinitializeの中での実行順が、callbackの処理順を保証しているとは思えませんが、そのあたりはOKでしょうか? ソートには関係ないと思いますのでそれは置いておいておくとして… >entryArray[entryNum].sortDate = ( date.getFullYear()*1000000 ) + >( (date.getMonth() + 1)*3600*32 ) + ( date.getDate()*3600 ) + ( date.getHours()*60 ) で、日付を数値に置換えているようですが(どういう根拠かよくわかりませんけれど) そのまま計算すると、例えば  2000/12/31 → 2001494000  2001/01/01 → 2001118800 となるので、順序が逆転していませんか? Dateも、そのまま数値化してしまえば比較可能なように思います。 var test = []; test[0] = + new Date("2001/1/2"); test[1] = + new Date("2001/1/1"); test[2] = + new Date("2000/12/30"); test[3] = + new Date("2000/12/31"); test.sort(); for(var i=0; i<test.length; i++) test[i] = new Date(test[i]); alert(test.join("\n"));

その他の回答 (1)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

読み込みはフィード毎に行なっているのではないかと思いますが、フィード毎にソートすることが出来ないというのであれば、ソートしている部部のロジックがおかしいと推測されます。(どのような方法で行なっているのか不明なのでわかりませんが) 全体をまとめてソートしたいのであれば、全部の読込みが終了してからソートするかあるいは、それまでに読み込んだものを含めてソートするような処理にしておかないと、ソートのタイミングがおかしいのかも知れません。 仮定が違っていましたら、内容が的外れになっている可能性が大なので、無視してください。

momo_monom
質問者

補足

ソートは全部で30個くらいで、基本的には日付順に並んでいるのですが、 決まった数個のフィードだけ、日付と関係なく、最前部と中間部に表示されてしまいます。。。 同様のスクリプトを使用して、別の複数フィードリストの読み込みページも作っているのですが、 そちらは、問題なく日付順にソートされます。 上記のことから、フィード側に問題があるのかなと思っていたのですが、 偶然エラーが起きていないだけで、スクリプトに問題があるのでしょうか? 参考までに以下がスクリプトを添付いたします。 google.load("feeds", "1"); var entryArray = new Array(); var entryNum = 0; function initialize() { feedAdd("***URL_A***","***ブログ名_A***", 2); feedAdd("***URL_B***","***ブログ名_B***", 1); } function feedAdd(rssUrl, rsstitle, boolNum) { var blogtitle = rsstitle; var feed = new google.feeds.Feed(rssUrl); feed.setNumEntries(1); feed.load(function(result) { if (!result.error) { for (var i = 0; i < result.feed.entries.length; i++) { entryArray[entryNum] = result.feed.entries[i]; var date = new Date(result.feed.entries[i].publishedDate); entryArray[entryNum].sortDate = ( date.getFullYear()*1000000 ) + ( (date.getMonth() + 1)*3600*32 ) + ( date.getDate()*3600 ) + ( date.getHours()*60 ) + date.getMinutes(); entryArray[entryNum].blogName = blogtitle; entryNum+=1; } } if(boolNum==1){ feedOutput("feed", 100); } }); } function feedOutput(feedId, listNum){ var useFeed = ""; var useDate = ""; var container = document.getElementById(feedId); entryArray = asort(entryArray, "sortDate"); if(listNum==100){ listNum = entryNum; } for (var i = 0; i < listNum; i++) { var entry = entryArray[i]; var eimg = ""; var imgCheck = entry.content.match(/(src="http:){1}[\S_-]+((\.jpg)|(\.JPG)|(\.gif)|(\.png))/); if(imgCheck){ eimg += '<img ' + imgCheck[0] + '" width="" >'; } else { eimg += '<img src="dammy.gif" width="" >'; } var date = new Date(entry.publishedDate); var y = date.getFullYear() ; var week = new Array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat') ; var w = week[date.getDay()]; var m = date.getMonth() + 1; if (m < 10) {m = "0" + m;} var d = date.getDate(); if (d < 10) {d = "0" + d;} var h = date.getHours(); if (h < 10) {h = "0" + h;} var mn = date.getMinutes(); if (mn < 10) {mn = "0" + mn;} useDate = m + "月" + d + "日"; useFeed += '<li class=""><a href="' + entry.link + '" target="_blank"><span class=' + '"list_box"><span class=""><h4>' + entry.blogName + '</h4>' + eimg + '</span><h3>' + entry.title + '</h3><span class="">' + y + '.' + m + '.' + d + '.' + w + '</span></span></a></li>'; } container.innerHTML = useFeed; } function asort(myArray, key){ return myArray.sort ( function (b1, b2) { return b1[key] > b2[key] ? -1 : 1; } ); } google.setOnLoadCallback(initialize);

関連するQ&A

  • RSSフィードをrss2.0で表示する方法

    WordPressの本を参考にしながら、WordPressでブログを作っています。 その中で、 RSSフィードへのリンクを追加する手順がありまして、 例として下記のようにrss2.0のフィードのURLにリンクしています: : (中略) <p class="feed"> <img src="<?php bloginfo('template_url'); ?>/feed-icon-28x28.png" alt="*" /> <a href="<?php bloginfo('rss2_url'); ?>"> RSS FEED </a> </p> ちゃんとリンクは表示されるのですが、 クリックしてもRSSフィードは表示されず、その代わりに This XML file does not appear to have any style information associated with it. The document tree is shown below. <rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" version="2.0"> <channel>   : と表示されます。リンク部分のソースコードは <a href="http://***.jp/feed"> となっており、 <a href="http://***.jp/?feed=rss2"> ではありません。試しにブラウザ(chromium)で http://***.jp/?feed=rss2 と打ったのですが、結果は同じでした。IE9でも同じでした。 ちなみに、atomにしても This XML file does not appear to have any style information associated with it. The document tree is shown below. というメッセージが出ないだけで、それ以降は同じです。 どうかRSSフィードをrss2.0で表示する方法を教えて下さい。

    • ベストアンサー
    • HTML
  • Google AJAX Feed API タブ順番

    「Google AJAX Feed API」を利用して、複数RSSを読み込んでいるのですが、 読み込んだ順番でタブを表示させるにはどうすれば良いでしょうか? 具体的には、下記サイトを参考にしているのですが、読み込む度に、タブの「海外」「経済」表示位置が変わってしまいます。これを、RSSを読み込んだ順番( AryURL : [ に記述した順番)で表示するよう、順番を固定化したいです ▽IW3 PROJECT Google AJAX Feed APIの利用   http://project.iw3.org/feed_API/ex-feed04.html

  • google feed api と jquery

    google feed api で複数のRSSを読み込んで、jquery.vgrid.js を利用して、積み木のようなグリッドレイアウトのページを制作中しています。 静的htmlでは、jquery.vgrid.jsが正常にどうさするのですが、 google feed api で生成されたhtmlに対しては、jquery.vgrid.js が機能しません。 jquery系の他のライブラリもためしましたが、同様に動作しませんでした。 google feed api などで、生成されたhtmlに対して、jqueryは動作しないのでしょうか?

  • Google Ajax Feed API キャッシュ騙しの方法

    Google Ajax Feed APIでRSSフィードを読み込み表示していますが、更新反映が遅いため(修正・削除したはずのエントリーが、古いままで表示される)、以下の方法を試してみたいと思っています。 http://www.lepracaun.info/blog/2007/06/google_ajax_feed_api_2.html 現在は 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()); としてみても何も表示されません。 完全に手探りなのですが…どこかが間違っているのでしょうか?

  • RSS と RSS2.0 のちがいを教えてください

    最近、IEでブログを読むときに、フィードがあれば購読してフォルダに入れることができますよね。 でも、そのときに、RSS、RSS2.0、Atom、など複数あるときがあってどれを選択したらいいのか迷います。どれも大差ないような気がするんですが、これらの3つに何かちがいがあるのでしょうか? それから、ときどきこのフィードはIEでは購読できません、というメッセージになってしまうときがあります。IEでカバーしていないフィードの種類等があるのでしょうか? RSS等に詳しい人がいたら、ぜひ教えてください。

  • 複数のシートタブに順番に日付を入れたい。

    複数のシートタブに順番に日付を入れたい。 複数シートタブに日付(7.12などのように)を(カレンダーの月曜日、水曜日などの順に数ヶ月分)順番に入れたいのです。 シートの数は1ブックあたり30シート程です。 今は全て手動で行っていますが、能率が上がりません。ブックが40枚程あってそれぞれに 入力をしないといけません。自動にする方法がありませんでしょうか?

  • 複数のワード書類を一括印刷するときの印刷順

    winXP Proの環境です。 フォルダ内のワード書類を複数選択して右クリック→印刷、で複数書類の一斉印刷ができるのですが、 この印刷される順番の法則性が分からないので教えてください。 ファイル名の若い順でもないし、選択された順でもないようなのですが‥

  • フォルダの日付は変更できる?

    ファイルを整理してフォルダに分類したのですが、 日付順にソートして表示させてた時、 中身の日付と一致していないので、 (フォルダは今作ったら、今日の日付のため) 表示させたい順番になりません(^_^;) フォルダの日付って、任意に変更できないのでしょうか? よろしくお願いします<(_ _)>

    • ベストアンサー
    • Mac
  • Google AJAX Feed API 複数ブログを最新更新順に表示

    Google AJAX Feed APIでわからない事があります。 どなたかおわかりの方は教えて頂けないでしょうか。 普通にGoogle AJAX Feed APIを使って最新情報を表示される方法と複数ブログを表示させる方法もできるのですが複数のブログの最新情報1件更新順に表示させる方法のスクリプトを教えていただけないでしょうか? ↓この様に各ブログの最新投稿1件を最新順に表示させたいです。 -------------------------------------- ブログAタイトル / ブログA最新投稿タイトル (2009.04.07) ブログCタイトル / ブログC最新投稿タイトル (2009.04.06) ブログBタイトル / ブログB最新投稿タイトル (2009.04.05) --------------------------------------- どうぞよろしくお願いします。

  • フォルダの表示順が変わって時間がかかるようになった

    PCのフォルダ表示に関して質問させていただきます PC上で録画をよく行うので、それ専用のHDDを準備して 録画データを保存しています 以前まで『日付時刻』の順にデータをソートしていて フォルダを開いたらソートした順番通りにすぐ表示されていたのですが 近頃、開いた直後にまず『名前』順にデータを並べて表示して そこから”日付時刻”順に並べ直す、という表示に代わってしまいました 表示に時間がかかるようになりましたし、何かディスクに 負担をかけてる感がしてスゴく嫌な気持ちになるので 直したいと思っています その手順を教えてもらえないでしょうか? ヨロシクお願いします。

専門家に質問してみよう