• ベストアンサー

xml rssの更新の有無をphpで取得するには

おはようございます。朝早くから質問させていただきます。 他サイトやブログで公開されているrssフィードなどで、タイトルを取得し、公開するいわゆるアンテナサイトというものがありますが あのようなサイトはどうやって更新されたことを調べているのでしょうか? つまり、phpのsimplexmlではこちら側(後、A)からxmlファイルを取りにいくだけであり、相手側(後、B)が更新したのち、Aサイトのスクリプトを実行して、xmlフィードを取りに行き、Aサイトを更新するということになると思うのですが、ちらほらとみかけるアンテナサイトなどでは、Bブログが更新されるのとほぼ同時に、Aサイト側にもBブログで更新された記事のタイトルが羅列されております。 このようなライブラリやスクリプト、もしくは関数、またはその方法などが存在するのなら教えていただけないでしょうか?よろしくお願いします。

  • PHP
  • 回答数2
  • ありがとう数5

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

  • ベストアンサー
  • tongoko
  • ベストアンサー率87% (7/8)
回答No.2

全部RSSフィードを取ってくると、大量のXMLを頻繁に見に行く事が 難しいので、HTMLのヘッダ情報からデータが更新されているかを を取ってくるのがよいのではないでしょうか。 以下の関数なら、限りなく短い時間で更新時間が分かります。 <? $time = last_modified("okwave.jp", "/rss.php"); echo date("Y-m-d H:i:s", $time) . "\n"; function last_modified($hostname, $path) { $time = -1; if(!$fp = fsockopen($hostname, 80)) { return -1; } $out = "HEAD http://{$hostname}{$path} HTTP/1.0\n\n"; fwrite($fp,$out); while (!feof($fp)) { if(ereg("Last-Modified: (.+)", fgets($fp, 128), $regs)) { $time = strtotime($regs[1]); fclose($fp); return $time; } } fclose($fp); return $time; } ?>

gakumon
質問者

お礼

ありがとうございます。完璧に実行できました。 このような綺麗なスクリプトを書けるように日々精進していきたいと思います。 それでは、失礼します

その他の回答 (1)

  • x_jouet_x
  • ベストアンサー率68% (162/236)
回答No.1

サイトやブログのRSSフィードを取得すると全てのフィードを取得してしまうことになるので、おそらくXML-RPC等を使用して定期的にPingサーバから更新情報を取得しているのだと思います。 #私自身、Pingサーバから更新情報を受信したことないのであくまで推測ですが・・・。 http://ping.bloggers.jp/api.html 上記URLでAPIを公開しているので一度参照されてはいかがでしょうか? 他のPingサーバでもAPIを公開しているところがあると思います。

gakumon
質問者

お礼

ご回答ありがとうございます。返信が遅くなりまことに申し訳ございません。 pingサーバーのapiについてですが・・・・、どうやら知識と技術不足のため、理解ができずにおわってしまいましたが このようなやり方もあることを教えてくださり、本当にありがとうございました。 失礼いたします。

関連するQ&A

  • RSSのXMLロードで失敗してしまう

    RSSのデータを取得する、という処理を行いたいのですが、 文字コードの件でひっかかってしまっているようで なかなか前に進むことができません。 ************ // RSSの内容を取得する $rss_text = file_get_contents(※RSSのフィードURL); // RSSの文字エンコーディングを変換→再変換 $rss_text = mb_convert_encoding($rss_text, 'SJIS', 'UTF-8'); $rss_text = mb_convert_encoding($rss_text, 'UTF-8', 'SJIS'); $rss_text = preg_replace('/[\x00-\x1f]/', '', $rss_text); // RSSをパースする $rss_xml = new SimpleXMLElement($rss_text); if ($rss_xml) { // XML解析に成功した場合 // SimpleXMLElementオブジェクトからデータを取得 $items = $rss_xml->item; foreach($items as $item) { echo 'ID:'. $item->guid. '<br />'; echo 'リンク:'. $item->link. '<br />'; echo '日付:'. $item->pubDate. '<br />'; echo 'タイトル:'. $item->title. '<br />'; echo '本文:'. $item->description. '<br />'; } } ************ こういったコードを組んでいるのですが、現状では Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : attributes construct error in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Couldn't find end of Start Tag rss line 1 in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Extra content at the end of the document in... Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in... このようなエラーが表示されてしまいます。 自分なりに文字コードを処理しているつもりではあるのですが、 他にも何かしなければならないことがあるのでしょうか? どうぞ知恵を貸していただければと思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • RSSの登録について教えてください。

    私は最近、趣味でライブドアブログをやりはじめたので、アクセスアップのためアンテナサイトなるものに登録しようと思ったのですが、問題が生じました。 当サービスのリンクとブログ用RSSを貴ブログに必ず設置して下さい と注意書きがありました。 リンクはわかったのですが、貼り付けるためのブログ用RSSというのがよくわかりません。 一応、ブログ用RSSページなるものがあり、押してみると おいおい! 総合 RSS 頻繁に更新されるコンテンツを含むフィードを表示しています。 フィードを受信登録すると、そのフィードは Common Feed List に追加されます。フィードからの更新情報は自動的にコンピューターにダウンロードされて、Internet Explorer や他のプログラムで表示することができます。フィードについての詳細を表示します という表示されたページに飛びます。 この時、ブログ用RSSとは、このページ自体のURLのことをいってるのでしょうか? それとも、フィード登録ボタンなるものを押せばURLがでてくるのでしょうか? または根本的に違うのでしょうか? 質問が変ですが、よろしくお願いいたします。

  • RSSのデータを読み取って更新情報を表示するPHP

    Yahooニュースの更新情報を表示するサイトを作りたいと思って とりあえずプログラムを作ってみたのですがうまくいきません。 初心者なのでどこが悪いのか何が足りないのかどうすればいいのか詳しく教えてください <?php //RSSデータの読み込み $rssurl = "http://dailynews.yahoo.co.jp/fc/rss.xml"; $rssdata = simplexml_load_file($rssurl); //変数の初期化 $a= ""; $b= ""; $c= ""; $d= ""; $e= ""; $f= ""; $g= ""; $h= ""; //それぞれの変数に代入 $a= "<li>"; $b= "<a href=\""; $c= link; $d= "\">"; $e= title; $f= "</a>\n"; $g= description; $h= "</li>"; //表示 echo "a"; echo "b"; echo "c"; echo "d"; echo "e"; echo "f"; echo "g"; echo "h"; ?>

    • 締切済み
    • PHP
  • simplexml_load_fileを使用してblogのRSSを読み

    simplexml_load_fileを使用してblogのRSSを読み込み、ページ内に表示させたいのですが 下記のスクリプトでは楽天とlivedoorのRSSの読み込みが出来ません。 色々検索してみたのですがこれといった解決法を発見できなかったので質問させていただきます。 どうぞよろしくお願いいたします。 <?php $xml = simplexml_load_file('RSSをここに入力'); $i = 0; foreach($xml->channel->item as $item) { if(++$i>5) break; $title = (string)$item->title ; $link = (string)$item->link ; echo ("<li><a href=".$link.">".$title."</a></li><br />"); } ?>

    • ベストアンサー
    • PHP
  • 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
  • atomのフィードをphpで出力したい

    よろしくお願い致します。 phpの勉強を最近始めまして、 ブログの更新情報をphpで作ったページに出力させたいと思っています。 <?PHP require_once("RSS.php"); $rss=new XML_RSS("http://xmlのアドレス?"); $rss->parse(); ?> <h1><?php print(mb_convert_encoding($rss->channel['title'],"EUC-JP","auto")); ?></h1> <ul> <?php foreach($rss->items as $item){ ?> <?PHP print(mb_convert_encoding($item['$title'],"EUC-JP","auto")); ?> <li> <a href="<?php print($item['link']); ?>"> <?php print(mb_convert_encoding($item['title'],"EUC-JP","auto")); ?> </a> </li> <?php } ?> </ul> こんなスクリプトでrss1.0はタイトルとリンクが上手く表示されるのですが、atomのフィードで表示させようとするとtitleは表示されるのですがlinkが上手く取得できません。 ネットで検索してみたのですが、 通常atomのフィードはMagpieRSS等を利用してrss1.0等に変換したのちに上記のようなスクリプトを利用して表示させるという考え方でよろしいでしょうか? またatomのフィードをスクリプトで表示させる参考になるおすすめのサイトをご存知でしたらURLを教えていただけますでしょうか? どうぞ皆様ご指導よろしくお願い致します。

    • ベストアンサー
    • PHP
  • ブログの更新情報を取得してHPに自動的に載せられる?

    あるブログ(私の場合は自分のはてなブログ)の更新情報を取得して、ウェブページにその更新情報(何日にどういったタイトルの記事が更新された、程度)を自動的に載せたいです。 よく分からないのですが、XML、RSSフィード、というあたりがキーワードなのかなぁと思い、このカテゴリーに投稿させていただきました。 よろしくお願いします。

    • ベストアンサー
    • XML
  • PHPでRSSから要素を取得する方法について

    PHPでRSSから要素を取得する方法について 下記のrss情報から「lddata:syousai」にあるA,B,Cの各""内の情報をphpで変数に 格納しようと思っていますがどうしてもうまく行きません。 このような形式の場合、どのようにして取得したら良いのか お知恵を貸していただけないでしょうか。 PHPを勉強し始めたばかりなので恥ずかしい質問内容になっているかも知れませんが 何卒よろしくお願いいたします。 ▼XML 詳細 ・rssの場所 http://test.com/forecast/rss/test.xml ・rssの内容 <?xml version="1.0" encoding="UTF-8" ?> - <rss version="2.0" xmlns:lddata="http://test.com/ns/rss/2.0"> - <channel> <title>test</title> <link>http://test.com</link> - <item> <title>情報タイトル</title> <link>http://test.com/jyoho/2010-05-15-18-24.html?r=?rss</link> <lddata:syousai A="東京都" B="9" C="日付データ" />   ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ↑変数に格納したい場所 </item> </channel> </rss>

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

    fc2などのレンタルブログで他のサイトのフィード記事を自分のブログに反映させるためには、 1)自分でrssリーダを介して得たフィード記事をせっせと貼り付ける。 2)フィード情報からHTMLを返してくれる業者(単眼rssさんみたいなとこ)にアクセスする情報を自分のブログに貼り付けて、閲覧者が自動で、もしくはリンクを踏んで記事を反映させる。 という方法しかないように思うのですが、結構大きそうなまとめサイトでもレンタルブログとか利用してるんでどうしてるのか疑問に思いました。 レンタルサーバなり自鯖なら不思議はないんですが、レンタルブログでrssリーダが使えないブログだといくら他サイトのrss情報を貼ったって、閲覧者がrssリーダを設置してないとどうすることもできないですよね。もちろんそれではまとめサイトのようにはならないでしょうし。 fc2のrss関連プラグインって言うのは自分のブログの更新情報を配信するためのものしかないですよね?

  • RSSについて教えてください

    IEのver.7が配布されてから、簡単にフィード用のフォルダに好きなブログをブックマークすることができるようになって、RSSが私にも使えるようになりました。 今まではRSSって便利そうだなとは思っていても、使い方が全くわからなかったのですが、今ではたくさんのブログを全部チェックしなくても、更新されたものがだけを見ればよくなったので、時間が節約できてとてもうれしいです。 でも、同時にとても疑問に思いはじめたことがあります。 (1)今までフィード機能のないIEしかなかった期間、RSSを使っていた人たちはどうやって、RSS機能を使っていたのですか? (2)RSSでブログを購読した場合、ブログを書いている人に購読者の情報はどの程度わかってしまうのですか? (3)IE ver.7の場合ですが、フィード機能は、ブログが更新されたかをいつチェックしているのですか?お気に入りセンターでフィードを開くたびに巡回するのでしょうか? 素人なので質問の仕方がおかしいかもしれないのですが、詳しい方がいたら、ぜひ教えてください。

専門家に質問してみよう