Authentication




Cancel OK
B!コメントする  2012-12-12 11:13:00 by old

curlを使ってRSSを取得

iGoogleの代わりを作っていく中で遭遇したエラーの原因を書いておきます。

filegetcontentsを使ってやるよりも、並列的に出来るcurlでRSSを取得した方が早いのでfilegetcontentsからcurlに取得部分を置き換えました。
しかし置き換えると一部のRSSで以下のエラーが発生しました。

Warning: simplexmlloadstring() [function.simplexml-load-string]: Entity: line 1: parser error : Space required after the Public Identifier in /home/users/mygoogle.php on line ***


これが発生したRSSは「http://jp.techcrunch.com/feed/」なんですが、file_get_contentsだと取得が出来ていました。

原因としてはLocationでリダイレクトされているため、http://jp.techcrunch.com/feed/にはRSSのXMLなどが無く正常に取得出来ていない事が原因でした。
実際にRSSの情報が置いてあるのは「http://feed.rssad.jp/rss/techcrunch/feed」の様でhttp://jp.techcrunch.com/feed/にはリダイレクト処理があっただけでした。

そこでcurlに以下のオプションを付けてLocationされていればそれを辿り、辿る回数を指定することで対応出来ました。

// Location対策
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );


これでだいたいのRSSを取得できるようになりました。
ちなみにCURLOPT_FOLLOWLOCATIONはsafe_modeがONだと利用出来ないので注意が必要です。
設定部分はbootstrapのモーダルウィンドウを利用してこんな感じで付けました。



全体の設定についてもモーダルウィンドウで作って、レイアウト変更までいければ基礎部分はほぼ完成しそうな感じ。

あとやりたいのは、各RSSの表示をドラッグアンドドロップで位置変更出来るようにしたいかな。
iGoogleで出来る機能は一通りいれておきたいけど、これはJQuery-UIで簡単に出来そうな気がしないでもない。


PHP  

  • コメント
  • コメントはまだありません