RSSの取得、表示をするPHPプログラムについて
いわゆるRSSアンテナサイトというのを作りたいと思っています。レッツPHP!さんの
と
を一つのPHPにまとめて
のように表示してみました(オワタあんてなさん風に)。
表示されない方はこちら
予定としては相当数のRSSを取得するつもりなのですが、
8個超えたぐらいから表示がだいぶ重くなり、
12個ぐらいでtok2がエラーを返してくるようになります。
とにかく、重いです。
何かいい解決法はないでしょうか?
ソースはhtml部分以外ほとんどそのまま繋ぎ合わせています。
必要でしたら貼り付けします(200行程度です)。
私のphpの知識はサンプルを動作確認しながら改変していける程度です。
どうかよろしくお願いします。
追記(コメント返信後)
tok2のエラーの原因が構文エラーかもと思い立ち、
ApacheとPHP+PEARを自分のPC(WinXP32bit)にインストールして、実行してみました。
Warning: xml_parse() [function.xml-parse]: input conversion failed due to input error, bytes 0x87 0x55 0x81 0x40 in C:\WWW\Parser.php on line 546
と表示されつつも、一応全て表示されていました。
Parser.phpの546行目付近はこのようになっています。
function _parseString($data, $eof = false)
{
return xml_parse($this->parser, $data, $eof);←546行目
}
Parser.phpは
ここから入手しました。
全く同じソースでRSSの取得数が少ないとこのエラーは出ませんでした。
回答(1)
1.

サーバー側の負担が大きいようなら、
サーバーでは、
アドレス/req.php?rss=RSSアドレス
みたいなリクエストを受け付けるようにして、
適当な処理結果をJSONで返すか
あるいは、まんまrss.xml を返すようにして、
閲覧側で、Ajax で処理させるようにしてみたらどうでしょうか。
PHPサーバー とAjaxの連携については、
「入門Ajax」高橋 登史朗
入門Ajax
増補改訂版
なんかが参考になると思います。
コメント(5)
処理時間でエラーになっているなら、実行許可時間を延ばすとか・・
ホントに処理が重いようなら、
domDocument とか、あるいはまったく自前でパースをやってしまうとか
リストのRSSを全部取得してから、
書き出しではなくて、
それぞれのurlを
取得しつつ書き出しにしてみたら・
>>1-2
さっそくのコメントありがとうございます。
最悪表示だけでもされるようにと実行許可時間について検索してみました。
iniファイルのmax_execution_timeで強制終了までの時間を引き延ばすことが出来るようですが、フリースペースなのでサーバのiniファイルに触れません。。。
アドバイスを頂戴しておいて何ですがツリー化→解析など私には高度すぎて組み上げられそうもありません。
ParserはPEARのパッケージを使っています。
>>2に関してもforの中身を一個ずつ書き出す不細工なソースしか思い浮かびません…
無知で申し訳ありません。
ご尽力頂いたのにガッカリさせてしまいますね。。。
>0x87 0x55 0x81 0x40
sjis で、
8755 は、ローマ数字II
8140 は、全角スペース
なので、文字コード上変換に失敗したということでしょう。
(そのまま書いたら化けてしまったので、#5は削除しました)




