プロが教える店舗&オフィスのセキュリティ対策術

こんにちわ。
お時間あるかた、どうぞよろしくおねがいします。

現在、RSSを読み込んで、色々な処理をしたいと思っています。
そして、下記のコードを書いたところうまくいきました。

$root = simplexml_load_file($url);

ところが、使っているレンタルサーバでは
PHP.iniのallow_url_fopenをONにすることが禁止されていることを知ったので、
simplexml_load_string()を使うように、プログラムを書き換えました。(下記抜粋)

$response = http($url . $parm);
$line = explode("\n" , $response);

// HTTPヘッダを消す
for ( $i=0 ; $i < 100 ; $i++ )
if ( $line[$i] == "" ) break;

// HTTPボディーだけ取得
$xml_str = "";
for ( $i++ ; $i < count($line) ; $i++ )
$xml_str .= $line[$i];

$root = simplexml_load_string($xml_str);

こうしたところ、一部のRSSで、Error while parsing the documentが出るようになってしまいました。
いくつか試したところ、amebloのフィードはOKなのですが、他のRSSだとエラーになるようです。

$ret = get_rss("http://feedblog.ameba.jp/rss/ameblo/femiohji");// OK
$ret = get_rss("http://pub.ne.jp/marunohi/?action=rss&type=rss1. … NG

というわけで、
simplexml_load_file()のときは動いていたのですが、
simplexml_load_string()にしたらエラーになります。

原因がわからず、行き詰まってしまいました。
よろしくおねがいいたします。

A 回答 (1件)

http関数がどんな挙動をしているのか分からないのですが、最終行 "</rdf:RDF>" まで読み込んでいますか? var_dump($line) でチェックして下さい。


amebloのフィードは "</rdf:RDF>\n" で終わっていますが、他のRSSは改行が無く終わっているのです。

以上、ご確認下さい。

この回答への補足

i80286さん、回答ありがとうございます。
試してみた結果、最後に、<rdf.RDF>まで取得できていました。

下記、デバッグ出力結果(抜粋)となります。
「</dc:date></item></rdf:RDF>」

回答いただいた時には、「おおお!」と興奮しましたが、
他にも理由がありそうです。

また、心当たりなど、思いついたことなどがあれば、
些細なことでもぜひご連絡いただけると嬉しいです。

今後とも宜しくお願いいたします。

補足日時:2010/04/17 03:06
    • good
    • 0
この回答へのお礼

どうもありがとうございました!

お礼日時:2010/04/21 12:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!