読者です 読者をやめる 読者になる 読者になる

Webデザインの勉強 | フェリカテクニカルアカデミーWebサイト制作科サポートブログ

RSSを取得:simplexml_load_file()

PHP

外部ブログのRSSを取得し表示

  • PHP5で標準実装されたsimplexmlモジュールを利用する
課題
  • RSSの取得を利用して「まとめページ」をつくる(アップするサーバーはPHPが利用できることが必須)
simplexml
XMLファイルの読み込み
  • simplexml_load_file
  • 引数には、読み込むXMLファイルを記述します
$rss = simplexml_load_file("rss.xml");
  • サーバー設定でallow_url_fopenが有効な場合は、ファイル名のところをURL(http://~の形)で表記することができ、他サイトのRSS等を処理することもできます
  • ただし他サイトのRSSを表示する場合はサニタイジング等のセキュリティ処理にも注意してください
  • サニタイジングとは、クロスサイトスクリプティングXSS)の攻撃から、テキストデータ上の「&」や「>」など特殊文字を一般的な文字列に変換する処理のことにより意味をもたない文字列として扱う処理のことです
$rss = simplexml_load_file("http://d.hatena.ne.jp/web-css-design/rss");


アメブロ

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>外部RSSを取得・表示</title>
<style>
li {
  font-size: 0.875em;
  line-height: 1.4;
  margin-bottom: 4px;
}
</style>
</head>
<body>
<ul>
<?php
$rss = simplexml_load_file("http://rssblog.ameba.jp/アメーバID/rss.html");
$i = 1;
foreach ($rss -> item as $item) {
if(++$i>5) break;
$dc = $item->children('http://purl.org/dc/elements/1.1/');
$link = $item->link;
$title = $item->title;
$date = date('Y.m.d', strtotime($dc->date));

print "<li><a href=\"$link\" title=\"$title\" target=\"_blank\">$title</a><span>($date)</span></li>\n";
}
?>
</ul>
</body>
</html>

はてな

  • 「$desc =$item->description;」で記事内容を表示
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>外部RSSを取得・表示</title>
<style>
li {
  font-size: 0.875em;
  line-height: 1.4;
  margin-bottom: 4px;
}
span {
  margin-left: 1em;
}
</style>
</head>
<body>
<ul>
<?php
$rss = simplexml_load_file("http://d.hatena.ne.jp/はてなID/rss");
$i = 1;
foreach ($rss -> item as $item) {
if(++$i>5) break;
$dc = $item->children('http://purl.org/dc/elements/1.1/');
$link = $item->link;
$title = $item->title;
$date = date('Y.m.d', strtotime($dc->date));
$desc =$item->description;
print "<li><a href=\"$link\" title=\"$title\" target=\"_blank\">$title</a><span>($date)</span><br>$desc</li>\n";
}
?>
</ul>
</body>
</html>

Yahoo! トピックスの RSS を表示
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Yahoo! トピックスの RSS を表示</title>
<style>
span {
  margin-left: 1em;
}
</style>
</head>
<body>
<h2>RSSを表示</h2>
<?php
$url = 'http://rss.dailynews.yahoo.co.jp/fc/rss.xml';
$rss = file_get_contents($url);
$xml = simplexml_load_string($rss);

$channel = $xml->channel;
$feed_title = $channel->title;
print '<h3>'.$feed_title.'</h3>';
print '<ol>';
  foreach ($channel->item as $item) {
    $link = $item->link;
    $title = $item->title;
    $date = $item-> pubDate;
    $date = date('Y.m.d', strtotime($date));

  print "<li><a href=\"$link\" title=\"$title\" target=\"_blank\">$title</a><span>($date)</span></li>\n";
  }
print '</ol>';
?>
</body>
</html>

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Yahoo! トピックスの RSS を表示</title>
</head>
<body>
<h2>RSSを表示</h2>
<?php
$url ="http://rss.dailynews.yahoo.co.jp/fc/rss.xml";
$rss = file_get_contents($url);
$xml = simplexml_load_string($rss);

$channel = $xml->channel;
$feed_title = $channel->title;
$date = $item-> pubDate;
$date = date("Y年m月d日");

print '<h3>'.$feed_title.'</h3>';
print '<h4>'.$date.'</h4>';
print '<ol>';
foreach ($channel->item as $item) {
  $link = $item-> link;
  $title = $item-> title;

print "<li><a href=\"$link\"title=\"$title\">$title</a></li>\n";
}
print '</ol>';
?>
</body>
</html>

アップル - ホットニュースの RSS を表示★
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>アップル - ホットニュース</title>
</head>
<body>
<h2>RSS から取得して表示</h2>
<?php
$url = 'http://www.apple.com/jp/main/rss/hotnews/hotnews.rss';
$rss = file_get_contents($url);
$xml = simplexml_load_string($rss);

$channel = $xml->channel;
$feed_title = $channel->title;
print '<h3>'.$feed_title.'</h3>';
print '<ol>';
  foreach ($channel->item as $item) {
    $link = $item->link;
    $title = $item->title;
    $date = $item-> pubDate;
    $date = date("Y年m月d日", strtotime($date));
      print "<li><a href=\"$link\"title=\"$title\">$title</a>($date)</li>\n";
  }
print '</ol>';
?>
</body>
</html>

アップル - 新規追加トップ10の RSS を表示
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>アップル - 新規追加トップ10</title>
</head>
<body>
<h2>RSS から取得して表示</h2>
<?php
$url = 'http://ax.itunes.apple.com/WebObjects/MZStore.woa/wpa/MRSS/justadded/sf=143462/limit=10/rss.xml';
$rss = file_get_contents($url);
$xml = simplexml_load_string($rss);

$channel = $xml->channel;
$feed_title = $channel->title;
print '<h3>'.$feed_title.'</h3>';
print '<ol>';
  foreach ($channel->item as $item) {
    $link = $item->link;
    $title = $item->title;
    $date = $item-> pubDate;
    $date = date("Y年m月d日", strtotime($date));
      print "<li><a href=\"$link\"title=\"$title\">$title</a>($date)</li>\n";
  }
print '</ol>';
?>
</body>
</html>

アップル - トップ10ソングの RSS を表示
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>アップル - トップ10ソング</title>
<style>
ol {
  list-style: none;
}
</style>
</head>
<body>
<h2>RSS から取得して表示</h2>
<?php
$url = 'http://ax.itunes.apple.com/WebObjects/MZStore.woa/wpa/MRSS/topsongs/sf=143462/limit=10/rss.xml';
$rss = file_get_contents($url);
$xml = simplexml_load_string($rss);

$channel = $xml->channel;
$feed_title = $channel->title;
print '<h3>'.$feed_title.'</h3>';
print '<ol>';
  foreach ($channel->item as $item) {
    $link = $item->link;
    $title = $item->title;
    $date = $item-> pubDate;
    $date = date("Y年m月d日", strtotime($date));
      print "<li><a href=\"$link\"title=\"$title\">$title</a>($date)</li>\n";
  }
print '</ol>';
?>
</body>
</html>


ASCII.jp - Web Professional
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ASCII.jp - Web ProfessionalのRSSを取得して表示</title>
</head>
<body>
<h2>RSS から取得して表示</h2>
<?php
$url = 'http://rss.rssad.jp/rss/ascii/web/rss.xml';
$rss = file_get_contents($url);
$xml = simplexml_load_string($rss);

$channel = $xml->channel;
$feed_title = $channel->title;
print '<h3>'.$feed_title.'</h3>';
print '<ol>';
$i = 1;
  foreach ($channel->item as $item) {
      if(++$i>15) break;
    $link = $item->link;
    $title = $item->title;
    $date = $item-> pubDate;
    $date = date("Y年m月d日", strtotime($date));
      print "<li><a href=\"$link\"title=\"$title\">$title</a>($date)</li>\n";
  }
print '</ol>';
?>
</body>
</html>

@IT HTML5 + UXフォーラム
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>@IT HTML5 + UXフォーラム</title>
</head>
<body>
<h2>RSS から取得して表示</h2>
<?php
$url = 'http://rss.rssad.jp/rss/itmatmarkit/fwcr/rss.xml';
$rss = file_get_contents($url);
$xml = simplexml_load_string($rss);

$channel = $xml->channel;
$feed_title = $channel->title;
print '<h3>'.$feed_title.'</h3>';
print '<ol>';
$i = 1;
  foreach ($channel->item as $item) {
if(++$i>15) break;
    $link = $item->link;
    $title = $item->title;
    $date = $item-> pubDate;
    $date = date("Y年m月d日", strtotime($date));
      print "<li><a href=\"$link\"title=\"$title\">$title</a>($date)</li>\n";
  }
print '</ol>';

?>
</body>
</html>

MdN Design Interactive
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>MdN Design InteractiveのRSSを取得して表示</title>
</head>
<body>
<h2>RSS から取得して表示</h2>
<?php
$url = 'http://rss.rssad.jp/rss/mdn/di/rss.php';
$rss = file_get_contents($url);
$xml = simplexml_load_string($rss);

$channel = $xml->channel;
$feed_title = $channel->title;
print '<h3>'.$feed_title.'</h3>';
print '<ol>';
$i = 1;
  foreach ($channel->item as $item) {
if(++$i>15) break;
    $link = $item->link;
    $title = $item->title;
    $date = $item-> pubDate;
    $date = date("Y年m月d日", strtotime($date));
      print "<li><a href=\"$link\"title=\"$title\">$title</a>($date)</li>\n";
  }
print '</ol>';

?>
</body>
</html>


複数のRSSを取得して表示
  • 関数化はしていないため、繰り返し記述しています
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Yahoo! トピックスの RSS を表示</title>
<style>
body {
  font-size: 16px;
  font-family:
    "Hiragino Kaku Gothic ProN",
    Meiryo,
    sans-serif;
}
li {
  margin: 8px 0 0 8px;
}
li span {
  margin-left: 20px;
}

</style>
</head>
<body>
<h2>RSSを表示</h2>
<div class="rss">
<?php
$url ="http://rssfeeds.tv.adobe.com/learn-dreamweaver-cc.xml";
$rss = file_get_contents($url);
$xml = simplexml_load_string($rss);

$channel = $xml->channel;
$feed_title = $channel->title;
print '<h3>'.$feed_title.'</h3>';
print '<ol>';
$i = 1;
foreach ($channel->item as $item) {
  if ( ++$i > 10) break;
  $link = $item-> link;
  $title = $item-> title;
  $date = $item-> pubDate;
  $desc = $item-> description;
  $date = date('Y.m.d', strtotime($date));

print "<li><a href=\"$link\"title=\"$title\">$title</a><span>($date)</span></li>\n";
}
print '</ol>';
?>
</div>
<div class="rss">
<?php
$url ="http://rssfeeds.tv.adobe.com/learn-photoshop-cc.xml";
$rss = file_get_contents($url);
$xml = simplexml_load_string($rss);

$channel = $xml->channel;
$feed_title = $channel->title;
print '<h3>'.$feed_title.'</h3>';
print '<ol>';
$i = 1;
foreach ($channel->item as $item) {
  if ( ++$i > 10) break;
  $link = $item-> link;
  $title = $item-> title;
  $date = $item-> pubDate;
  $desc = $item-> description;
  $date = date('Y.m.d', strtotime($date));

print "<li><a href=\"$link\"title=\"$title\">$title</a><span>($date)</span></li>\n";
}
print '</ol>';
?>
</div>
</body>
</html>



課題例