はてなブックマーク投稿用プログラムのカスタマイズ

昨日アップした、『はてなブックマークをMovableTypeにPOSTする…ために。』
今朝6時に、cronによって第1弾がアップできてました。

これでまぁ、運用としては問題ないんですが、
デザインのしやすさを考えると色々とナニだったので、
テンプレ、プログラム共に若干いじってみました。

本当は、プログラムをいじるんじゃなくて、
JavaScriptでいじった方がお手軽なんでしょうけれども…
まぁいいじゃないですか。
やりたかったんです(苦笑)


■ テンプレの変更

プログラム/テンプレ共に、CHEEBOWさんが公開されていたやつを使っています。
そのテンプレなんですが、
基本的に、<div>+クラスというCSS構造。
もちろん、何の問題もないんですが、
個人的に、リストの方がしっくり来るなぁ(役割が明確で)と思ったので、
そのように変更。

…これ、naoyaさんのテンプレと殆ど同じじゃん…
確かに…

まぁいいや。

あと、細かいことだけど、改行の処理が微妙で、
無駄に改行が入ってしまっていたので、
(これは、うちの改行設定のせい)
その辺も調整。

で、以下の通り。
<div class=”hatena_bookmark”>
<TMPL_LOOP name=”entry”><dl class=”entry”><dt><a href=”<TMPL_VAR name=”url”>” title=”<TMPL_VAR name=”title”>”><TMPL_VAR name=”title”></a></dt><dd><TMPL_VAR name=”summary”></dd></dl>
</TMPL_LOOP>
<div class=”powered”>Powered by <a href=”http://b.hatena.ne.jp/” title=”はてなブックマーク”>はてなブックマーク</a></div>
</div>



■ コメントがない場合のデザインに対処

上記リストで、CSSを適用させてやると、それなりに見えるようになるんですが、
<dd>(ブックマークのコメント)に、paddingを指定すると、
コメントが空だった場合にも、高さを持ってしまって、
背景色を付けると、それが目立ってしまいます。

試行錯誤すれば何か良い方法があるかもしれないんですけど、
プログラムいじった方が早いや、ってんで、カスタマイズ。

100行目辺りに、
空要素の<dd>を削除するような一文を追加。
(かなり乱暴だけど)
$text =~ s/<dd><\/dd>//g;

これで、要素そのものが無くなるので、問題なし。

豪腕(苦笑)



■ 出来ればタグも追加したい…

せっかくなので、タグも何らかの形で反映させたいんだけど…
取得できるのかしら。

実際にやってみました。


はてなのAtomの構造では、
タグは、dc:selectに格納されているらしい。
フィードを読み込んで、データを取得するときに、
これらも取り込んでやればいいわけです。

というわけで、85行目あたりに、
こんな感じの分を追加します。

my $tag;
my $dc = XML::Atom::Namespace->new(dc => ‘http://purl.org/dc/elements/1.1/’);
for my $subject ($entry->getlist($dc, ‘subject’)) {
 $tag .= ‘[‘ . $subject . ‘]’;
}

MovableType側のエントリで、タグとして機能させるわけではないので、
(そんなことしたらタグが大量に付いてしまうので)
タグは文字列に格納されるだけで十分。

で、その下のTemplate格納部分で、
これを『tag』という名前で格納。

my @tmpl_entry = (
 {
  title => $entry->title,
  url => $entry->link->href,
  summary => $entry->summary,
  tag => $tag
 }
);


それから今度はテンプレートを変更し、
タグを挿入したい場所に、
<TMPL_VAR NAME=tag>
を記述。

以上で、正常に出力されるはずです。



■ ついでに、エントリのタグも…

タグ無しだとなんか寂しいので、タグも付けようかと。
僕の場合、MT3.2のままで、タグはキーワードを利用しているので、
そこに放り込めばOK。

Net::MovableTypeの仕様の、POSTING_NEW_ENTRYの部分を読むと、
キーワード用に、
mt_keywords
というのが用意されているので、これを利用します。

プログラムの、最下部、$entry(MovableTypeに渡すデータ)を作成している部分に、
キーワードも追加。
my $entry = {
 title => $title,
 description => $description,
 mt_keywords => "hatena bookmark"
};
形式は設定に依りますが、
とりあえずこのサイトの場合は、上記のように書くことで、
エントリに、『hatena』『bookmark』というタグが付きます。



今のところ、こんなもんかなー
また何かあればいずれ。



■ 追記…(メモ)

『自分のサイトは除く』とか、
『あとで?タグが付いてるものはスルー』とか、
実装した方が見やすくなるかも…

何となく。