RSSを取得して一覧表示させた時のメモ。格納フィード名で苦戦したが攻略した。

電脳備忘録

rssを取得して記事タイトル、公開日、サムネイル、デスクリプション、記事URLを取得したかったのだけれど、サムネイルのURLが格納されているフィード名が「media:thumbnail」となっていて取得することができなかった。
str_replaceでmedia:thumbnail"を"thumbnail"と置換してからxmlを読み込むことで取得できるようになったけれど、日本語の情報にたどり着くことはできなかった・・・。
まぁ解決できたからよしとしよう・・・。ついでにdesctiptionから指定した文字数を表示して「...」をつけるようにしたので一覧のていをなすことができた。

<?php
$rsslink = 'http://samplesite.jp/feed/rss.xml';
$getrss = file_get_contents($rsslink);
//media:thumbnailをthumbnailに置換する。
$setrss = str_replace("media:thumbnail","thumbnail",$getrss);
$rss = simplexml_load_string($setrss);
// Atom であることを表すフラグ
$isAtom = false;
// RSS 1.0 であることを表すフラグ
$isRSS1 = false;
// RSS 2.0 と仮定して、ひとつのトピックについての情報を取得
$single = $rss->channel->item;
if (empty($single)) {
// 失敗したら Atom とみなして、ひとつのトピックについての情報を取得
$isAtom = true;
$single = $rss->entry;
}
if (empty($single)) {
// 失敗したら RSS 1.0 とみなして、ひとつのトピックについての情報を取得
$isRSS1 = true;
$single = $rss;
}
foreach ($single as $info) {
// 各投稿の情報を取り出す
$title = $info->title;
if ($isRSS1) {
// RSS 1.0
$link = $info->link;
$dc_date = $info->children('http://purl.org/dc/elements/1.1/');
$date = date('Y/m/d', strtotime($dc_date->date));
$description = $info->description;
$description = mb_strimwidth ($description, 0, 70, "..."); //70文字表示して「...」を表示する
$thumbnail = $info->thumbnail;
} else if ($isAtom) {
// Atom
$link = $info->link['href'];
$date = date("Y/m/d", strtotime($info->updated));
$description = $info->content;
$description = mb_strimwidth ($description, 0, 70, "..."); //70文字表示して「...」を表示する
$thumbnail = $info->thumbnail;
} else {
// RSS 2.0
$link = $info->link;
$date = date("Y/m/d", strtotime($info->pubDate));
$description = $info->description;
$description = mb_strimwidth ($description, 0, 70, "..."); //70文字表示して「...」を表示する
$thumbnail = $info->thumbnail;
}
?>
<time class="date"?><?php echo $date; ??></time?> : <img src="<?php echo $thumbnail; ?>"?><a href="<?php echo $link; ??>" target="_blank"?><?php echo $title; ?><?php echo $description ; ?gt;</agt;
<?php
}
?>
[PHP] RSSやAtomのフィードを取得してページに表示する方法

広告

ブログの維持費に充てるでございます・・・。