Ver1.81β3で新たに追加になった「自Blog内のMT4i表示」機能ですが、やっぱり他のMT4i利用サイトさんへのリンクも、そのままMT4iで表示するようにしたいわけです。
さて、太鉄さんが実装された「自Blog内のMT4i表示」は、PermalinkのURLを正規表現で自Blog内かどうかを判断し、エントリーIDを取り出して表示するというものです。でも、他Blogではそういう訳にもいきません。
そこで他サイトのMT4iと連携する方法をいくつか考えてみましたが、一番現実的なのはやはりHTMLに<link rel=”alternate” …>でMT4iへのリンクを指定する方法ではないかと思います。
MT4iでそれをパースし、見つかった時はMT4iのリンクを優先すればよいわけです。
で、さっそく実験してみます。思い立ったが吉日ってやつです。
まず、MTのテンプレートをいじります。今回はとりあえずMain Indexと、Individual Archiveのみ。(カテゴリーアーカイブなんかもやろうと思えばできると思いますが)
もしmt.cgiと同じディレクトリにmt4i.cgiを配置しているのなら、Main Index Templateの、<link rel=”stylesheet” …の下辺りに、
<link rel="alternate" type="application/x-httpd-cgi" title="MT4i" href="<$MTCGIPath$>mt4i.cgi?id=<$MTBlogID$>" />
Individual Archive Templateの、<link rel=”stylesheet” …の下辺りに、
<link rel="alternate" type="application/x-httpd-cgi" title="MT4i" href="<$MTCGIPath$>mt4i.cgi?id=<$MTBlogID$>&mode=individual&eid=<$MTEntryID$>" />
などと追加します。
要するに、hrefがそのページのMT4i版URLを正しく示すように、<link…/>タグをTemplateに追加します。
MT4i側では、
# リンク先を取得 my $mt4ilink = ""; require LWP::Simple; my $content = LWP::Simple::get($url); if ($content) { require HTML::TokeParser; if (my $p = HTML::TokeParser->new(\$content)) { while (my $token = $p->get_tag('link')) { # attr check my $rel = $token->[1]{rel}; # alternate # ダブル・シングルクォーテーションを取り除く $rel =~ s/"//g; $rel =~ s/'//g; # MT4iへの完全URL my $href = $token->[1]{href}; # application/x-httpd-cgi my $type = $token->[1]{type}; my $title = $token->[1]{title}; # MT4i $title =~ s/"//g; $title =~ s/'//g; if ((lc $rel) eq 'alternate' && (lc $title) eq 'mt4i') { $mt4ilink = $href; } } }
のようなコードを追加して、linkタグのhrefに指定されているMT4iリンクを取得してそれに置き換えます。これで他のBlogについても、Mt4iで表示できるようになります。(CPANモジュールのLWP::SimpleとHTML::TokeParserを利用しています)
ただ、いくつか問題もあります。
HTMLヘッダーで<link rel=”alternate=”…>が指定されていないサイトへのリンクは当然MT4iへのリンクにはなりません。これは仕方がないですが(苦笑)
あともう一つは、既にお気づきの方もいらっしゃるかもしれませんが「記事の通し番号」(noで取り回されているもの)がTemplateで指定できないこと。こちらのほうは、MT4i側で通し番号の扱いを変更するしかないのかな・・・。
とりあえず今回は実験なので、noを指定しないでやってみました。したがってIndividualではタイトル表示で通し番号が表示されていません。更に「前の記事へ」というリンクが表示されません。
動作サンプルはこちら。
自動相互乗り入れ機能をご覧になるには、ここの「この記事」というリンクをたどってみてください。リンク先は自Blog内なのでイマイチ分かり辛と思いますが、ご勘弁を。
変更したmt4i.cgiはここに置いておきます。
13 Comments
Pingback: 人生迷い箸
Pingback: 人生迷い箸