幻日幻月環

作成した伺かの更新情報などをつぶやくところ

ゴースト上でアンケートを実施する

2013/12/16加筆修正
----

里々のちょっとしたロジックを提供するコーナー。
全て、里々wikiukadocの情報の組み合わせで作ります。
里々のサンプルゴースト「Rポストと狛犬」を書き換えて自ゴーストを作るくらいの知識が必要です。

今回は、「ゴースト上でアンケートを実施する」。
ゴーストを開発していると、たくさんのユーザーの意見の統計を取りたくなることもあると思います。
ゴースト公開サイトでアンケートを取るのが一般的ですが、そもそもユーザーさんが数多くゴーストを入れている場合、その全てのゴーストの開発ブログをチェックすることはあまり無いと言ってよいでしょう。
喜んで協力してくださるユーザーさんもいますが、そのようなユーザーさんは日頃から意見をくださることが多く、なんとなく使っているというユーザーさんはサイレント・マジョリティとなってしまいがちです。
ゴースト起動時に、ゴースト上でアンケートを取るようにすれば、そのようなユーザーさんからも意見がもらえる可能性があります。
また、バルーンに表示する以上、難しい条件は入りきらないため、質問を簡略化せざるを得ません。
ただし、ユーザー側から考えれば、軽い気持ちでさっと答えるに適したものになるという利点もあります。
結果として気軽に答えてもらいやすくなると思われます。

今回は、web拍手を用いて実現するサンプルを示したいと思います。
ただし、ユーザーさんの環境によっては、SSPが固まったり、正常に送信できないことがあるようです。
動かないこともあると、事前に注意を呼びかけておきましょう。

詳細は続きに。
○初期設定
まずは、送信先を設定します。
今回は、駄でべwikiのひのはるさまの記述を参考に、web拍手を使用します。
また、暦にしきらへんのTIPSも参考にしてください。

まず、web拍手プラスでIDを取得します。
新規登録でIDを取得してください。
その後、拍手画面で名前を入力できるようにします。
なくても良いのですが、感想送信用と一緒に運用する場合はあった方が区別しやすいです。
拍手1

この記事の下の方に、スクリプト全文を載せてあります。

○使い方
1.下記にあるコードをコピーして、以下にあげる4箇所を書き換えます。
・アンケート名
・アンケート期限
・アンケート条件
・拍手ID

2.質問部分を書き換えてください。
質問部分はおそらく直感的に理解できると思います。

もし、2回目のアンケートを行いたい場合は、アンケート名とアンケート期限を書き換えればOKです。
必要があれば、アンケート条件も書き換えてください。

○処理解説
つづいて、アンケート処理。
実際にやってることは、多くのゴーストが搭載している、「作者にコメントを送る」と変わりません。
ただ、アンケートの回答を送るので処理が複雑になっています。
スクリプトの空白は【タブ】です。コピーできない場合は適時置き換えてください。

やっていることは大きく分けると以下です。
・アンケートにもう回答済みかどうか
・アンケートの回答処理
・送信処理&アンケート回答済み処理
・ユーザーさんがアンケートに答えたくない場合の処理

テスト用の辞書を1つ追加してスクリプトをコピーし、一緒に眺めると理解しやすいかも知れません。

・アンケートにもう回答済みかどうか
アンケートは1人1回とします。そのために、回答済みかどうかを判断する必要があります。
(アンケート判定)
これを条件式に書いておくと、条件を満たした時だけアンケート処理へジャンプします。
好感度などの条件は必要に応じてアンケート条件に書いてください。
「(アンケート名)チェック」という変数(今回であれば(アンケート名)が展開され、「第一回アンケートチェック」と言う名前の変数になります)は、以下の値を取ります。
アンケート回答前なら、空っぽ
アンケートの回答が終了しているなら、1
アンケートの回答を拒否したなら、0
2回目以降のアンケートの場合は、アンケート名を変えてください。

・アンケートの回答処理
瞬間表示と、選択肢の表示でアンケートっぽい表示をします。
φ(ふぁい)は、次の文字の効果を無効化します。
たとえば、replace_after.txtに以下の記述があったとします。
・【タブ】・\w3
?【タブ】?\w6
これらの記述は、自動的にウェイトを入れてくれて便利ですが、弊害もあります。
\_qの瞬間表示さくらスクリプトで囲っても、ウェイトがかかってしまうという点です。
瞬間表示なのにウェイトがかかると、ユーザー視点だとすごく変な動作に見えるので気をつけましょう。
これらのウェイト挿入は、φ・、φ?と書くことで無効化できます。
回答処理は、\qの選択肢を使用します。
_選択肢
という形を使わないのは、選択先のイベントに値を渡すためです。
ジャンプ先のイベント名を、Onで始まるものにしておくと、値を渡すことができます。
\q[○ポストかなφ・φ・φ・,OnQuestion1Answer,ポスト]
上記では、「*OnQuestion1Answer」内で、(R0)と書くと、「ポスト」というメッセージを取得できるようになります。
\q[○断然φ、狛犬,OnQuestion1Answer,狛犬]
上記は、選択先のイベントが同じですが、(R0)が異なるため、異なる回答でも同じイベントで処理できます。
さらに推し進めると、以下のようなこともできます。
\q[○断然φ、狛犬,OnQuestionAnswer,狛犬,1]
こうすると、(R0)に「狛犬」、(R1)に「1」が入るので、どの質問のどの回答かも一元管理することができます。
また、アンケート回答中にタイムアウトしたり、時報メッセージやマウスクリック反応が発生しても困るので、\*(今回のみ選択肢でタイムアウトが発生しない)と\t(今回のみマウス反応や時報などのイベントを全て無視する)を記述しています。

・送信処理&アンケート回答済み処理
ここが一番のキモです。
実際の送信部分は、駄でべwikiやukadocを参考に記述します。
「@拍手ID」の部分に、取得したweb拍手IDを記述しておいてください。
この部分は不安定で、送れなかったり、遅れてもSSPが固まってしまったりすることがあります。
回線が繋がっていなかったりして通信がうまくいかなかった場合は、「○○Failure」という名前のイベントが発生します。
(今回のサンプルではOnWebCrapResponseFinishFailure)
また、送信後も、ネットワークが不調だったりすると失敗する可能性があります。
これは、http-postのhttpステータスコードがリファレンスに格納されているため、これで判別します。
(R4)が400以上ならエラーとして処理します。404 Not Foundが有名ですね。
ここまで全部処理が済んだら、きちんと送信できたということで「(アンケート名)チェック」に1を格納しています。
その後、終了前にSSPが落ちたりするとセーブデータが生成されず、次回起動時にまたアンケートが始まってしまうため、「手動セーブ【タブ】実行」でセーブを行っています。

きちんとアンケートが送信されると以下のように表示されます。
拍手2
稀に、送信は成功したもののOnWebCrapResponseFinishイベントが発生しないということがあります。
そうすると完了処理が動かないため、次回起動時にもアンケートが出現してしまいます。
これを避けるため、乱数でIDを割り振っています。IDが重複した場合は、ほぼこの現象と思って良いでしょう。

・ユーザーさんがアンケートに答えたくない場合の処理
アンケートの出現条件が、「(アンケート名)チェック」という変数が存在しない場合なので、「(アンケート名)チェック」に0を格納しておきます。

以下、スクリプト全文です。
----

*起動
:はろー。
>アンケートを始める (アンケート判定)

########################
#アンケート設定ここから

#アンケートの名前
#この「第1回アンケート」という部分を書き換えると別のアンケートと認識します
@アンケート名
第1回アンケート

#年月日の表記
#下記の場合2013年12月31日までで、31日も含みます
@アンケート期限
20131231

#アンケートの条件
#ここにゴーストごとの条件を記述します
#calcのカッコ内なので、改行は無視されます
@アンケート条件
(calc,
(好感度) >= 50 &&
(累計時) >= 1 &&
(起動回数) >= 5


#web拍手プラスID
#web拍手プラスで取得したIDを記述してください
@拍手ID
ここに取得したweb拍手のID部分を記入

#アンケート判定
#必要がなければそのままで大丈夫です
@アンケート判定
(when,
(変数「(アンケート名)チェック」の存在) == 0 &&
(calc,
(zen2han,(現在年))
(when,(現在月) < 10,0)(zen2han,(現在月))
(when,(現在日) < 10,0)(zen2han,(現在日)) <=
(アンケート期限)
) &&
(アンケート条件),
1,
0


#アンケート設定ここまで
########################

########################
#アンケート内容ここから

*アンケートを始める
#まずは回答内容を初期化しておきます
$アンケート内容1 ポスト
$アンケート内容2 トーク
#以下は変数の削除、「$アンケートコメント」の右側にタブが書いてあります
$アンケートコメント
#今回のアンケート用のIDが存在しない場合のみ、IDを割り振ります
(when,(変数「(アンケート名)回答ID」の存在) == 0,
(set,(アンケート名)回答ID,(乱数1~1000000))

:そういえば、アンケートがあるんだ。
答えてくれると嬉しいな。
φ(注意φ:環境によって動かないことがありますφ。φ)\x
>実際のアンケート処理

#SSPデフォルトバルーンなら、
#「:\_q」の部分を「:\b[2]\_q」とすることで大きなバルーンを出せます
*実際のアンケート処理
\*\t
:\_q質問1 ポストと狛犬φ、どっちが好きφ?
今の回答 (アンケート内容1) \q[○変更する,アンケート回答1]
質問2 更新はどこを重点的にして欲しいφ?
今の回答 (アンケート内容2) \q[○変更する,アンケート回答2]
その他 なにかコメントがあればどうぞφ!
「(when,(変数「アンケートコメント」の存在),
(substr,(アンケートコメント),0,10)φ・φ・φ・,
未入力
)」 \q[○入力する,アンケート入力処理]

\q[○これで送信φ!,アンケートを送信する処理] \q[○このアンケートはパスでφ・φ・φ・,アンケートキャンセル]
\_q

#以下の「アンケート回答1」と「OnQuestion1Answer」をコピーして数字を変えることで質問を増やせます
#\q[~]の内部を含め、「OnQuestion1Answer」の半角数字も忘れずに変えてください
*アンケート回答1
\*\t
:\_q質問1 ポストと狛犬φ、どっちが好きφ?
\q[○ポストかなφ・φ・φ・,OnQuestion1Answer,ポスト]
\q[○断然φ、狛犬,OnQuestion1Answer,狛犬]
\_q

*OnQuestion1Answer
$アンケート内容1 (R0)
>実際のアンケート処理

*アンケート回答2
\*\t
:\_q質問2 更新はどこを重点的にして欲しいφ?
\q[○トークこそゴーストの命,OnQuestion2Answer,トーク]
\q[○触り反応が充実することが何より重要,OnQuestion2Answer,触り反応]
\q[○ストーリーこそゴーストの要,OnQuestion2Answer,ストーリー]
\_q

*OnQuestion2Answer
$アンケート内容2 (R0)
>実際のアンケート処理

#ユーザーの自由記入欄
#web拍手プラスは入力1000文字までのため、
#他の回答が入ることを考えて入力文字数の最大値を800に設定します
*アンケート入力処理
$スクリプトの一番頭 \C
\![open,inputbox,アンケートコメント,-1,(when(バイト値,1)(変数「アンケートコメント」の存在)(バイト値,1)(アンケートコメント)),--limit=800]

#このOnUserInputは「Rポストと狛犬」のdic02_Event.txtにあります
#ポスト改変で作成している場合は削除してください
*OnUserInput
>(R0)をタイムアウト (compare,(R1),timeout)
>(R0)を空打ちされた (is_empty,(R1))
$(R0) (R1)
>(R0)を教えてもらった

#今回はinputboxオープン時に表示時間に「-1」(タイムアウトなし)を指定しているため、
#タイムアウトは発生しませんが、一応書いておきます
*アンケートコメントをタイムアウト
>実際のアンケート処理

*アンケートコメントを空打ちされた
#以下は変数の削除
$アンケートコメント
>実際のアンケート処理

*アンケートコメントを教えてもらった
#半角カンマと半角ダブルクオーテーションはさくらスクリプトの区切り文字として使っているため、
#全角に変換して誤動作するのを防ぎます
$アンケートコメント (replace(バイト値,1)(アンケートコメント)(バイト値,1),(バイト値,1),)
$アンケートコメント (replace(バイト値,1)(アンケートコメント)(バイト値,1)"(バイト値,1)”)
>実際のアンケート処理

*アンケートキャンセル
$(アンケート名)チェック 0
\![close,inputbox,アンケートコメント]
:うー、答えたくないなら仕方ないね・・・。

#アンケート内容ここまで
########################

########################
#アンケート送信処理ここから

#回答を追加した場合は、
#「\![execute~」の部分に「回答3=(アンケート内容3),φ」などを追加してください
*アンケートを送信する処理
\![close,inputbox,アンケートコメント]
\![execute,http-post,http://clap.webclap.com/clap.php?id=(拍手ID),φ
--param=message_name="(アンケート名)"&message_body="φ
ID=((アンケート名)回答ID),φ
回答1=(アンケート内容1),φ
回答2=(アンケート内容2),φ
(when,(変数「アンケートコメント」の存在),コメント=(アンケートコメント))φ
",--async=OnWebCrapResponseFinish]

#これ以下は処理の部分は必要がなければそのままで大丈夫です
#セリフだけ書き換えを行ってください
*OnWebCrapResponseFinish
(when,(R4) > 399,(拍手エラー処理),(拍手終了処理))

#拍手送信さくらスクリプトがネットワークにつながらないなどで失敗した場合、このイベントが発生します
#OnWebCrapResponseFinishの方は発生しません
*OnWebCrapResponseFinishFailure
:送信ができなかったよ・・・。
回線状況とか、ファイアウォールの設定などを確認してみて。

*拍手終了処理
$(アンケート名)チェック 1
$手動セーブ 実行
:送信、完了!
ご協力ありがとうね!

*拍手エラー処理
:送信、失敗しちゃった・・・。
φ(HTTPステータスコードφ:(R4)φ)
次回起動時、またやり直してみてね。

#アンケート送信処理ここまで
########################
----
PageTop

コメント


管理者にだけ表示を許可する