NP_Amazon|Bloglines 対策

NP_Amazon|Bloglines 対策

Author : pushman|Nucleus|2006-01-21 Sat 22:32

RSS に表示しないようにするだけであれば「NP_Amazon|一覧表示を軽くする」をご覧ください。


先日より「NP_Amazon」を使用させてもらっています。いや、いまさらですがこれむちゃくちゃ便利ですね。実はサイト再開当初にも使っていたのですが、Bloglines でみると、在庫状況を示す表示や、そのデータを取得した日時が更新されるたびに更新したように見えるので、悩んだ挙げ句にはずしてしまいました。フォーラムでも話題になってましたね。
Nucleus(JP)フォーラム :: Nucleusで構築されたサイトのRSS(更新判断)は特殊なんでしょうか・・?

この問題の解決方法を、「Hawk's Laboratory」の「対策2つ」で示されていたので、試行錯誤しながら実現してみました。ただ、これが上手いやり方かどうかは全く判断できません…

NP_Amazon の表示方法は、getTemplate 関数内で定義できます。当サイトのデフォルトテンプレートは以下の用にしています。

default:
	$this->template_asbn = '<dl class="amazonInfomation">';
	$this->template_asbn .= '<dt><%showtitle%><%edit%></dt>';
	$this->template_asbn .= '<dd>';
	$this->template_asbn .= '<p><%author%>';
	$this->template_asbn .= '<%manufacturer%>';
	$this->template_asbn .= ':<%releasedate%><br />';
	$this->template_asbn .= '価格:<strong><%ourprice%></strong><%listprice%><br />';
	$this->template_asbn .= '<%availability%><br />';
	$this->template_asbn .= '(価格・在庫は<%date%>現在)</p>';
	$this->template_asbn .= '</dd>';
	$this->template_asbn .= '</dl>';
	$this->template_asbn .= '<%button%>';
	$this->template_asbn .= '<hr class="clearboth" />';
	break;

いろいろな変数がありますが、「<%availability%>」「<%date%>」あたりが、1 時間置きに更新されるので、Bloglines は「お! 更新してる!」と思うわけです。ならばそれらの変数を使わなければいいのですが、なかなかありがたい情報なので、やはり表示したいですよね。というわけで、RSS 専用のテンプレートを作成します。

case 'feed':
	$this->template_asbn = '<dl class="amazonInfomation">';
	$this->template_asbn .= '<dt><%showtitle%></dt>';
	$this->template_asbn .= '<dd>';
	$this->template_asbn .= '<p><%author%>';
	$this->template_asbn .= '<%manufacturer%>';
	$this->template_asbn .= ':<%releasedate%><br />';
	$this->template_asbn .= '価格:<strong><%ourprice%></strong>(定価:<%listprice%>)</p>';
	$this->template_asbn .= '</dd>';
	$this->template_asbn .= '</dl>';
	$this->template_asbn .= '<%button%>';
	break;

基本的にはデフォルトと同じですが、頻繁に更新される情報を省略しています。現在文字化けするトラブルが発生しております。どうやら Amazon 側の問題のようです。こうした場合に備えて、テキスト情報は使用しない方がいいかもしれません。

で、これを RSS に対して自動的に適用させたいわけです。前述の「対策2つ」を参考にして以下の修正を行いました。

まず convertAsbn 関数内に「$skinid」を追加。

function convertAsbn($matches) {
	global $CONF, $skinid;

同じ関数内にある、「$this->getTemplate($template);」を以下のように修正。

$skinName = SKIN::existsID($skinid) ? SKIN::getNameFromId($skinid) : "";
if(preg_match('/^feeds/', $skinName)) {
	$this->getTemplate(feed);
} else {
	$this->getTemplate($template);
}

ちょっと詳しくはわからないですが、「global $CONF, $skinid;」を追加したことで、表示しているスキンの情報を得ることができるようです。で、通常 RSS 用のスキンは「feeds/...」という形式ですので、「feeds」で始まるスキンであれば、テンプレートに何を指定していようが、強制的に「feed」テンプレートを適用させています。

もし、RSS 用のスキンの名称を別のものに変えている場合、「if(preg_match('/^feeds/', $skinName))」の「'/^feeds/'」を変更してください。

関連記事

Tag(s): NP_Amazon

[Nucleus] Next & Previous

Comment Form (policy)

(メールアドレスは非公開です)

Others
Newest 5 Items

NP_ImageExtractor|エラー修正

NP_ImageExtractor|画像を抽出するプラグイン

NP_OtherBlogSetting|別ブログの情報を表示

NP_TotalOfComment|コメント数を表示

NP_znItemFieldEX|ランダム表示

Nucleus CMS: Pure Publishing