- ベストアンサー
ニュースをRSSで自動配信したい
- ニュースの更新情報をRSSで配信する方法について教えてください。
- PHPを使用してニュースを更新し、データベースに情報を登録した後にRSSで自動配信する方法を教えてください。
- 初心者向けのニュースをRSSで自動配信する方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
DWじゃなかったんですね。失礼しました。 content-typeを指定するheaderは出力する時の直前、或いはファイルの先頭に入れます。 何かしら出力した後にheaderが使われるとエラーになります。 前の回答で挙げたIBMのソースには出てこないのですが、 同じ記事の元ソース(英語)を見ると作成したXMLソースをechoする直前に使われています。 http://www.ibm.com/developerworks/library/x-phprss/ linkタグはアクセスしたときRSSアイコンをアドレスバーに表示させたいページのheadタグ内です。 これについてはRSSを発信しているサイトのソースを見るのが参考になると思います。 http://japan.zdnet.com/ 以下は私が以前書いたRSS生成のソース(に説明を入れたもの)です。 <?php //記事データ(変数に入れておく) $logdata = array( array('id'=>'記事ID','date'=>'タイムスタンプ','title'=>'タイトル','content'=>'本文','link'=>'記事のURL') ); header('Content-Type: application/rss+xml; charset=UTF-8'); //XML宣言をそのまま入れるとエラーになるのでechoする echo '<?xml version="1.0" encoding="UTF-8"?'.'>'."\n"; ?> <rss version="2.0" 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/"> <channel> <title><?php echo('配信元サイトのタイトル'); ?></title> <atom:link href="<?php echo('RSSのURL'); ?>" rel="self" type="application/rss+xml" /> <link><?php echo('配信元サイトのURL'); ?></link> <description><?php echo('サイトの簡単な説明'); ?></description> <language>ja</language> <pubDate><?php echo('配信元サイトの最終更新日時'); ?></pubDate> <lastBuildDate><?php echo('RSSファイルの最終更新日時'); ?></lastBuildDate> <docs>http://blogs.law.harvard.edu/tech/rss</docs> <generator><?php echo('サイトを制作するのに使われたプログラムの名称。なくてもいい') ?></generator> <webMaster><?php echo('サイト管理者名') ?></webMaster> <?php //ここから記事RSS出力 foreach($logdata as $i => $data ){ ?> <item> <title><?php print($data["title"]); ?></title> <link><?php print($data["link"]); ?></link> <description><![CDATA[<?php print($data["content"]); ?>]]></description> <pubDate><?php print(gmdate('D, d M Y H:i:s',$data["date"])." GMT"); ?></pubDate> <guid isPermaLink="false"><?php print("post-".$data["id"]); ?></guid> </item> <?php } ?> </channel> </rss>
その他の回答 (2)
- tenderfeel
- ベストアンサー率56% (215/379)
おそらくはDreamweaverだと思うのですが、RSSとして表示するページ(仮にfeed.phpとする)にテンプレートを使う必要はないです。 普通のページと共通する部分は一切無いはずなので。 前の回答で参照URLとして挙げたページにRSS2.0の例としてソースが載っていますが、 最終的にfeed.phpを表示した時のソースがあんな感じになって、 Feed用のバリデーションをかけたときValidになればOKです。 http://validator.w3.org/feed/ >ユーザーの方がアクセスされるのはphpではなくxmlファイルでないといけないということなのでしょうか? ユーザーやRSSリーダーがアクセスするのはfeed.php(仮)です。 表向きというのはファイルが返すContent-TypeをXMLにする、という意味でした。 XML構文的にValidでもそのままだとPHPファイルと解釈されてしまうので、前の回答に書いたheaderが必要です。 http://www.kanzaki.com/docs/sw/http-header.html IBMにいい感じのチュートリアルがあるので参考にどうぞ http://www.ibm.com/developerworks/jp/xml/library/x-phprss/index.html
お礼
tenderfeel様、こんにちは。 時間が空いてしまいましたのに、再度のご回答本当にありがとうございます! テンプレートと書いたので余計な混乱を招いてしまって申し訳ありません。 PHPの用語を知らないので説明が分かりにくいとは思うのですが、ご容赦ください。 現在のニュースのページ(RSSではない)は、以下の2種類を使っています。 ※作ったのは前任のSEで、私はファイルをひとつひとつ見ながら修正している状況です。 -------------------------------------------------- (1)***.php ブラウザに表示しているページ 「<php」で始まり「?>」で終わるPHPのデータが入っている(HTMLはない)。 「$fname = "***.html";」という一文があり、HTMLのデザインを引っ張っている。 (2)***.html ***.phpにアクセスした時に表示されるデザイン(HTML)が入っている。 -------------------------------------------------- というふうになっています。 こちらを使ってRSSを作ろうとしたのですが、ご紹介いただいたIBMのページの「リスト2」を見るに、PHPの中にHTML部分(今回はxml部分)も入れてしまうということなのですね。そんなことも分かっていなくてすみません。 IBMのページを参考に、頑張って作ってみます! それで、一番最初の時に教えていただいた -------------------------------------------------- ページ出力時のヘッダーは次のようになります。 header('Content-Type: application/rss+xml; charset=UTF-8'); -------------------------------------------------- と -------------------------------------------------- headタグ内に次のリンクタグを入れておけば、アドレスバーにRSSアイコンが表示されるようになります。 <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="http://example.com/feed" /> -------------------------------------------------- なのですが、こちらはたとえばIBMの「リスト2」だとどの位置に書けば良いのでしょうか…? 何度も申し訳ないのですが、お力をお貸しいただけると助かります。 よろしくお願いします。
- tenderfeel
- ベストアンサー率56% (215/379)
RSSはXMLなんですが文書構造が決まっています。詳しい解説は参照URLを見ていただくとして、 参照URLにあるサンプルソースの<item>が各ニュースとなりますので、 PHPならforeachやforでループ出力して各記事のタイトルや投稿日などを入れます。 ニュースページがすでにあるなら、そのページを複製してHTMLをXMLに変更すれば作れると思います。 中身がPHPでも表向きはXMLにしなければならないので、ページ出力時のヘッダーは次のようになります。 header('Content-Type: application/rss+xml; charset=UTF-8'); headタグ内に次のリンクタグを入れておけば、アドレスバーにRSSアイコンが表示されるようになります。 <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="http://example.com/feed" />
お礼
tenderfeel様、こんにちは。 このたびはご返答ありがとうございました。 教えていただいた情報を元に奮闘している間に2週間近くが経ってしまいました。 お礼が遅くなり、申し訳ありません。 ニュースのページを元に作った結果、一応は最新データを表示させることができたのですが、一部わからないことがあったので、もしまだこちらをご覧でしたら教えていただけると助かります。 ニュースのページはphpを表示しているのですが、テンプレートとしてhtmlのデータを反映しています。 今回も、rss.phpとテンプレートのrss.htmlを作りました。 ですので、現在RSSとして機能しているのはphpの方です。 ですが、「中身がPHPでも表向きはXMLにしなければならないので」ということは、ユーザーの方がアクセスされるのはphpではなくxmlファイルでないといけないということなのでしょうか? xmlファイルの中身をphpにする、ということですか? まったく初心者な質問でお恥ずかしいのですが、ご教示ください。 よろしくお願いいたします。
お礼
tenderfeel様、ご回答ありがとうございます。 教えていただいたページやソースを参考にして、IBMページの「リスト 3. RSS.phpの出力」と同じ形式で出力できるようになりました。 IEとFirefoxで確認しましたが、問題なく表示されているようです。 このたびは拙い説明にも関わらず、いろいろと教えていただき、本当にありがとうございました!