2007/05/10

[技術系]   MTでまっとうにエスケープしたエクスポート/インポートをできるようにするパッチ

at 10:58JST
 
MovableTypeエクスポートログ形式は腹を切って死ぬべきだ : ひろ式めもちょう
http://memo.hirosiki.jp/article/41332519.html

なんか一瞬「エクスポートのほうはめんどくさそうだ」と思ったけど、適当に処理してみる。こんな腐ったスクリプトを書けるのはひろ式先生だけ。あと、他人のこと偉そうに指摘するわりには、自分では
「エントリーのデータに\0が混じってるときちんと動作しないバグ」
を埋め込んでいるという話もある。

MTでハイフンをエスケープしたログをインポートするパッチ : ひろ式めもちょう
http://memo.hirosiki.jp/article/41336105.html

のパッチ取り込み済み。


*** lib/MT/ImportExport.pm.org	Thu May 10 09:37:57 2007 
--- lib/MT/ImportExport.pm Thu May 10 10:53:34 2007
***************
*** 297,302 ****
--- 297,303 ----
for my $piece (@pieces) {
$piece =~ s!^\s*!!;
$piece =~ s!\s*$!!;
+ $piece =~ s!^- !!mg;
if ($piece =~ s/^BODY:\r?\n//) {
$entry->text($piece);
}
***************
*** 526,532 ****
require MT::Template::Context;
my $tmpl = MT::Template->new;
$tmpl->name('Export Template');
! $tmpl->text(<<'TEXT');
AUTHOR: <$MTEntryAuthor strip_linefeeds="1"$>
TITLE: <$MTEntryTitle strip_linefeeds="1"$>
STATUS: <$MTEntryStatus strip_linefeeds="1"$>
--- 527,533 ----
require MT::Template::Context;
my $tmpl = MT::Template->new;
$tmpl->name('Export Template');
! my $tmplText = <<'TEXT';
AUTHOR: <$MTEntryAuthor strip_linefeeds="1"$>
TITLE: <$MTEntryTitle strip_linefeeds="1"$>
STATUS: <$MTEntryStatus strip_linefeeds="1"$>
***************
*** 538,556 ****
CATEGORY: <$MTCategoryLabel$>
</MTEntryCategories>
DATE: <$MTEntryDate format="%m/%d/%Y %I:%M:%S %p"$>
! -----
BODY:
<$MTEntryBody convert_breaks="0"$>
! -----
EXTENDED BODY:
<$MTEntryMore convert_breaks="0"$>
! -----
EXCERPT:
<$MTEntryExcerpt no_generate="1" convert_breaks="0"$>
! -----
KEYWORDS:
<$MTEntryKeywords$>
! -----
<MTComments>
COMMENT:
AUTHOR: <$MTCommentAuthor strip_linefeeds="1"$>
--- 539,557 ----
CATEGORY: <$MTCategoryLabel$>
</MTEntryCategories>
DATE: <$MTEntryDate format="%m/%d/%Y %I:%M:%S %p"$>
! __SEPARATOR__
BODY:
<$MTEntryBody convert_breaks="0"$>
! __SEPARATOR__
EXTENDED BODY:
<$MTEntryMore convert_breaks="0"$>
! __SEPARATOR__
EXCERPT:
<$MTEntryExcerpt no_generate="1" convert_breaks="0"$>
! __SEPARATOR__
KEYWORDS:
<$MTEntryKeywords$>
! __SEPARATOR__
<MTComments>
COMMENT:
AUTHOR: <$MTCommentAuthor strip_linefeeds="1"$>
***************
*** 559,565 ****
URL: <$MTCommentURL strip_linefeeds="1"$>
DATE: <$MTCommentDate format="%m/%d/%Y %I:%M:%S %p"$>
<$MTCommentBody convert_breaks="0"$>
! -----
</MTComments>
<MTPings>
PING:
--- 560,566 ----
URL: <$MTCommentURL strip_linefeeds="1"$>
DATE: <$MTCommentDate format="%m/%d/%Y %I:%M:%S %p"$>
<$MTCommentBody convert_breaks="0"$>
! __SEPARATOR__
</MTComments>
<MTPings>
PING:
***************
*** 569,578 ****
BLOG NAME: <$MTPingBlogName strip_linefeeds="1"$>
DATE: <$MTPingDate format="%m/%d/%Y %I:%M:%S %p"$>
<$MTPingExcerpt$>
! -----
</MTPings>
! --------
TEXT

my $iter = MT::Entry->load_iter({ blog_id => $blog->id },
{ 'sort' => 'created_on', direction => 'ascend' });
--- 570,584 ----
BLOG NAME: <$MTPingBlogName strip_linefeeds="1"$>
DATE: <$MTPingDate format="%m/%d/%Y %I:%M:%S %p"$>
<$MTPingExcerpt$>
! __SEPARATOR__
</MTPings>
! __ARTSEPARATOR__
TEXT
+ #-------- __ARTSEPARATOR__ \0\0
+ #----- __SEPARATOR__ \0
+ $tmplText =~ s/__ARTSEPARATOR__/\0\0/g;
+ $tmplText =~ s/__SEPARATOR__/\0/g;
+ $tmpl->text( $tmplText );

my $iter = MT::Entry->load_iter({ blog_id => $blog->id },
{ 'sort' => 'created_on', direction => 'ascend' });
***************
*** 588,593 ****
--- 594,602 ----
or return $class->error(MT->translate(
"Export failed on entry '[_1]': [_2]", $entry->title,
$tmpl->errstr));
+ $res =~ s/^-/- -/mg;
+ $res =~ s/\0\0/--------/g;
+ $res =~ s/\0/-----/g;
$cb->($res);
}
1;



関連しそうな過去記事:
さらに過去の記事
2009/04 (1)   2008/12 (3)   2008/11 (9)   2008/10 (10)   2008/09 (20)   2008/08 (2)   2008/07 (23)   2008/06 (16)   2008/05 (22)   2008/04 (11)   2008/03 (21)   2008/02 (20)   2008/01 (21)   2007/12 (32)   2007/11 (37)   2007/10 (46)   2007/09 (63)   2007/08 (33)   2007/07 (41)   2007/06 (81)   2007/05 (173)   2007/04 (168)   2007/03 (113)   2007/02 (123)   2007/01 (92)   2006/12 (111)   2006/11 (185)   2006/10 (20)  
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。