Re^2: MT 3.2のAtom API
というわけで、BlogWriteの作者さまから非常に丁寧な説明をいただきました。ありがとうございます。
HepCat Dev and Test: Re: MT 3.2のAtom API
もろもろ勘案すると、MT 3.2のAtom API - Ogawa::Memorandaに載っけた修正に加えて、以下の修正を行えば、無事BlogWriteからMT 3.2のAtom APIを利用でき、過去記事の取得も正常に行えます。
--- lib/MT/Atom.pm.bak Fri Mar 3 15:18:34 2006
+++ lib/MT/Atom.pm Tue Mar 28 09:17:10 2006
@@ -9,6 +9,7 @@
package MT::Atom::Entry;
use base qw( XML::Atom::Entry );
+use MT::Util;
sub new_with_entry {
my $class = shift;
@@ -17,22 +18,15 @@
$atom->title(MT::I18N::encode_text($entry->title,undef,'utf-8'));
$atom->summary(MT::I18N::encode_text($entry->excerpt,undef,'utf-8'));
$atom->content(MT::I18N::encode_text($entry->text,undef,'utf-8'));
- my $mt_author = MT::Author->load($entry->author_id);
+ $atom->content->type('text/html');
+ my $mt_author = $entry->author;
my $atom_author = new XML::Atom::Person();
$atom_author->set('name', MT::I18N::encode_text($mt_author->name(),undef,'utf-8'));
$atom_author->set('url', $mt_author->url());
$atom_author->set('email', $mt_author->email());
$atom->author($atom_author);
- my @co_list = unpack 'A4A2A2A2A2A2', $entry->created_on;
- my $co = sprintf "%04d-%02d-%02dT%02d:%02d:%02d", @co_list;
- my $epoch = Time::Local::timegm($co_list[5], $co_list[4], $co_list[3],
- $co_list[2], $co_list[1]-1, $co_list[0]);
- my $blog = MT::Blog->load($entry->blog_id);
- my $so = $blog->server_offset;
- $so += 1 if (localtime $epoch)[8];
- $so = sprintf("%s%02d%02d", $so < 0 ? '-' : '+',
- abs(int $so), abs($so - int $so)*60);
- $co .= $so;
+ my $blog = $entry->blog;
+ my $co = MT::Util::ts2iso($blog, $entry->created_on);
$atom->issued($co);
$atom->add_link({ rel => 'alternate', type => 'text/html',
href => $entry->permalink });
content要素にtype属性を追加したほか、MT::Util::ts2iso()を使ってRFC3339準拠のタイムスタンプを生成・追加しました。また、無駄なDBアクセスを削減するためにMT::Entryのメソッドblog, authorを用いてみました。
とは言うものの、MT 3.2のサポートするAtom APIはold-fashionedなので、無理に上記のパッチをあててまでBlogWriteからAtom APIを利用する必要はないかもしれません。
日本語のコンテンツがすべてBase64でエンコーディングされている気がします。
に関しては、MTにバンドルされているXML::Atom 0.07ではprintableか否かの判定に失敗してmode="base64"で出力され、最近のバージョン(0.19?)では正しくmode="xml"で出力されるようになっています。
このエントリーのトラックバックURL: http://as-is.net/mt/mt-tb.cgi/385
Comments (0)