詳しいマニュアルではありません *execute-http [#w81733ed] \![execute,http-get / post]の改良です。 #contents **きっかけ [#ab04cb7f] -おぞーにが「execute,http-getが失敗したかどうか確実に知りたい!」と言ったから。 -ゆねねーがLingrにご執心なのでいっそLingrゴーストを作れる基盤を整備したくなったから。 #br *新仕様 [#t90c98b7] -\![execute,http-get,URL,オプション,オプション,オプション...] -\![execute,http-post,URL,オプション,オプション,オプション...] 後ろにくっつくオプションの仕様は以下の通り。 *Q&A [#u5bebc1b] **--async=ASYNC ID [#a8be18e6] これを指定すると、取得完了までスクリプトの実行を停止する従来の仕様ではなく、取得完了を待たずに続行して、完了時にイベントが通知されます。~ =の後に指定するASYNC IDは、イベントを識別するためのIDです。要するにReferenceに直接ここで指定した文字列が入ります。 -Q.saoriをなんだか理解しているでしょうか? -A.筆者はあまり理解していません GET SHIORI/3.0 ID: OnExecuteHTTPComplete / OnExecuteHTTPFailure Reference0: post/get Reference1: ASYNC IDで指定した文字列がそのまま入る Reference2: URLそのまま Reference3: 取得したファイルのフルパス Reference4: 取得結果コード ( timeout,fileio,200,204,403,404... ) Reference5: Set-Cookieでクッキーを受け取ったらその文字列(次回すぐ使えるよう加工済) -Q.返り値と戻り値ってどう違うんですか?同じだって聞いたんですけど -A.IMEだと「戻り値」で一つの単語として変換できるぞ! ASYNC IDにOnではじまる名前を指定すると、その名前のイベントがOnExecuteHTTPCompleteの代わりに発生します。その場合、失敗時には名前+Failureのイベントが発生します。例:OnHogeHoge->OnHogeHogeFailure -Q.なんで戻り値を返すんですか? -A.ごみばこブッ飛ばすsaoriは、成功したかどうか返してくれなきゃゴーストが対応できないでしょうが! **--cookie=クッキーデータ [#fe31053c] Cookieヘッダに設定するクッキーのデータを設定します。 通常、前回のOnExecuteHTTPCompleteのReference5を''そのまま''指定します。 -Q.じゃあ戻り値を返さないsaoriもあるんですか? -A.あるかもしれません **--file=ファイル名 [#w35dcf9a] 取得するデータを保存するファイル名を指定します。~ 保存される場所は (ゴースト)/ghost/master/var/(ファイル名) 固定です。その他の場所には書き込めません。 **--nodescript [#n76c4fee] オンラインを示す表示と、ダウンロード状況を示す表示を出しません。~ long-pollをしたい場合など、オンライン表示が常に出ていると邪魔な場合に使います。 *華和梨をsaoriとして使う [#o965391e] **--param=パラメータ [#i348fd54] GET/POSTのパラメータ(URLの?より後、あるいはPOSTするデータ)を=以降に指定します。~ 複数並べると、間を改行(CR+LF)区切りでつなげます。~ URLエンコードしていない場合(=エンコード対象の文字が含まれる場合)は、以下のparam-charsetの指定に従ってエンコードされますが、&と=は無視されます。 -華和梨で(ミドルウェアを使わずに)ゴーストを作るか、作ろうとした経験があった方がいいかも -kawarirc.kisってなに?っていう人はまず華和梨ねえさんに手取り腰取り教えてもらいなさい **--param-charset=文字コード [#jfe30521] 上記パラメータの文字コードを指定します。標準はUTF-8です。~ SHIORIなどと同じ文字コードが使えます(例:Shift_JIS・EUC-JP) **saoriの決まりを覚えておこう [#qe56d47a] **--timeout=秒数 [#q7856b19] 通信するサーバの応答を待つ秒数を指定します(ダウンロードにかかる時間の制限ではありません)。~ 300秒=5分以上を指定することはできません。 -仕様書を読んでみましょう **その他 [#e60068f3] 上記に合致しなければ--param=と同等とみなします(互換動作) >SAORIを呼び出す側は返り値のステータスコードによって適切なエラー処理を行う必要がある -うわーめんどくせー >200 OK - 正常終了 SAORIモジュールの呼び出しは正常に終了した。 >204 No Content - 返り値なし 処理は正常に行われたが、結果として返す値はなかった。 >400 Bad Request - 呼び出しの不備 引数の数、内容の不一致。リクエストの内容が解釈不能など。 >500 Internal Server Error - SAORI側エラー SAORIモジュール側でなんらかのエラーが発生した。 -よーしつまりいつでも200を返せばいいってことだね! -誰かに配布するわけでなし自分で使うだけだからいいよね! -ていうかここしっかり作っても労力ばっかりで得しないんだよね! -作註) 本当はいけないことです。責任のある大人と一緒に遊びましょう *使うには何が必要なの? [#e1ffb6a8] ズバリこの2つだ! -kawari.dll -kawarirc.kis **kawarirc.kisの中身 [#v88e2fa0] -kawarirc.kisの中身は、しおりこーるばっく?とかそこらへんのは不要!いらないんだぜ -ただしsatori_conf.txtの@SAORIに kawari,kawari.dll とか、華和梨をさおりとして定義するのは大前提 *超簡単なソース [#lf190271] System.Callback.OnSaoriExecute : $( clear 戻り値; # kawari.(R0)にジャンプ。この先で${戻り値}も設定すること。 entry kawari.${System.Request.Argument0}; # 戻り値とステータスコードの設定 setstr System.Response.Result ${戻り値}; setstr System.Response 200; ) >System.Request.Argument0 ... 引数。(paint,あい,いらん)の、「あい」が0。「いらん」が1。 >System.Response.Result ... この変数に戻り値を突っ込め! >System.Response ... この変数にステータスコードを突っ込め! -これをkawarirc.kisに書いておくだけでおk。やったね!かんたんだね! -おいステータスコードいつも200返すつもりk( -しらn( ***ふろく:正しい(かも知れない)ステータスコードの返し方 [#ieb02c50] 順番に条件分岐するんだ -なんか引数がいろいろ間違って渡されたんだけどぉ? --$(setstr System.Response 400)にしてから終わらせるんだCJ 作戦失敗だ -処理したけど ${戻り値} の中身がカラだ --$(setstr System.Response 204)にしてから終わらせるんだCJ 一応作戦は成功だ -ここまでの条件に合ってないんだ。これって成功か? --$(setstr System.Response 200)にしてから終わらせるんだCJ ノープロブレムだ --$(setstr System.Response.Result ${戻り値})も忘れるなよ **戻り値を複数返したいんだがどうしたらいい? [#f0fc1df3] -ごめんちょっと待って華和梨のマニュアル読んでくるから *で具体的に何ができんのさ [#a7a06ac7] -僕はこんな関数を作ったことがあるんだ =kis # $(satori_svget ディレクトリ名 欲しい値) # # 例 $(satori_svget "Iron_Dream" "$起動回数") # ゴースト「鉄の夢」のセーブデータから$起動回数の値を得る。 function satori_svget $( if $[ $(size @arg) != 3 ] $(return "false"); setstr @a $@arg[1]; textload @b ..\..\..\${@a}\ghost\master\satori_savedata.txt; set @i 0 ; loop $(size @b) $(split @c $@b[${@i}] " " ; inc @i); return $@c[$[ $(find @c $@arg[2]) + 1 ]]; ); =end -もちろんこのままじゃあ使えない、そこでこいつをコピペして使えるようにする # 里々で使う例 (kawari、呼び出すエントリ、フォルダ名、欲しい値) # # 実際に使う例 (kawari、セーブデータを読む、Iron_Dream、$起動回数) # これでこの括弧はゴースト「鉄の夢」のセーブデータの$起動回数の値に置換される! kawari.セーブデータを読む : ( setstr @a ${System.Request.Argument0}; textload @b ..\..\..\${@a}\ghost\master\satori_savedata.txt; set @i 0 ; loop $(size @b) $(split @c $@b[${@i}] " " ; inc @i); setstr 戻り値 $@c[$[ $(find @c ${System.Request.Argument1}) + 1 ]]; ) -Q.ディレクトリ? -A.MS-DOSの名残なんだよフォルダとかって慣れねえよ