お客さんから、
ホームページに表示させている新着情報が表示されなくなった!
という報告がありました。
MT(Movable Type)でブログを作成していて、
サイトのトップページにブログの最新記事を5件を新着記事として表示させるようにしていたのですが、
その新着情報が何も表示されなくなっていました。
直前にレンタルサーバー側が仕様変更を行ったようなので、
それが原因だと容易に想像はつくのですが、
放置する訳にもいかないので修正です。
仕様は、
MTを使ったブログから配信されているRSS(RDF)を読み込んで、
新着情報として表示させるだけ!
の、シンプルなものになります。
設置者がPEARの「XML_RSS」を使用して組んでいたようですが、
原因調査するのが面倒だったので今回はちゃちゃっと組み直してやることに。
※以前、別サイトで作成したコードをコピペして少し改良するだけです。
<table>
<?php
$ch = curl_init(); //CURLセッションを初期化
curl_setopt($ch, CURLOPT_URL, "http://www.sample.com/new.rdf"); //取得するURL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //データを出力ではなく、文字列として返す
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); //接続し続ける時間
$str = curl_exec($ch);
curl_close($ch); //CURLセッションを閉じる
$feed = simplexml_load_string($str); //XML文字列をオブジェクトに代入
if(!isset($feed->item)){
print <<<EOF
<tr>
<td><p class="news_text">新着情報がありません。</p>
</td>
</tr>
EOF;
}else{
$num = 3; //取得記事数
for($i = 0; $i < $num; $i++){
if($entry = $feed->item[$i]){
$title = strip_tags($entry->title);
$link = htmlspecialchars($entry->link);
$dc = $entry->children("dc",TRUE);
$date = date("Y.m.d", strtotime($dc->date));
if($date != ""){
print <<<EOF
<tr>
<td><p class="news_date">{$date}</p>
<p class="news_text"><a href="$link">{$title}</a></p>
</td>
</tr>
EOF;
}
}
}
}
?>
</table>
このコードで概ねやりたい事が可能なので、
今回はこれで対応することに!!
例えば、ブログのタイトルやURLを取得した場合には、
$feed->channel->title //ブログタイトル
$feed->channel->link //ブログのURL
で取得出来るので、
必要に応じて表示させることも可能です。
この記事へのコメントはありません。