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); ?>

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

この記事を書いている人
株式会社ディープ
名前足立拓也

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

関連記事

最近の記事

  1. ドメインについて
  2. WP:WordPress(ワードプレス)
  3. URL設計(URLデザイン)
  4. URL「ディレクトリ名」と文字アンダースコア(_)とハイフン(-)
  5. SEO対策(外部ファイルの読み込み)
  6. URL リダイレクト
  7. インデックスされない
  8. 内部対策は必要?
  9. CMS(シーエムエス)
  10. SEO業者は必要?

Twitter

アーカイブ

PAGE TOP