RSS取得覚書 [ MT他PC関連 ]

RSSの取得するやり方を改めて調べたら
現在のやり方をするまでに試したものをやっと思い出しました。

現在のやり方は、cronで一定時間毎にRSSを取得してhtmlを書き出すphpを動かし、
書き出されたhtmlを表示するhtmlにjavascriptで読み込んでいます。

これに至るまでにphpで取得編集されたhtmlをiframeで表示するやり方と
SSIで表示するやり方がありました。

iframeを使う場合もSSIを使う場合もphpは同じものが使えました。
phpはレッツPHP!のRSSブロガーを元にして修正。
※文字コードはUTF-8にしています。

<?php
require "XML/RSS.php";

// RSSサイトURL(複数可)
$rdf[] = "RSSサイトURL1";
$rdf[] = "RSSサイトURL2";
$rdf[] = "RSSサイトURL3";
$rdf[] = "RSSサイトURL4";

// 記事表示件数
$num = 3;

foreach ($rdf as $rss_url) {
 
  $rss_data = file_get_contents($rss_url);
  $rss_data = mb_convert_encoding($rss_data, "UTF-8", "EUC-JP,Shift_JIS,UTF-8");
  $rss_data = str_replace(array("EUC-JP","Shift_JIS"), "UTF-8", $rss_data);

  $r =& new XML_RSS();
  $r->setInputString($rss_data);
  $r->parse();
  if (!$ch = $r->getChannelInfo()) echo "データが取得できません";

  $site_title = mb_convert_encoding($ch['title'], "UTF-8", "UTF-8,EUC-JP,SJIS");
  $site_title = htmlspecialchars($site_title);
  $site_link = $ch['link'];
// ヘッダ
echo <<<A
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="cssのURL" rel="stylesheet" type="text/css"></head>
<body><div class="rss"><p><a href="$site_link" target=_blank>$site_title</a></p><ul>
A;

  //$num = count($r->getItems());
  for ($i=0; $i<$num; $i++) {
    $val = $r->getItems();
    $title = mb_convert_encoding(strip_tags($val[$i]['title']), "UTF-8", "UTF-8,EUC-JP,SJIS");
    $desc = mb_convert_encoding(strip_tags($val[$i]['description']), "UTF-8", "UTF-8,EUC-JP,SJIS");
    $link = htmlspecialchars($val[$i]['link']);
    $time = (isset($val[$i]['pubdate'])) ? strtotime($val[$i]['pubdate']) : strtotime(str_replace("T", " ", substr($val[$i]['dc:date'], 0, 19)));
    $date = date("Y/m/d", $time);
    // 内容
    echo <<<B
<li><a href="$link" target=_new>$title</a> $date</li>
B;
  }
 
//フッタ
echo <<<C
</ul></div></body></html>
C;
}
?>

cssもphpで指定しましたので
css

.rss {
    margin: 10px;
    border: 1px ridge #ccf;
    padding: 0px;
    width: 300px;
}
.rss p {
    font-size: 12px;
    line-height: 1.5em;
    margin: 0px;
    padding: 0px 0px 0px 10px;
    background-color: #ccf;
}
.rss ul {
    list-style-type: none;
    padding: 0px 0px 0px 10px;
}
.rss li {
    font-size: 10px;
    margin: 0px 0px 10px 0px;
    padding: 0px;
}

iframeを使う場合の表示側html

<iframe src="phpのURL"></iframe>

SSIを使う場合使用しているサーバーでは拡張子をshtmlにしなくてはならないのですが、
単純に変更するとfirefoxでは「ファイルを保存しますか」のダイアログが表示されてしまいました。
それで.htaccessを試しているフォルダに追加して拡張子がhtmlでもSSIを有効にしました。

AddType text/x-server-parsed-html .html

SSIを使う場合の表示側html

<!--#include file="phpのURL" -->

ブログで表示する場合には「Feed2JS」というツールも使えるようですが、まだ試していません。

| | コメント(0) | ページの先頭へ| web拍手

コメントする

Powered by Movable Type 5.2.3
Creative Commons License
このブログは クリエイティブ・コモンズでライセンスされています。