2005年04月22日

mt.setNextScheduledPost

mt.setNextScheduledPostについて少しハックしてみた。

MT 3.1.5には

load_iter({blog_id => $blog->id, status => FUTURE}, {'sort' => 'created_on', direction => 'descend'}); my @queue; while (my $i = $iter->()) { push @queue, $i->id(); } my $changed = 0; my $total_changed = 0; my @results; # my $next_scheduled = undef; foreach my $entry_id (@queue) { my $entry = MT::Entry->load($entry_id); if ($entry->created_on <= $now) { $entry->status(RELEASE); $entry->save or die $entry->errstr; start_background_task(sub { $mt->rebuild_entry( Entry => $entry, Blog => $blog ) or die $mt->errstr; }); $changed++; $total_changed++; } else { # my $entry_utc = MT::XMLRPCServer::Util::ts2iso($blog, # $entry->created_on); # if (!defined($next_scheduled) || $entry_utc < $next_scheduled) # { # $next_scheduled = $entry_utc; # } } } if ($changed) { $mt->rebuild_indexes( Blog => $blog ) or die $mt->errstr; } { responseCode => 'success', publishedCount => $total_changed, # nextScheduledTime => $next_scheduled }; }">sub publishScheduledFuturePosts { my $class = shift; my ($blog_id, $user, $pass) = @_; my $mt = MT::XMLRPCServer::Util::mt_new(); my $author = $class->_login($user, $pass); my $blog = MT::Blog->load($blog_id); my $now = time; # Convert $now to user's timezone, which is how future post dates # are stored. $now = MT::Util::offset_time($now); $now = strftime("%Y%m%d%H%M%S", gmtime($now)); my $iter = MT::Entry->load_iter({blog_id => $blog->id, status => FUTURE}, {'sort' => 'created_on', direction => 'descend'}); my @queue; while (my $i = $iter->()) { push @queue, $i->id(); } my $changed = 0; my $total_changed = 0; my @results; # my $next_scheduled = undef; foreach my $entry_id (@queue) { my $entry = MT::Entry->load($entry_id); if ($entry->created_on <= $now) { $entry->status(RELEASE); $entry->save or die $entry->errstr; start_background_task(sub { $mt->rebuild_entry( Entry => $entry, Blog => $blog ) or die $mt->errstr; }); $changed++; $total_changed++; } else { # my $entry_utc = MT::XMLRPCServer::Util::ts2iso($blog, # $entry->created_on); # if (!defined($next_scheduled) || $entry_utc < $next_scheduled) # { # $next_scheduled = $entry_utc; # } }
} if ($changed) { $mt->rebuild_indexes( Blog => $blog ) or die $mt->errstr; } { responseCode => 'success', publishedCount => $total_changed, # nextScheduledTime => $next_scheduled }; }

と定義されている。

見た感じ、blogIDを指定して、その後その記事の状態をFUTUREに変更。投稿日時をセットする、みたいな感じで出来そう。
やっぱり記事は下書きで投稿すると思われ。

まとめると、
1)なんかで記事を投稿。ただし下書き。
2)その後mt.setNextScheduledPostで時間指定。因数にblogIDと時間を設定。

でも、Cronを使えないと結果が分からん。

トラックバック:http://good.s13.xrea.com/mt/mt-tb.cgi/654

コメント


コメントする