おそえワールド(普通のホームページ)におそえの日誌(ブログ)の更新情報を表示するときには、従来はfeed2jsというツールを使ってました。このfeed2jsはRSSなデータをPHPで処理してJavaScriptを使って静的なHTMLに表示(読み込み)するという便利なツールです。しかし、一方でスタイルシートでの整形が面倒という難点がありました。
一方、少し前からさくらインターネットがPHP5をサポートしたことで、PHP5で実装されたSimpleXML関数を使ってXML文書の解析が標準で出来るようになりました。ちょうど仕事でも取りかかっていた分野だったので、ネットを検索しまくってなんとか表示にこぎ着けることに成功!
しかし、それは、PHPの知識が無い私にとって苦難の道のりでした。
feed2jsは、HTML側にJavaScriptを読み込ませるコードを書いておき、feed2js自体はPHPでRSSファイルを解析してJavaScriptで書き出しをしています。
PHP5でも同じように、JavaScriptを出力する形でプログラムを書きます。
ポイントは下記になります。(リンク先は主に参考にしたサイトです。他にもたくさんのサイトを参考にさせていただきました。ありがとうございます!)
- simplexml_load_file を使う
- MovableType4.2が標準で出力するのはAtom
- MTが出力したAtomに書かれた日付はグリニッジ標準時なので、時差(+9時間)の処理を行う
- そのためにdate関数とstrtotime関数を使う
■読み込ませるAtom(読みやすいように、一部のタグ、インデント、文言を省略と、改行をしてます)
<entry> <title>2年ぶり?に風邪をこじらせる</title> <link rel="alternate" type="text/html"href="https://blog.osoe.jp/2008/10/2.html" /> <id>tag:blog.osoe.jp,2008://2.887</id> <published>2008-10-07T14:50:12Z</published> <updated>2008-10-07T15:18:18Z</updated> <summary>タイミング悪く、日曜日に風邪を...</summary> </entry> |
■Atomを読み込ませるPHP
<?php |
これに、document.writeを使ってJavaScriptとして出力できるように書けばOKです。
今回は折角なので、<dl><dt><dd>タグを出力するように書いたので、おそえワールドの更新情報と同じスタイルシートで整形することが出来ました。
仕事ではRSS1.0だったのと文字コード変換が必要でしたので、下記の処理をしました。
【RSS1.0】
$dc = $item->children('https://purl.org/dc/elements/1.1/');
で日付が読み込めるようになるそうです。
【文字コード変換】
今回は「Atomファイル」と表示するおそえワールドトップページの「HTMLファイル」がどちらともUTF-8なので文字コードの変換はしてませんが、変換が必要なときは、
$title = mb_convert_encoding($title, 'Shift_JIS', 'UTF-8');
などを書いてあげるとOKです。(上記はUTF-8をShift_JISに変換しています)
とにかくPHPが分かりませんから、試行錯誤の連続で、最終的に3日かかってしまいました。
特に日付処理が全く分からず、これだけでも数時間かかりました。
また、上記のコードもほとんど意味が分かってないので、本当に正しい(?)コードかは自信がありませんので、今回の記事については質問はしないで下さいね。本当に答えられませんので。
サイトを見て回っていると、AtomやRSSを出力しているサイトへの負荷を軽減させるためにキャッシュしたりなどの工夫が必要とのことです。(今回はおそえワールド本体のアクセスが少ないので、特に問題はないです。←問題出るくらいアクセスが多くなるようなサイトを目指しなさいよ(笑))
しかし、改めてインターネットは凄いと思うと思いました。
情報を公開されている皆さんには本当に感謝いたします。
一方、調べている時に参考にしたのに、URLを失念してしまってリンク出来なかったサイトさんもあります。
申し訳ございません。
この場を借りてお礼申し上げます。
仕事では、PHP4用で書かれていたものをPHP5用に書き直す作業をしてました。
素人の私が!
でも、作業を終えて、素人なりにPHP5って便利なんだなぁと思いました。
【今回の参考サイト】
- PHP での SimpleXML 処理
- PHP5を試してみる - SimpleXML関数でRSSしてみる
- PHP5でRSSやXMLを簡単に読み込む方法
- date関数、strtotime関数(そふぃのPHP入門)
>コメントする