Ajaxによる自動投稿スクリプト

category-icon

 フォーラムで,一旦投稿した後に,引き続き編集作業を継続できないかという問い合わせがありました。ppBlogでは,公開される通常の投稿であれ非公開のドラフト投稿であれ,ポストした後は一旦トップページを表示するような流れになっている訳ですが,確かに,そんなのもありだなぁと思った次第。編集画面から投稿後のトップページへの切り替えはJavaScriptを使っていて,とりあえずは,この行き先を変更すれば,投稿後に編集画面に戻ることが出来ます。これはnaoKさんLink が解決法をフォーラムの方に書いてくれてます。 →http://forum.p2b.jp/index.php?mode=box&UID=2870&display=allLink

 で,ppBlogはAJAXWの技術をコメント表示などに用いており,またログイン認証ではAJAXでポストということもしています。なので,記事の投稿もAJAX経由でいけば,編集画面から離れることなく,バックグラウンドでのドラフト投稿が出来そうだと思い,スクリプトを書いてみました。

 まずは,AJAX経由でポストするので,そのための準備をします。POST送信で送るパラメータは Array.push() メソッドを用いて,どんどん追加していって,最後に Array.join('&') で連結すればOKです。これをppBlogに組み込まれているAjax.post()メソッドを使ってPOST送信すれば良いです。これは以下のような感じになります(細かな条件振りなどは省略して書いています)。

function AjaxAutoPost(){
 var posts = [];

 posts.push('mode=update');
 posts.push('UID='+o('UID').value);
 posts.push('draft=1');
 posts.push('type=autopost');
 posts.push('category='+o('category').value);
 posts.push('title='+encodeURIComponent(o('_title').value));
 posts.push('author='+encodeURIComponent(o('author').value));
 posts.push('com='+encodeURIComponent(o('Page1').value));
 
 posts = posts.join('&'); // posts配列を&で連結

 Ajax.post("admin.php", posts, function(data){ // AJAXでPOST送信
  [data processing]
 });
}

 これをバックグラウンドで,自動的に一定時間ごとに行いたいので,setTimeoutを用いて,この関数を繰り返し呼び出せばOKです。

 次にサーバーサイドですが,こちらはPHPでの処理となります。日本語をJavaScriptでエンコードすると,もとの文字コードが何であれ,必ずUTF-8化して送出してくれます。なので,ppBlogで扱う文字コードがUTF-8以外の場合は(例えばデフォルトでのEUC-JP),その文字コードに変換してからログに記録するようにします。

autopost-shot1
新規作成画面での初期状態。

autopost-shot2
オートポスト起動中はアイコンが変わっています。

 このオートポスト機能を追加したppBlogでの記事作成画面のスクリーンショットを載せておきます。図にあるように,自動ポスト開始ボタンがあって,それをクリックすることによって,一定時間毎でのオートポストが開始されます。始動中は,ボタンが「一時停止」のボタンに変化していて,もう一度ボタンを押すと,オートポストを中断します。ボタンの隣のテキストボックスには,最後に自動ポストした時刻が表示されます。ボタンで自動投稿オンオフの切り替えが可能です。

 この機能を取り入れることの利点は,バックアップも兼ねる点でしょうか。記事をシコシコ書いて,いざ送信!って送信するとサーバーのレスポンスが悪かったりして,折角したためた記事がパーになってしまった経験が,自分は少なくとも3回あります。この自動ポストを使って,初めのうちからドラフト投稿しておけば,こういう痛い状況は極力減ると思います。

 当初は,記事をブラウザのクッキーに保存するオートセーブ機能みたいなやつも念頭にあったんですが,クッキーにはせいぜい4キロバイトぐらいが限度で(参照:クッキーの最大サイズ制限についてLink ),この容量ではとても長文には耐えられませんし,そもそもクッキーの用途とはずれている気もしますし,ここはppBlogで比較的簡単に実装できるAjaxを使うアプローチを取ってみました。

 まだ細かいところまでチェックしたわけではないんですが,試しに使ってみたいという方はどうぞ。簡単な説明文も一緒にZIPしておきます。ちなみに,editor.jsのお尻の方に今回のスクリプトを追記していますが,そこにでてくる60000という数字が,自動投稿の間隔を表しています。この場合は,60000ミリ秒すなはち1分おきにオートポストするということです。ここの数字を変えることでお好きな間隔に設定できます

 

— posted by martin at 09:35 pm   commentComment [15]  pingTrackBack [0]

この記事に対するコメント・トラックバック [15件]

1. BENIT Website — 2006/06/28@22:05:20

これは……かなり便利そうですね!:P
私はよくセッション時間が切れて、書いた文章が消えそうになることがあります(++!)
Firefoxはブラウザバックしてもテキストエリアの中身が残っていてくれるので助かりますが……IEを使っていた頃は投稿ボタンを押した瞬間に「ぬかった!」と焦ったものですf(--;

そういえば、フォント指定がメイリオになってたんですね!
今日見にきたら物凄く文字が見やすくてびっくりしました。フォントをインストールしただけで試してなかったので、早速うちのブログもメイリオを指定してみました。なんか斜体に対応してないみたいなので、正式版が待ち遠しいです。
しかし、英字フォントを先頭にしていると日本語フォントは指定に関わらずシステムフォントになってしまうIE6の仕様には困ったものです(**!)

2. ぷらむ — 2006/06/28@23:21:41

ちょっと話は違いますが。
私はふだん使ってないので、使い方がわかりませんが、記事の書き込み画面に「ワープロモードを有効にする」というのがありますね。
「ローカルプレビュー」と何が違うのでしょう。
それ以前にその「ワープロモードを有効にする」が機能不全であり、使い方がよくわかりません。
ついでにもう一つ教えて下さい。「記事の概要」というのがありますが、一度も使ったことがありません。どういった場合に使うものでしょうか。いつもこれはなんだろうな?と思って見ています。

3. ぷらむ — 2006/06/29@06:15:27

<「ワープロモードを有効にする」が機能不全であり>
機能不全ではなく画面が周期的にチラチラします。だから写真がいっぱいあるような記事だとへんなふうに見えるのです。
私の場合ふだん記事は、大半ほかのエディタで書いてから、ここへコピー貼り付けをするので、使わない機能がいくつかあります。それで念のために「ワープロモードを有効にする」をクリックして見たらそんな現象が見られました。

scrollUp4. ちらみ Website — 2006/06/29@08:54:06

私もぷらむさんと全く同じ事を思っていました。
>ワープロモード、プレビューモード

5. BENIT Website — 2006/06/29@09:29:35

ワープロモードは文字入力がリアルタイムに反映されるプレビューモードで、ローカルプレビューはラジオボタンを押した時点でのプレビューモードだと思います。

私は普段プレビューは使わないのですが、WINでの主流ブラウザ三種で試してみました。
結論から言うと、どれでも動きました。ぷらむさんのおっしゃるちらつきは、もしかしたらスペック的なものなのかもしれませんねf(--;

ただ、バグと呼ぶほどではないですが、不具合がありました。
まず、ワープロモードを使った後にローカルプレビューを選ぶと、そちらでもワープロモードと同じリアルタイム入力を反映するようになってしまいますね。一旦closeすれば問題ありません。
あと、ページのロードが終わる前にクリックするとテキストエリアが開かなかったりしますね。

私が普段プレビューを使わないのは、実際の記事でのスタイルシートと、プレビューでのスタイルシートが異なるためです。自分でテーマを作っているので、大体想像がつく、ってのもありますが。
まあ、テーマが複数あることはざらなので、その辺はしょうがないですね。

ついでといっては何ですが、エディタ関連で一つ要望があります。文字サイズの入力のセレクトボックスも、文の整形のセレクトボックスと同様の仕様にはできませんでしょうか。
現在の文字サイズの方の仕様では、選択されているサイズの入力が一発では出来ません(例えば、最初は8ptが表示されていますが、この状態では8ptを選んでもタグは挿入されません)
文の整形の方では、デフォルトが「下から選択」で、選択した後もこれにもどるので入力可能です。

6. BENIT Website — 2006/06/29@09:51:52

あ、私が試したのは最終版の一つ手前のヤツなので、もしかしたらラストアップデートで何かが変わっていてちらつきが出たりしてるのかもしれませんf(--;
もしそうだったらご容赦ください_| ̄|○

Owner Comment martin Website  2006/06/29@21:51:39

「ローカルプレビュー」と「ワープロ」機能。これは,ppBlogの初期段階から入れていたものですが,各ブラウザでの挙動が違って合わせるのも大変だし,上手くいっても完璧にプレビューを再現するものでもないし,正式版では外そうと思っています。
 
 実は,今回のオートポストを試してみたのも,これが上手く動くようなら,上記2つは外そうかなぁ,と思ったのもあります。
 外しましょうかね:(

8. uny — 2006/06/29@19:08:24

先日はお世話になりました^^
今DLできるppBlog150RC2_euc_060626.zipの方に不要なindex.htmlが入っています
確認お願いします。

Owner Comment martin Website  2006/06/29@21:54:39

unyさん,ご指摘ありがとうございます。どうやって,これが入り込んだのか謎ですが,たいしたものでなくて良かったです:) ずっと以前,間違って,自分のサーバーのID・PWDが記入されたファイルを配布したこともありましたから。

10. りょう — 2006/06/29@23:38:48

PPBLOGいつもありがたく使用させていただいてます。

今回の記事には関係ないのですが、
Googleで、ppblogを検索ワードにした場合
以前なら、トップにこのサイトが表示されていたのに
今現在、表示されません。

なんで?でしょうか。
まさか、Google八分なんてことはないでしょうけど、、、
不思議です。

scrollUpOwner Comment martin Website  2006/06/30@06:25:31

こんにちは。ググール八分は、確かドメイン内のあらゆるページにヒットしなくなるので、それじゃないとは思いますが。単にランクが低いだけでしょうか。グーグルのことは良く分かりませんねぇ。

12. ぷらむ — 2006/06/30@04:55:42

正式版まであと一歩になりましたね。
自動とあるとかなり慎重になり、テストはしてないんですが。
ひとつ確認です。
editor.jsにあるという自動投稿の間隔で、1回だけを設定する数値というのはあるんでしょうか。
自分がAjaxでドラフト投稿したいときに1回もしくは任意にできるような方法を想定しての話です。
(まあそれがなくても間隔を長くして、中断を押せば、それは可能ですが、作業をラクにするため、もしそのような数値がなければ設けていただけるとありがたいと思います。)
なお、「ローカルプレビュー」と「ワープロ」機能は、今回の追加機能と重複になるようですので、私はカットしてもいいと思います。

Owner Comment martin Website  2006/06/30@06:30:18

おはようございます。1回だけは特に設定していません。ボタンを最初に押した時点でドラフト投稿されますが、次の投稿まで60秒あるので、その間に、もう一回押せば中断となるので、それで対処していただければと。2回押すのがメンドウということであれば考えても良いですよ。
 ワープロ機能は外すと思います。

14. ぷらむ — 2006/06/30@06:36:25

>2回押すのがメンドウということであれば考えても良いですよ。
面倒くさがり屋ですから、よろしくお願いします。
2回目を押すタイミングを考えるのが面倒なので、よろしくお願いします。

scrollUp15. BENIT Website — 2006/06/30@11:49:58

別記事でつけたコメントで言った「編集でオートポストをすると多重投稿されてしまう」問題ですが、現在ダウンロードできるファイルを使ったところ、編集ではなく初回投稿の時点で「重複投稿です」とはじかれてしまいました。
編集でオートポストを使うと記事が二重になってしまうことはなくなりましたが、ドラフト記事が残ってしまいますね
あと、オートポストのたびに別個のドラフト記事が作成される模様です(**!)

>一度だけ
押した瞬間にドラフト投稿されるのですから、すぐさま二回目を押せばいいだけような気もしますがf(--;
あるいは、オートポストとは別機能と考えた方がいいのかもしれませんね。当初の「ドラフト投稿してそのまま記事投稿画面」という。

むしろ逆に、私はオートポストをデフォルトにするチェックが欲しいかもしれません(笑

>ワープロとローカルプレビュー
ワープロモードはなくてもいいかもしれませんね。
ローカルプレビューは、個人的には差し支えなければ残して置いていただけると幸いです。Webに疎い人に使ってもらうときは便利なので……。コメントのプレビューのようにbuttonにすれば分かりやすいですし、ある程度スタイルシートが設定できれば即座に出来る簡易プレビューとしては便利かな……と思うのですが。
テーマごとに色々違うのでスタイルシートは難しいところですが、例えばBlockquoteもインデントだけでなく、borderを設定したりして、明示的にタグが反映されていることが分かる程度になれば問題ないんじゃないかな、と。

この記事に対する TrackBack URL:

設定によりTB元のページに、こちらの記事への言及(この記事へのリンク)がなければ、TB受付不可となりますのであらかじめご了承下さい。

コメントをどうぞ。 名前(ペンネーム)と画像認証のひらがな4文字は必須で、ウェブサイトURLはオプションです。

ウェブサイト (U):

タグは使えません。http://・・・ は自動的にリンク表示となります

:) :D 8-) ;-) :P :E :o :( (TT) ):T (--) (++!) ?;w) (-o-) (**!) ;v) f(--; :B l_P~

     
T: Y: ALL: Online:
Created in 0.0192 sec.
prev
2017.12
next
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31