PHP(ピー・エイチ・ピー)

リダイレクトしているURLからではcurl()でデータを取得できない!?

なぜか

<?php $rss = "RSSのURLが入ります"; $ch = curl_init($rss); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $xmldoc = curl_exec($ch); curl_close($ch);
simplexml_load_string($xmldoc); ?>

というコードで、

Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 25: parser error : expected ...

とエラーが!?

 

どうして!?

理由が分からないので、

取り敢えずいろいろ調べてみると、

=======================================
LocationでリダイレクトされているRSSのURLの場合、
リダイレクト元のURLにはXMLなどのデータがなく、
正常にデータを取得できない!!
=======================================
みたいなことを分かりづらく書いてある記事を見つけました。

 

要は、

$rss = "RSSのURLが入ります";

の部分に

http://www.sample/feed/

というURLを設定していたとします。

が、

実際には

http://www.sample/feed/

http://www.hoge/rss2/feed/

など別のURLへリダイレクトされているので、

データを正常に取得できない!!

 

ということです。

 

なので、

simplexml_load_string()関数でエラーが出てしまったようです。

 

こういう場合は、
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_MAXREDIRS, 10);
というオプションを付けてやると、

LocationでリダイレクトされているURLを辿ってくれるとのことです。

 

まとめてやると、こうなります。

<?php $rss = "RSSのURLが入ります"; $ch = curl_init($rss); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $xmldoc = curl_exec($ch); curl_close($ch);
simplexml_load_string($xmldoc); ?>

また一つ勉強になりました!!!

0
この記事を書いている人
株式会社ディープ

名前ダッチ

メールアドレスadachi@deep-deep.jp

Twitterはこちら >>

  • コメント: 0

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

最近の記事

  1. WP:WordPress(ワードプレス)
  2. WP:WordPress(ワードプレス)
  3. WP:WordPress(ワードプレス)
  4. 文系と理系のメリットとデメリット
  5. 東京駅
  6. 残業
  7. プログラマーになるのに年齢は関係ある?
  8. 年収(収入)
  9. income(収入)
  10. プログラマーになろう

Twitter

ダッチ@職業ブロガー兼プログラマー
@gatsu0000

アーカイブ

PAGE TOP