• 締切済み

自作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
  • 回答数2
  • ありがとう数0

みんなの回答

回答No.2

あのぅ、質問に対しての回答になってないんですけども・・・ パースするまえに、 $item['dc']['date'] $item['pubdate'] にきちんと値は入ってるのでしょうか? 値がないのをパースしても仕方ないですし、 実際にきちんと値は入っているけでも、 parse_w3cdtfのパースの部分でこけてるのかが分りません。

nevagiva
質問者

補足

すみません。 $item['dc']['date']には 2007-01-27T03:32:31+09:00 が入っていました。 $item['pubdate']には何も入っていません。 よろしくお願いいたします。

回答No.1

$item['dc']['date'] $item['pubdate'] にそれぞれ、値がどのように入っているかを確認すれば、 いいように思います。

nevagiva
質問者

補足

回答ありがとうございます。ライブドアブログのXMLを見てみると、 <dc:date>2007-01-27T03:32:31+09:00</dc:date> となっています。 magpierssのparse_w3cdtf関数を使って上記のようにして、 date("y-m-d",$dt); として変数へ代入echoで出力すると1970-01-01になってしまいます。 magpierssのdate_timestampを使用しても同様の結果です。他のRSSフィードはきちんと読み込まれますが、ライブドアブログだけこうなるんです。すみませんがよろしくお願いします。

関連するQ&A

  • 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
  • 自分の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 ↑と出ます。 何故でしょうか><

  • 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
  • MagpieRSSを使ってrss取得の際の表示件数

    MagpieRSSを使ってrssを取得したく下記のphpを作成しました。 <?php define('MAGPIE_OUTPUT_ENCODING','UTF-8'); require_once('rss_fetch.inc'); $url="xxxx.rdf"; $rss = fetch_rss($url); foreach($rss->items as $item){ foreach($item[dc] as $key => $daytime){ if($key == "date"){ $rssdate = strtotime("$daytime"); $today = strtotime(date("Y/m/d H:i")); } if($rssdate > $today){ print("$item[title]"); } } } ?> 過去から未来の予定が書いてあるRSS(rdf)があり、 現在の時間のデータを取得して、未来の予定のを表示したいです。 現在、print("$item[title]");で未来の予定がズラっと取得できる状態です。 そして、ここからが問題なのですが、 ここ(print("$item[title]");)の表示を最新の1件にしたいのですが、どうしてもうまくいきません。 ご教授お願いします。

    • ベストアンサー
    • PHP
  • WordpressのRSS取得条件

    以下のコードに2010年以降のフィードのみ表示させるようにするにはどうすればよいですか? <?php include_once(ABSPATH . WPINC . '/feed.php'); $rss = fetch_feed(array('RSSフィード')); if (!is_wp_error( $rss ) ) : $rss->set_cache_duration(1800); $rss->init(); $maxitems = $rss->get_item_quantity(10); $rss_items = $rss->get_items(0, $maxitems); date_default_timezone_set('Asia/Tokyo'); endif; ?> <dl> <?php if ($maxitems == 0) echo '<dt>No items.</dt>'; else foreach ( $rss_items as $item ) : ?> <dt> <?php echo $item->get_feed()->get_title(); ?><br /> <a href='<?php echo $item->get_permalink(); ?>' target="_blank"><?php echo $item->get_title(); ?></a> </dt><?php endforeach; ?></dl>

    • 締切済み
    • PHP
  • PHP ブログの交信記録

    PHP初心者です。 下記のソースで一行目の$rss = simplexml_load_file( 以降にアドレスを入れて、ブログの更新情報を表示させたいのですが、うまくいきません。なぜでしょうか? <?php $rss = simplexml_load_file("http://d.hatena.ne.jp/xxxx/rss"); foreach ($rss->item as $item) { $dc = $item->children('http://purl.org/dc/elements/1.1/'); $link = $item->link; $title = $item->title; $date = $dc->date; $date = strtotime($date); $date = date('Y/m/d',$date); echo "<li>$date&nbsp;:&nbsp;<a href=\"$link\">$title</a></li>\n"; } ?>

    • 締切済み
    • PHP
  • RSSをMYSQLに入れる最適なコードがわからない

    テーブル接続→テーブル作成(必要か不明)→RSSをまとめる→RSSを取得→RSSをテーブルに入れる→RSSを表示をPHPで作成しているのですが、 RSSをテーブルに入れる最適なコードがわからず困っております。 insertを使用してRSSをテーブルに入れたいのですが、INSERT INTOはphpにいきなり書いてもエラーにならないのでしょうか?$を使用するほうの記載のほうが正しいのでしょうか? <?php require_once(dirname(dirname(dirname(dirname( __FILE__ )))) . '/wp-load.php' ); //ファイルの先頭で読み込む try { $dsn = 'mysql:dbname=ozvutmpq_wp1;host=localhost'; $user = 'ozvutmpq_wp1'; $password = 'Rn_&Zi$gWKae'; $dbh = new PDO($dsn,$user,$pass); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//エラーが発生した時に、例外を投げる echo "データベースへの接続が出来ました"; }catch (PDOException $e) { echo $e->getMessage();// err時はメッセージを表示 exit; } //RSSをまとめる $url1 = [ 'http://', 'http://', 'http://',];//フィード登録1次元配列に foreach ($url1 as $url) { //複数のRSSを読み込むには?A.RSSのURLを配列に入れ、その配列をsimplexmlの引数にします。 $count = 0;//初期のカウント //RSSを取得 $rss = simplexml_load_file("$url"); // simplexml_load_file()でRSSをパース解析してオブジェクトを取得します。 $site_title = $rss->channel->title; // RSSタイトル取得 値の代入 自作関数 $post_thumbnail= $rss->channel->thumb; // RSSサムネイル画像取得 値の代入 自作関数 foreach ($rss->item as $item) { // この内側で $item を参照する if ($count >= 8) { break;//8件を超えたとき取得を終了する } $count++; $title = $item->title; // タイトル $link = $item->link; // リンク $thumb = $item->thumb->url; // アイキャッチサムネイル $content = $item ->description;// 詳細、必要なのか不明 date_default_timezone_set("Asia/Tokyo");//日時、タイトルとサムネイル画像だけほしいので要らない気がする $dc = $item ->children('http://purl.org/dc/elements/1.1/');//RSSの情報をPHPで取得するとき、[simplexml_load_file()]関数を使いますが、読み込むファイルの形式が[RSS 1.0]の場合、特殊な処理を施してあげないと正確に取得・表示することができません。 $day = date('Y/m/d H:i',strtotime($dc -> date));// RSS日付け取得 値の代入 自作関数 RSS1.0を取得したい場合「dc」の名前空間は「xmlns:dc="http://purl.org/dc/elements/1.1/"」 と定義されているので、これを引数として指定します。 $key = date('YmdGHis', strtotime($dc -> date));//DB等に入れやすい書式に変換 } } //RSSをテーブルに入れる INSERT INTO rssfeed (title, link, thumb,content)//テーブル名 VALUES ($title, $link,$thumb,$content now()) ON DUPLICATE KEY UPDATE up_date = now(); //名前を独自につける $item_insert_sql = "INSERT INTO $db_database.`rssfeed`(title, link, thumb, content) VALUES ('" . $title . "', '" . $link . "', '" . $thumb . "', '" . $content . "')";//mysql_queryとしてまとめてコードとして使うため?

    • ベストアンサー
    • MySQL
  • RSS2.0の書き方

    自分のHPのRSSフィード(RSS2.0)を書いたのですが、RSSリーダー(RSSリーダーは既にある前提)で何故か読めません。どこが悪いのか、御指摘いただければ幸いです。 ・RSSフィード名:rss.xml(rss.txtで下記のものを作成して、utf-8に変換してから、拡張子を.txt -> .xmlに変更) ・TOPのHTMLファイルのheadタグ内に以下を記述して、RSSフィードの置いてある場所を指定 : <link rel="alternate" type="application/rss+xml" title="RSS" href="[RSSフィードのあるアドレス]" /> ・RSSフィードの内容: <?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xml:lang="ja"> <channel> <title>[サイトのタイトル]</title> <link>[サイトのアドレス]</link> <description>[サイトの紹介、説明文]</description> <language>ja</language> <item> <title>[エントリーのタイトル]</title> <link>[エントリーのアドレス]<link> <guid isPermaLink="true">[エントリーのアドレス]</guid> <category>[エントリーのカテゴリー]</category> <pubDate>[作成日時]</pubDate> <description><[エントリーの紹介文]></description> </item> </channel> </rss> (注)[作成日時]は、Wed, 10 Mar 2010 23:32:13 +0900 のように記述しています。 以上なのですが、何が駄目なのでしょうか? よろしくお願い致します。

    • 締切済み
    • XML
  • 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
  • simplexml_load_fileについて

    お世話になります。 simplexml_load_fileについて質問です。 下記のようなコードでライブドアブログのRSSを解析しようとしております。 ブログ記事の全文を取得したいのですが、一部分しか取得することが出来ません アドバイスをお願いします。 宜しくお願いします ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// $rss = $data['blog_rss']; $xml = @simplexml_load_file($rss,'SimpleXMLElement', LIBXML_NOCDATA); #ブログタイトル $data['xml']['title'] = $xml->channel->title; #ブログ説明 $data['xml']['description'] = $xml->channel->description; #最大件数 $max_lines = 8; $i=0; foreach ($xml->item as $item) { $ns = $item->getNamespaces(true); $date = $item->children($ns["dc"]); //記事のリンク先 $data['xml']['kiji'][$i]['link'] = $item->link; //記事の見出し $data['xml']['kiji'][$i]['title'] = $item->title; //記事の日付 $pubDate = $date->date; $data['xml']['kiji'][$i]['pubDate'] = date("Y年m月d日 H:i:s", strtotime($pubDate)); //記事本文 $desc = $item->description; $data['xml']['kiji'][$i]['desc'] = $desc; $i++; //最大件数に達したときストップ if ($i == $max_lines) break; }

    • 締切済み
    • PHP