Mar 27, 2006

Re^2: MT 3.2のAtom API

というわけで、BlogWriteの作者さまから非常に丁寧な説明をいただきました。ありがとうございます。

HepCat Dev and Test: Re: MT 3.2のAtom API

もろもろ勘案すると、Ogawa::Buzz: MT 3.2のAtom APIに載っけた修正に加えて、以下の修正を行えば、無事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"で出力されるようになっています。

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com