WoT CWE管理シート自動化の旅々 10.『2人のGM』
この話から「お約束」の内容は内輪ネタに近い内容が多いので注意
CWEも終わり、リアルの方も落ち着いてきたので更新再開します。
これの続き ts-hartmann.hatenablog.com
お約束1
はんどさん「ずいぶん古いタクですね……なんです?これ」
私「知らん。いつの間にかタクを管理してる場所に貼られていたらしい」
はんどさん「はあ……で、これをどうしろと?」
私「ここから海を越えて西にずっと進んだ先に、のどかな海岸C1ってポジションがあるんだがな……そこでの頭出しの打ち合いに役立つかもって話だ」
はんどさん「はあ……」
私「それを使って勝てばいいんだ。ちょろいだろ?」
はんどさん「えっ……それだけですか?こんなちょろい作業どうしてししょーがやらないんですか?(無茶ぶりだろ)」
私「私はこれからGMだからな」
はんどさん「GM?」
私「戦闘出すぎて疲れてよー」
はんどさん「はあ……(逃げたなてめー)」
私「くれぐれもそのタク以外のことをやるなって話だ。なんか皆の気が狂ってしまうかもな」
はんどさん「あいあいさー!絶対にこのタク以外はやりません!じゃ、行ってきまーす。ふっふぅー!」
私「さてと、じゃあ私もやるとするかな」
やりたいこと
戦闘ログ取りたい。最終的には戦闘予定表の右側の表に結果を記入したい。
戦闘ログを取得する手順
手順1. GAS側の記述
多分これです。GMから直接データ取ってきてます。5話に書いてあるコードをトリガーにして実行するといいかもしれません。
function getLog() { //JavaScriptを使ったデータのスクレイピング※phantomjscloudを使用(クランCW戦闘ログの抽出) const URL = 'https://asia.wargaming.net/globalmap/#clanlog/clanID'; //Grobal Map for world of Tanks clan battle's log(TANOC) var key = 'Apikey'; var option = {url:URL, renderType:"HTML", outputAsJson:true}; var payload = JSON.stringify(option); payload = encodeURIComponent(payload); var url = "https://phantomjscloud.com/api/browser/v2/"+ key +"/?request=" + payload; var response = UrlFetchApp.fetch(url); var json = JSON.parse(response.getContentText()); var source = json["content"]["data"]; //logファイルにログを書き出す var id = "スプレッドシートのid"; var spreadSheet = SpreadsheetApp.openById(id); var sheetName = "data_log"; var str = source; var result = str.substr(95000);//n文字以降の文字のみ表示※削除する文字数は各CW・CWEごとに仕様を合わせる var ary = result.split(/(?=The clan lost a battle against the)|(?=The clan defeated the)/); //The clan lost a battle against theかThe clan defeated theで文字列を区切って配列格納 var count = ary.length; //配列変数aryの配列数を調べる Logger.log(result); spreadSheet.getSheetByName(sheetName).getRange("A1:D1000").clearContent(); //セル内のコンテンツ削除※値や数式 for (var i = 0; i < count; i++) { spreadSheet.getSheetByName(sheetName).getRange(i + 1, 1).setValue(ary[i]); //配列変数aryのi+1番目に格納されている値をセルAi+1に入力 } logData1(); }
clanIDには自クランのid、Apikeyには自分のphatomjscloudアカウントのApikeyを、スプレッドシートのidには使用しているスプレッドシートのIDを代入してください。
手順2. スプレッドシート側の記述
「data_log」「data_log2」のシートを作成します。それぞれのシートの役割はこんな感じです。
「data_log2」のいくつかのセルに以下のように記入をしてください。
- A2セル:
=IFERROR(TEXT(TEXT(REGEXEXTRACT(data_log!$A2,"data-role="&CHAR(34)&"time"&CHAR(34)&">(.+?)</span>"),"[hh]:mm")+'Province参照'!$F$1,"[hh]:mm"))
- B2セル:
=IFERROR(REGEXEXTRACT(data_log!$A2,"data-action="&CHAR(34)&"select-province"&CHAR(34)&">(.+?)</a> province."))
- C2セル:
=iferror(if(B2="","",query('Province参照'!$A:$D,"select D where C ='"&B2&"'")))
- D2セル:
=IFERROR(REGEXEXTRACT(data_log!$A2,"> \[(.+?)\]</span>"))
- E2セル:
=IFERROR(IF(REGEXEXTRACT(data_log!$A2,"(.+?) <span class="&CHAR(34)&"clan-name"&CHAR(34)&">")="The clan lost a battle against the","敗北",IF(REGEXEXTRACT(data_log!A2,"(.+?) <span class="&CHAR(34)&"clan-name"&CHAR(34)&">")="The clan defeated the","勝利","")))
これで手順は以上となります。これをなんとかして戦闘予定表に記入するのです。
お約束2
(会議中……)
つるさん「あなた変わりましたよねえ……」
私「別に。まあでも、合流すぐの頃よりは今の関係の方が好きかな。楽だし」
つるさん「ほんとに変わりましたね」
私「お互い(GM管理が)上手くなったってことだろ。さて、日を跨いじまう、急ぐぞ。」
私「?(何かを思い出す)」
私「あのタクティクス……あれは!」
私「今後の予定変更だ!」
つるさん「ちょっとどうしたんです?」
私「のどかな海岸の戦闘に行くぞ!!」
つるさん「もう唐突ですね、相変わらず……待ってくださーい」
その日、私(ねろさん)はあるマップの指揮をやろうとしていました。そこは私の得意マップで、C1のポジションにおいて頭出しで殴り合い、そのまま決着が着く展開を良く見るチーフの聖地。そう、のどかじゃないマップ「のどかな海岸」です。
続き