2011年12月26日

PHPでFeed取得

投稿者: 管理者

PHP5から利用可能になったsimplexmlの利用し、RSS取得&HTML化することになります。

以下のソースで出力できたんですが、「サーバー設定で allow_url_fopen が許可されていること」という条件付きになります。

じゃあ、php.ini でいじくればOKということなのですが、レンタルサーバでは、php.ini編集を可能にしているサーバと、そうでないサーバが存在します。
また、allow_url_fopen = ON にするにはセキュリティ上の危険もともなうって!

以下にわかりやすく記述されています。
http://www.xoops.jp/modules/smartsection/item.php?itemid=952

allow_url_fopenは無効に設定

http://blog.ohgaki.net/allow_url_fopena_mc_ia_sa_leusar

さくらインターネットは、デフォルトでONになっています。php.ini編集可能です。
ロリポップ!は、デフォルトでONになっています。php.ini編集可能です。
正確には、設定変更が可能ということですね。
ファーストサーバ では、OFFでした。php.ini編集不可です。

php.ini設定

それでも動作チェックはしてみたく、.htaccessで制御できるのかなぁと思い、調べてみたところ、
allow_url_fopen は PHP_INI_SYSTEM と分類されているので、.htaccess では無理とのこと。
※「.htaccess」とは、ApacheなどのWebサーバの動作を、ディレクトリ単位で制御するためのファイルです。

PHP_INI_SYSTEM : php.ini または httpd.confで設定可能なエントリ(httpd.confのVirtualHost等のブロックでは不可)
http://q.hatena.ne.jp/1192696789

[html]
<?php
$rssurl = "http://yusync.com/index.php/feed/";
$rssdata1 = simplexml_load_file($rssurl);
$max =3;
$i=0;

print ‘<ul>’."n";
for ($i=0; $i<$max; $i++){
$title = $rssdata1->channel->item[$i]->title;
$url = $rssdata1->channel->item[$i]->link;
if(isset($rssdata1->channel->item[$i]->dc->date)){
$date = parse_w3cdtf($rssdata1->channel->item[$i]->dc->date);
}else if($rssdata1->channel->item[$i]->pubDate){
$date = strtotime($rssdata1->channel->item[$i]->pubDate);
}
if($date){
$s_date = date("Y-m-d ", $date);
}

print ‘<li><span>’.$s_date.'</span>&nbsp;&nbsp;<span class=""><a href="’.$url.’">’.$title.'</a></span></li>’."n";
}
print ‘</ul>’;
?>
[/html]

ベーシック認証してると、うまくいきません。
そういうときはだ!
$rssurl = “http://認証ID:パスワード@www.ドメイン/blog/feed/”;
みたいな書き方にすれば、うまくいきました。

じゃあ、php.ini編集不可のレンタルサーバで、Feed取得・サイトに表示したい場合はどうするか。
Google AJAX Feed API を使用して JavaScript で、最新記事を表示などになりますかね。
過去エントリはこちら
Google AJAX Feed API 設置

追記2012.10.05
ファーストサーバで、フィードをPHPで取得してみた。

コレ↓、PHPの書籍では、非常にいいと思います。初心者にやさしく書いてくれています。