常々から思っていた「MTの新着情報をTopPegeに表示させる」を決行してみる。
一通りGoogle先生に教えを乞う。
Magpieなるものが便利で簡単とnJOY BLOG様のサイトにRSSを埋め込んで表示させる方法を見てわかる。
早速、記事に従いながら導入。簡単に表示!
ありがたや~。
しかしこの時点だと記事のタイトルは出ても作成日などの情報が表示しない。
しかもRSSの件数分だけ出てしまうのでなんとか自分で指定した量の記事数を表示させたい。
ここからがHYPER四苦八苦。
PHPさっぱりな俺にはハードル高い高いw
とりあえず色々なサイト様を参照した上での自分流の導入方法
1・必要なもの
・magpierss-0.72 >MagpieRSSのタブ「download」から入手
・下に書いてある「読み込ませるためのphpファイル」
2・設置方法
2-1
下記ソースをコピーしてテキストエディタなどでphpファイルとして保存。
名前は適当に分かりやすいもので。(例:rss.php)
2-2
MTなどのRSSを吐き出す機能がRSS2.0の場合はRSS0.1で吐き出すように
設定しておく。MT4.1の場合はこの記事の続きを開き
「■時間の表示っていうか注意点だねもうorz」
を参照。
2-3
magpierss-0.72を解凍。自分の場合はrootにアップ。
public_html
├index.html(トップページ)
└任意のディレクトリ名
├rss.php(自分で作る。下記のソースをコピーしたphp)
├rss_cache.inc
├rss_fetch.inc
├rss_parse.inc
├rss_utils.inc
├extlib
│ └Snoopy.class.inc
└ cache(このディレクトリは自分で作る)
2-4
cacheディレクトリのパーミッションを707または777に変更する。
2-5
rss.php に直接アクセスして動作確認。
動作していればこんな感じで表示される。
2-6
RSSを埋め込みたいページにSSIで以下の記述を追加
- <--#include file="rss.phpのアドレス" -->
読み込ませるためのphpファイル
<?php
define('MAGPIE_CACHE_AGE','900');//cacheを残す時間
define('MAGPIE_CACHE_DIR', './cache');//Cache(キャッシュ)用のディレクトリ
require_once 'rss_fetch.incの場所';
$count = 表示させたいタイトル数;
$url = 'RSSのアドレス';
$rss = fetch_rss($url);
array_splice($rss->items, $count);
$title = $rss->channel['title'];
$title = mb_convert_encoding($title, "SJIS", "auto");
$link = $rss->channel['link'];
print "<p><a href=\"${link}\">$title</a></p>\n";
print "<dl>\n";
foreach ($rss->items as $item ) {
$title = $item['title'];
$title = mb_convert_encoding($title, "SJIS", "auto");
$url = $item['link'];
$itemday = date('Y/n/j',strtotime(substr($item['dc']['date'],0,10)));
$youbi = array(0 => '(日)', 1 => '(月)', 2 => '(火)', 3 => '(水)', 4 => '(木)', 5 => '(金)', 6 => '(土)');
$mday = date('w',strtotime(substr($item['dc']['date'],0,10)));
$itemtime = date('G:i',strtotime(substr($item['dc']['date'],11,8)));
print "<div class=\"part\"><dt>${itemday} $youbi[$mday] ${itemtime}</dt><dd><a href=\"$url\">$title</a></dd></div>\n";
}
print "</dl>\n"
?>
長くなるので紆余曲折解説は続きから
■導入
まずはnJOY BLOG様のサイトにRSSを埋め込んで表示させる方法を見て導入。
順調。タイトルだけの表示が成功する。
■時間の表示
これはnJOY BLOG様にもリンクが張ってあったUta’s Dream -どーらくにっき-様のMagpie RSSをみてソースをコピーさせていただく。表示成功!
しかし作成日時の箇所が1970/01/01になってしまう。なぜ時間が繁栄されない?
泣く泣く調べまわる。
■時間の表示っていうか注意点だねもうorz
上記の時間表示の落とし穴(俺だけがかかる可能性高し)
「MarpieはRSS2.0には対応していない!」このBlogの「MT4.1」はdefaultだとRSS2.0でRSSを吐き出します。嗚呼、単純ミス。
導入目的は違うもののMukaer様のMovable Typeを4.23にバージョンアップしたらMixiの日記に更新されない対応を参照してMTのインデックステンプレートに新しくRSS1.0を作成。
読み込むファイルをこのファイルに変更。
見事、表示!
■表示件数
けむしろうの部屋別館様のPHPでブログの最新記事をRSSで取得しホームページに貼り付ける。のソースを参照して行の最初の方に
$count = 7; とタイトルを表示してる部分と思われる場所の上に array_splice($rss->items, $count); を追加。
■キャッシュの保存時間
ことらも目的は違うけど無限遠の子供たち様のMagpie RSSを使ってRSS・AtomをPHPで取得&表示のソースを参照させていただきました。
色々ページを見て回るもPHPの用語が分からなく挫折。上記サイト様のソースを見て
「PHPに直接書き込めば条件上書きできる?」
と、思いPHP上部にそれらしき部分を挿入。何回か60(1分)や120(2分)にして確認してみたところ成功。してると思う。
で前にも書いたけど出来上がったソース
<?php
define('MAGPIE_CACHE_AGE','900');//cacheを残す時間
define('MAGPIE_CACHE_DIR', './cache');//Cache(キャッシュ)用のディレクトリ
require_once 'rss_fetch.incの場所';
$count = 表示させたいタイトル数;
$url = 'RSSのアドレス';
$rss = fetch_rss($url);
array_splice($rss->items, $count);
$title = $rss->channel['title'];
$title = mb_convert_encoding($title, "SJIS", "auto");
$link = $rss->channel['link'];
print "<p><a href=\"${link}\">$title</a></p>\n";
print "<dl>\n";
foreach ($rss->items as $item ) {
$title = $item['title'];
$title = mb_convert_encoding($title, "SJIS", "auto");
$url = $item['link'];
$itemday = date('Y/n/j',strtotime(substr($item['dc']['date'],0,10)));
$youbi = array(0 => '(日)', 1 => '(月)', 2 => '(火)', 3 => '(水)', 4 => '(木)', 5 => '(金)', 6 => '(土)');
$mday = date('w',strtotime(substr($item['dc']['date'],0,10)));
$itemtime = date('G:i',strtotime(substr($item['dc']['date'],11,8)));
print "<div class=\"part\"><dt>${itemday} $youbi[$mday] ${itemtime}</dt><dd><a href=\"$url\">$title</a></dd></div>\n";
}
print "</dl>\n"
?>
コメント
週末の覚え書き
土曜日、昼間はまったり過ごす。散歩する。久々の爽やかな風が気持ちよい。
夕方おば来訪。
一緒に晩ご飯を食べる。
おばが来た時は、特技のマッサージをして差し…