RSSデータ表示に関する問題

このQ&Aのポイント
  • 先週からRSSデータの表示について作業が止まっております。複数のブログの記事を更新時間順に表示したいと思っています。また、表示件数も指定したいと思っています。
  • 現在作成できているPHPのソースで、更新時間順に記事を表示できますが、記事の表示件数が指定できないため、全ての記事を表示してしまいます。
  • 表示件数の指定方法がわからず、またプログラムも初めてなので無茶苦茶な作りになっています。上述のPHPサンプルか以下のソースで、表示件数の指定および配列の操作についてご教示いただければと思います。
回答を見る
  • ベストアンサー

RSSデータ表示に関しまして【ギブアップです】

先週からRSSデータの表示について作業が止まっております。 ご存知でしたら、皆様のお知恵をお借りしたいと思い質問させて頂きました。 複数のブログの記事を更新時間順に表示したいと思っています。 こんな感じです。 ⇒ http://blogs.yahoo.co.jp/FRONT/update.html 例えば、同じBLOGから数分後に2度更新されたら、その記事タイトルも表示します。 ※1BLOG 1エントリーの表示ではなく、1BLOG 複数エントリーの表示が可能であり、  あくまで更新時間順に表示します。 また、表示件数も指定したいと思っています。 このようなPHPのサンプルがあるサイトなどご存知でしたら教えてください。 お願い申し上げます。 ちなみに現在作成できているPHPのソースは以下通りで、更新時間順に記事を表示できますが、 記事の表示件数が指定できないので全ての記事を表示してしまいます。 1BLOG5つの記事を読み込んでいき、ソートし表示しています。 表示件数の指定方法がわからず、またプログラムも初めてなので無茶苦茶な作りになっています。 上述のPHPサンプルか以下ソースで表示件数の指定および配列の操作についてご教示お願いします。 <?php require "xxx/yyy/RSS.php"; // 表示データ用配列の初期化 $showArray = array(); // RSSサイトURL(複数可) $rdf[] = "http://xxxxxxxxx/xxxxx/"; $rdf[] = "http://yyyyyyyyy/yyyyy/"; // 変数初期値 $num = 0; $datacnt = 0; // サイト文字コード(SJIS、EUC-JPなど) $code = "SJIS"; // 日付ソート関数 function cmp ($a, $b) { $a = (isset($a['items'][0]['pubdate'])) ? strtotime($a['items'][0]['pubdate']) : strtotime(str_replace("T", " ", substr($a['items'][0]['dc:date'], 0, 19))); $b = (isset($b['items'][0]['pubdate'])) ? strtotime($b['items'][0]['pubdate']) : strtotime(str_replace("T", " ", substr($b['items'][0]['dc:date'], 0, 19))); if ($a == $b) return 0; return ($a > $b) ? -1 : 1; } // RSS取得・解析 foreach ($rdf as $k=>$rssurl) { $r =& new XML_RSS($rssurl); if (PEAR::isError($r)) continue; $r->parse(); if ($r->getChannelInfo()) $ch[$k] = $r->getChannelInfo(); $ch[$num]['items'] = $r->getItems(); $num = $num + 1; } usort($ch, "cmp"); for ($i=0; $i<$num; $i++) { // サイト名 $site_title = htmlspecialchars(mb_convert_encoding($ch[$i]['title'], $code, "UTF-8,EUC-JP,SJIS")); // サイトURL $site_link = $ch[$i]['link']; for ($n=0; $n<5; $n++) { // 記事タイトル $title = mb_convert_encoding(strip_tags($ch[$i]['items'][$n]['title']), $code, "UTF-8,EUC-JP,SJIS"); // 記事内容 $desc = mb_convert_encoding(strip_tags($ch[$i]['items'][$n]['description']), $code, "UTF-8,EUC-JP,SJIS"); // 記事URL $link = htmlspecialchars($ch[$i]['items'][$n]['link']); // 記事更新時間(UNIXタイム $time = (isset($ch[$i]['items'][$n]['pubdate'])) ? strtotime($ch[$i]['items'][$n]['pubdate']) : strtotime(str_replace("T", " ", substr($ch[$i]['items'][$n]['dc:date'], 0, 19))); // 記事更新日 http://php.net/date $date = date("m/d H:i", $time); $dummy = date("m", $time) . date("d", $time) . date("H", $time) . date("i", $time); $showArray[$dummy] = "<FONT SIZE=2><a href=\"" . $link . "\" target=\"_new\" title=\"" . $desc . "\">" . $title . "</a>&nbsp;【<a href=\"" . $site_link . "\" target=\"_new\">" . $site_title . "</a>】(" . $date . ")</FONT><br>"; $datacnt = $datacnt + 1; } } // 時間順でソート(必要なのかは良くわからないが上手くいかなかったりする...) krsort($showArray); // HTML表示させる echo(join('',$showArray)); ?>

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • imopro
  • ベストアンサー率35% (58/163)
回答No.1

自分自身も趣味で指定したブログの最新記事の表示をさせるものをPHPで作成した事があるんですが、参考URLに載せたサイトの"RSSブロガー"というツールを参考にしました。 恐らくamcacinaさんの考えているものと同じような事が実現できると思います。更新時間順に表示しますし、表示件数も指定できます。件名だけの表示も可能です。 いかがでしょうか?

参考URL:
http://php.s3.to/net/
amcacina
質問者

お礼

有難う御座います。 これを参考にして、思うように表示することができました。 助かりました。

関連するQ&A

  • RSSブロガーの日時表示について

    レッツPHPさんのRSSブロガーを利用しております。 http://loglog.jp/~php/net/ 機能に日時を表示させたく以下のソースを記入しました 27行目付近より for ($i=0; $i<$num; $i++) { $val = $r->getItems(); $title = mb_convert_encoding(strip_tags($val[$i]['title']), $code, "UTF-8,EUC-JP,SJIS"); $desc = mb_convert_encoding(strip_tags($val[$i]['description']), $code, "UTF-8,EUC-JP,SJIS"); $link = htmlspecialchars($val[$i]['link']); $date = $val[$i]['dc:date']; $time = (isset($val[$i]['pubdate'])) ? strtotime($val[$i]['pubdate']) : strtotime(str_replace("T", " ", substr($val[$i]['dc:date'], 0, 19))); $koushin = date("Y/m/d", $time); // 内容 echo <<<B <tr bgcolor="#ffffff"><td><small> $koushin <a href="$link" target=_new>$title</a><br> $desc </small></td></tr> B; } これで日時も表示が出来たのですが、RSSブロガーの最大表示件数を5件にします。 例えば1件ブログなどで書き込みをこのRSSブロガーの部分で表示をすると1件は日時とタイトルが表示されるのですが、残りの4件の日付が1970/01/01 と表示されタイトル無しの表示が4つ並びます。 ↓このような感じ 2008/02/14 テスト 1970/01/01  (空白) 1970/01/01  (空白) 1970/01/01  (空白) 1970/01/01  (空白) これだと見た目が悪いので空白部分の日時と空白部分は表示させたくないのですが、何か良い方法はございますか宜しくお願い致します。

    • ベストアンサー
    • PHP
  • functionについて

    こんばんは。お世話になっております。 自分の勉強不足を披露してしまうようでお恥ずかしいのですが、レッツPHPさんの「新着ブロガー」 http://php.s3.to/net/#rss を1件のみの表示とするよう設定し、検索結果として自分のソース内にあるwhileの中に、include("./rss/rssup.php"); と記載しているのですが、検索結果を実行させたとき、レッツPHPさんの「rssup.php」ソース内の、 // 日付ソート関数 function cmp ($a, $b){ $a = (isset($a['items'][0]['pubdate'])) ? strtotime($a['items'][0]['pubdate']) : strtotime(str_replace("T", " ", substr($a['items'][0]['dc:date'], 0, 19))); $b = (isset($b['items'][0]['pubdate'])) ? strtotime($b['items'][0]['pubdate']) : strtotime(str_replace("T", " ", substr($b['items'][0]['dc:date'], 0, 19))); if ($a == $b) return 0; return ($a > $b) ? -1 : 1; }//※※ ※印のところでエラーが表示されてしまいます。 先にも申したように、自分の知識のなさを告知するようで大変お恥ずかしいとは思いながらも、調べていても解決する事が出来ず、あえて投函させていただきました。 お忙しい中恐縮ですが、アドバイスなど頂戴出来たら幸いです。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • RSS 日付の取得方法

    見てくださった方、こんにちは。 php超初心者のkitakaruと申します。 ホームページを作っていて、 RSSを取得して表示させたいのですが、 それが出来ずにほとほと困っています。 htmlやcssは多少分かるのですが、 phpは全くといっていいほど分かりません。 どなたか詳しい方がいらしゃいましたら、 ご教示頂けますでしょうか。 よろしくお願い致します。 呼び出しているxmlの形式はrss2.0です。 http://i-njoy.net/tips/rss.shtml こちらのサイトを参考に 以下のようソースを書きました。 (1)のpubdateというタグの値を引っ張ってこれず そこで行き詰ってしまっています。 ちなみにタイトルなどはきちんと表示されています。 分かる方、どうぞよろしくお願いします。 <?php require_once 'rss_fetch.inc'; require_once 'code_table.ucs2jis'; require_once 'jcode.php'; $url = 'http://www.xxxxxxxxxxxxx/index.xml?mode=rss'; $rss = fetch_rss($url); $title = $rss->channel['title']; $date1 = htmlspecialchars($item['pubdate']);  //(1)rss 出力日時を取得して 変数data1に代入 $date2 = date("Y.m.d", strtotime($date1));   //(2)表示形式変換 data1を変換したものを変数data2に代入 //JcodeConvert($str, $from, $to) //0:PASS(無変換)1:EUC-JP 2:Shift_JIS 3:ISO-2022-JP(JIS) 4:UTF-8 $title = JcodeConvert($title, 4, 4); foreach ($rss->items as $item ) { $title = $item[title]; $title = JcodeConvert($title, 4, 4); $url = $item[link]; echo '<li><dl><dt>'.$date1.'</dt><dd><a href="'.$url.'">'.$title.'</a></dd></dl></li>'; //(3)変数data2を出力 } ?>

    • ベストアンサー
    • PHP
  • ワードプレス(WordPress) RSS magpierss 日付

    ワードプレス(WordPress)のRSSを、他のサイトで取得するため にmagpierssを入れてるのですが、日付がうまく取得(表示) できません・・。教えてください・・。 ◆ワードプレス側のRSSは、固定カテゴリーです。 アドレス?feed=rss2&cat=3 ◆magpierss では、ブログタイトルは取得しないので 記事のタイトルと、日時だけ取得したいと想っています。 前略・・ $count = 1; // ↓ブログタイトル↓ // echo "<h2>$title</h2>\n"; //echo "<dl>\n"; // ↓記事6個まで↓ foreach ($rss->items as $item ) { if($count < 6){ $count++; // 記事のタイトル $title = $item['title']; // 表示する文字数を制限する 10文字 $title = mb_strimwidth($title, 0, 50, "...", "UTF-8"); //$title = mb_convert_encoding($title, "UTF-8", "auto");   記事の要約   $desc = $item['description'];  $desc = $item['summary'];   $desc = mb_convert_encoding($desc, "UTF-8", "auto"); // 記事のURL $url = $item['link']; // 記事の投稿日時 2005/09/20/10:30:00形式 $date = $item['dc']['date']; $time = rtrim("$date","\+09:00"); $time = strTr("$time","T-","//"); // 記事の投稿日時 09/20形式 $date2 = substr($item['dc']['date'],5,5); $time2 = strTr("$date2","T-","//"); // 記事の投稿日時 10:30形式 $time3 = date( 'H:i', strtotime( substr( $item['dc']['date'],11,8 ) ) ); // 出力形式選択 echo " <ul> <li> <a href=\"$url \">$title</a>$time</li> </ul>"; } } // 出力形式選択↑ループ ?>

    • ベストアンサー
    • PHP
  • RSSのpubDataを日本語フォーマットにしたい JSON使用

    自作のhtmlで作成したHPに、RSSの情報を表示させています。 http://q.hatena.ne.jp/1165960016 ↑こちらの、一番下の、 "XML 2 JSON service"を使用した方法で、表示していますが… <html> <head></head> <body> <script type="text/javascript" src="http://app.drk7.jp/xml2json/var=HATENARSS&url=http://~★以下任意のアドレス★" charset = 'UTF-8'></script> <script type="text/javascript"><!-- var items = HATENARSS.data['channel']['item']; /* 表示設定 */ var readCount = 10; //対象とする記事の件数 var StrLengthDescript=150; //表示する本文の文字数 /* 取得したデータを表示する */ var html = '<dl>'; for(var i = 0 ; i < items.length && i < readCount ; i++ ){ var pubDate = items[i]["pubDate"]; pubDate = pubDate.replace(" ", ""); //全角スペースを削除 if(pubDate.length > StrLengthDescript){ pubDate = pubDate.substr(0,StrLengthDescript)+'...' }; html += '<dt><a href="' + items[i]["link"] + '">' + items[i]["title"] + '</a></dt><dd>'+ pubDate + '</dd>'; }; html += '</dl>'; document.write(html); //--> </script> </body> </html> このような方法で、pubDateを、<dd></dd>の部分に表示させていますが… Fri, 19 Jun 2009 18:00:00 +0900 と、そのままで表示されてしまいます。 これを、"2009年6月19日"と表示させたいのですが… どのようにしたら良いでしょうか。 pubDateを取得して…YYYY/MM/DDなどと置き換えるのかな?と思いますが イマイチここからどうやったらいいのか分かりません…。 ご存知の方、教えていただけたら幸いです。 よろしくお願いいたします。

  • 自分のHPにRSSを表示させたい

    試しに、h●●p://www.okinawainfo.net/rss10.xmlを表示させたく htdocs内のrss.phpファイルに <dl> <?php $rss = simplexml_load_file("h●●p://www.okinawainfo.net/rss10.xml"); $i = 0; foreach ($rss->channel->item as $item) { if( $i++ == 5 ) { break; } $link = $item->link; $title = $item->title; $date = date('Y.m.d', strtotime($item->pubDate)); $desc =$item->description; echo '<dt>' . $date . '</dt>'; echo '<dd><a href="' . $link . '" target="_blank">' . $title . '</a></dd>'; } ?> </dl> と、打ち込みました。 ですが、エラーが出ます。 エラーは… Object not found! 要求された URL は本サーバでは見つかりませんでした。 もし手入力で URL を入力した場合は、綴りを確認して再度お試し下さい。 サーバーの障害と思われる場合は、ウェブ管理者までご連絡ください。 Error 404 localhost 2011/12/09 4:19:28 Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1 ↑と出ます。 何故でしょうか><

  • Magpie RSSを使用して日付表示できないエラー

    初めまして、お世話になります。 PHPに関しては初心者です。 Magpie RSSを使用してフィードをトップページに表示させたいのですが タイトルは問題ないなく表示されるのですが、日付を表示させようとすると1970年01月01日 と表示され取得出来ない状態です。 MagpieRSSのバージョンは0.72でRSS2.0です。 取得先はwordpress バーション2.61になります。 色々と調べてみて Magpie0.7より使用できる$item['date_timestamp']という参照方法も試してみたのですがだめでした。 サーバーの問題かと思い複数のサーバーでも試したのですが1970年01月01日と表示されてしまします。 具体的なソースは下記の通りです。 <?php require_once 'rss_fetch.inc'; define('MAGPIE_FETCH_TIME_OUT', 30); // タイムアウトまでの define('MAGPIE_CACHE_AGE', 30*60); // キャッシュ更新の時間 $url = 'フィードのURL'; $rss = fetch_rss($url); $title = $rss->channel['title']; echo "<li class=\"ItemTitle\"><a href=\"$url\">RSS記事一覧を表示</a></li>\n"; $title = mb_convert_encoding($title, "UTF-8", "auto"); $rss->items = array_slice($rss->items, 0, 10); foreach ($rss->items as $item ) { $title = $item[title]; $title = mb_convert_encoding($title, "UTF-8", "auto"); $url = $item[link]; $date_str = date("m月d日 ", $item['date_timestamp']); if ($date >= time() - 3600 * 24 * 7) { $date_str = "<EM>" . $date_str . "</EM>"; } echo "<li class=\"ItemTitle\">$date_str<a href=\"$url\">$title</a></li>\n"; }; $url = $rss->channel['link']; ?> どなたか対処法をご存じの方がおられましたらご教授頂けると 幸いに思います。 以上、よろしくお願いいたします。

    • 締切済み
    • PHP
  • 自作RSSリーダでライブドアブログを読み込む

    自作のRSSリーダーを作ったのですが、ライブドアブログの更新時間が全て1970-01-01になってしまいます。PHPで if ($item['dc']['date'] != '') { $dt = parse_w3cdtf($item['dc']['date']); } else if($item['pubdate'] != '') { $dt = strtotime($item['pubdate']); } else { $dt = time(); } といった感じにしています。何が悪いのかわからないので教えて下さい。

    • 締切済み
    • PHP
  • RSSで取得したデータが文字切れする件について

    PHPでRSSのデータを取得し表示するプログラムを作成しています。 以下の文で記事の本文を取得することはできるのですが、何故か文字切れしてしまいます。文字切れする最後の文末は必ず「...」で終了してしまいます。 $desc = mb_convert_encoding(strip_tags($ch[$i]['items'][$n]['description']), $code, "UTF-8,EUC-JP,SJIS"); このような場合、どう回避したら良いでしょうか? また上記内容で情報不足していたらご指摘下さい。

    • ベストアンサー
    • PHP
  • RSSがgoo RSSリーダーV3で表示されない

    DBの内容をRSSで出力しgoo RSSリーダーで表示しようとさせていますが、うまくいきません。具体的にはgoo RSSリーダーでRSSサイトの登録はできるのですが、選択すると上のペイン(タイトルが表示されるところ)は空白で、下のペイン(内容が表示されるところ)はxmlのソースが生で表示されます。他のRSSサイトの表示は問題ありません。(インターネット/イントラネット) 出力方法はイントラサーバーのDB(Accessファイル)からASPがデータを成形後RSSファイルを出力させるものです。(下記に出力後のソースを記入します。一部データをハイフンでおきかえています) <?xml version="1.0" encoding="Shift_JIS"?> <rss version="2.0"> <channel> <title>更新情報RSS</title> <link>http://---.html</link> <description>---をチェック</description> <language>ja</language> <pubDate>Fri,2 Feb 2007 13:49:00 +0900</pubDate> <generator>------</generator> <item> <title>タイトル1</title> <link>http://---.html</link> <description>内容紹介1</description> <pubDate>Thu,1 Feb 2007 11:39:29 +0900</pubDate> </item> <item> <title>タイトル2</title> <link>http://---.html</link> <description>内容紹介2</description> <pubDate>Thu,1 Feb 2007 11:45:29 +0900</pubDate> </item> </channel> </rss> IE6.0でソースの表示はできるのでXML構造には問題ないと思います。アドバイスよろしくお願いします。

    • 締切済み
    • XML

専門家に質問してみよう