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

